你好,我有負載均衡器下面很簡單的配置/故障切換:Nginx的嘗試代理通到上游名稱
upstream backend_stream {
server 192.168.0.130:8080 max_fails=2 fail_timeout=30s;
server 192.168.0.131:8080 max_fails=2 fail_timeout=30s backup;
}
server {
listen 443 ssl;
server_name exmaple.com;
# SSL stuff
proxy_ignore_client_abort on;
proxy_connect_timeout 3s;
proxy_read_timeout 5s;
proxy_send_timeout 5s;
send_timeout 20s;
proxy_next_upstream_timeout 60s;
proxy_next_upstream_tries 0;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504 non_idempotent;
proxy_pass http://backend_stream;
access_log /path/to/access.log vhosts_extra;
error_log /path/to/error.log;
}
而下面的訪問日誌格式:
log_format vhosts_extra '$host:$server_port $remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" [$upstream_addr - $upstream_response_time] $request_time';
最重要是最後的部分:[$upstream_addr - $upstream_response_time]
。我正在記錄哪個上游服務器被選中,以及上游服務器的響應是什麼。 Nginx docs。
有了這樣的配置,我想測試它可以處理的流量。要做到這一點我已經使用了Apache的基準測試命令行工具的時候送了一些concurent請求,如下:
ab -T application/json -H 'Authorization: Basic XXX' -p ab_post.json -n 1000 -c 30 https://example.com
,直到它開始嗆我的配置是處理了一段時間的要求(這沒問題,我的應用程序有其限制)。但是當第一臺服務器開始超載並且nginx必須開始使用備份服務器時,有些奇怪的事情正在發生。有時nginx試圖將請求傳遞給上游服務器,而不是上游名稱!當然這不作爲主機存在。 ... [192.168.0.131:8080, backend_stream - 5.000, 0.000] 5.051
查看日誌片段:
example.com:443 12.34.12.34 - - [17/Nov/2016:16:15:54 +0000] "POST/HTTP/1.0" 200 1183 "-" "ApacheBench/2.3" [192.168.0.130:8080, 192.168.0.131:8080 - 5.000, 3.730] 8.783
example.com:443 12.34.12.34 - - [17/Nov/2016:16:15:54 +0000] "POST/HTTP/1.0" 200 1183 "-" "ApacheBench/2.3" [192.168.0.131:8080 - 3.843] 3.907
example.com:443 12.34.12.34 - - [17/Nov/2016:16:15:54 +0000] "POST/HTTP/1.0" 200 1183 "-" "ApacheBench/2.3" [192.168.0.130:8080, 192.168.0.131:8080 - 5.000, 3.942] 9.003
example.com:443 12.34.12.34 - - [17/Nov/2016:16:15:54 +0000] "POST/HTTP/1.0" 200 1183 "-" "ApacheBench/2.3" [192.168.0.131:8080 - 4.044] 4.106
example.com:443 12.34.12.34 - - [17/Nov/2016:16:15:55 +0000] "POST/HTTP/1.0" 200 1183 "-" "ApacheBench/2.3" [192.168.0.130:8080, 192.168.0.131:8080 - 5.000, 4.125] 9.182
example.com:443 12.34.12.34 - - [17/Nov/2016:16:15:55 +0000] "POST/HTTP/1.0" 200 1183 "-" "ApacheBench/2.3" [192.168.0.131:8080 - 4.249] 4.309
example.com:443 12.34.12.34 - - [17/Nov/2016:16:15:55 +0000] "POST/HTTP/1.0" 200 1183 "-" "ApacheBench/2.3" [192.168.0.130:8080, 192.168.0.131:8080 - 5.000, 4.306] 9.372
example.com:443 12.34.12.34 - - [17/Nov/2016:16:15:55 +0000] "POST/HTTP/1.0" 200 1183 "-" "ApacheBench/2.3" [192.168.0.131:8080 - 4.410] 4.477
example.com:443 12.34.12.34 - - [17/Nov/2016:16:15:55 +0000] "POST/HTTP/1.0" 200 1183 "-" "ApacheBench/2.3" [192.168.0.130:8080, 192.168.0.131:8080 - 5.001, 4.504] 9.566
example.com:443 12.34.12.34 - - [17/Nov/2016:16:15:56 +0000] "POST/HTTP/1.0" 200 1183 "-" "ApacheBench/2.3" [192.168.0.131:8080 - 4.583] 4.642
example.com:443 12.34.12.34 - - [17/Nov/2016:16:15:56 +0000] "POST/HTTP/1.0" 200 1183 "-" "ApacheBench/2.3" [192.168.0.130:8080, 192.168.0.131:8080 - 5.000, 4.707] 9.770
example.com:443 12.34.12.34 - - [17/Nov/2016:16:15:56 +0000] "POST/HTTP/1.0" 200 1183 "-" "ApacheBench/2.3" [192.168.0.131:8080 - 4.798] 4.860
example.com:443 12.34.12.34 - - [17/Nov/2016:16:15:56 +0000] "POST/HTTP/1.0" 200 1183 "-" "ApacheBench/2.3" [192.168.0.130:8080, 192.168.0.131:8080 - 5.000, 4.884] 9.945
example.com:443 12.34.12.34 - - [17/Nov/2016:16:15:56 +0000] "POST/HTTP/1.0" 502 166 "-" "ApacheBench/2.3" [192.168.0.131:8080, backend_stream - 5.000, 0.000] 5.048
example.com:443 12.34.12.34 - - [17/Nov/2016:16:15:57 +0000] "POST/HTTP/1.0" 504 176 "-" "ApacheBench/2.3" [192.168.0.130:8080, 192.168.0.131:8080 - 5.000, 5.002] 10.061
example.com:443 12.34.12.34 - - [17/Nov/2016:16:15:57 +0000] "POST/HTTP/1.0" 502 166 "-" "ApacheBench/2.3" [192.168.0.131:8080, backend_stream - 5.000, 0.000] 5.051
example.com:443 12.34.12.34 - - [17/Nov/2016:16:15:57 +0000] "POST/HTTP/1.0" 504 176 "-" "ApacheBench/2.3" [192.168.0.130:8080, 192.168.0.131:8080 - 5.001, 5.000] 10.059
example.com:443 12.34.12.34 - - [17/Nov/2016:16:15:57 +0000] "POST/HTTP/1.0" 502 166 "-" "ApacheBench/2.3" [192.168.0.131:8080, backend_stream - 5.001, 0.000] 5.052
有時它真的已經很努力......
example.com:443 12.34.12.34 - - [17/Nov/2016:16:15:58 +0000] "POST/HTTP/1.0" 502 166 "-" "ApacheBench/2.3" [192.168.0.131:8080, backend_stream - 5.002, 0.000] 5.050
example.com:443 12.34.12.34 - - [17/Nov/2016:16:15:58 +0000] "POST/HTTP/1.0" 502 166 "-" "ApacheBench/2.3" [192.168.0.131:8080, backend_stream - 5.000, 0.000] 5.048
example.com:443 12.34.12.34 - - [17/Nov/2016:16:15:58 +0000] "POST/HTTP/1.0" 502 166 "-" "ApacheBench/2.3" [192.168.0.131:8080, backend_stream - 5.000, 0.000] 5.064
example.com:443 12.34.12.34 - - [17/Nov/2016:16:15:58 +0000] "POST/HTTP/1.0" 502 166 "-" "ApacheBench/2.3" [192.168.0.131:8080, backend_stream - 5.001, 0.000] 5.065
example.com:443 12.34.12.34 - - [17/Nov/2016:16:15:59 +0000] "POST/HTTP/1.0" 502 166 "-" "ApacheBench/2.3" [192.168.0.131:8080, backend_stream - 5.001, 0.000] 5.059
example.com:443 12.34.12.34 - - [17/Nov/2016:16:15:59 +0000] "POST/HTTP/1.0" 502 166 "-" "ApacheBench/2.3" [192.168.0.131:8080, backend_stream - 5.000, 0.000] 5.062
example.com:443 12.34.12.34 - - [17/Nov/2016:16:15:59 +0000] "POST/HTTP/1.0" 502 166 "-" "ApacheBench/2.3" [192.168.0.131:8080, backend_stream - 5.000, 0.000] 5.064
example.com:443 12.34.12.34 - - [17/Nov/2016:16:15:59 +0000] "POST/HTTP/1.0" 502 166 "-" "ApacheBench/2.3" [192.168.0.131:8080, backend_stream - 5.000, 0.000] 5.063
example.com:443 12.34.12.34 - - [17/Nov/2016:16:15:59 +0000] "POST/HTTP/1.0" 502 166 "-" "ApacheBench/2.3" [192.168.0.131:8080, backend_stream - 5.000, 0.000] 5.066
example.com:443 12.34.12.34 - - [17/Nov/2016:16:16:00 +0000] "POST/HTTP/1.0" 502 166 "-" "ApacheBench/2.3" [192.168.0.131:8080, backend_stream - 5.001, 0.000] 5.051
example.com:443 12.34.12.34 - - [17/Nov/2016:16:16:00 +0000] "POST/HTTP/1.0" 502 166 "-" "ApacheBench/2.3" [192.168.0.131:8080, backend_stream - 5.000, 0.000] 5.055
example.com:443 12.34.12.34 - - [17/Nov/2016:16:16:00 +0000] "POST/HTTP/1.0" 502 166 "-" "ApacheBench/2.3" [192.168.0.131:8080, backend_stream - 5.001, 0.000] 5.066
example.com:443 12.34.12.34 - - [17/Nov/2016:16:16:00 +0000] "POST/HTTP/1.0" 502 166 "-" "ApacheBench/2.3" [192.168.0.131:8080, backend_stream - 5.000, 0.000] 5.057
example.com:443 12.34.12.34 - - [17/Nov/2016:16:16:00 +0000] "POST/HTTP/1.0" 502 166 "-" "ApacheBench/2.3" [192.168.0.131:8080, backend_stream - 5.000, 0.000] 5.032
example.com:443 12.34.12.34 - - [17/Nov/2016:16:16:01 +0000] "POST/HTTP/1.0" 502 166 "-" "ApacheBench/2.3" [192.168.0.131:8080, backend_stream - 5.001, 0.000] 5.001
example.com:443 12.34.12.34 - - [17/Nov/2016:16:16:01 +0000] "POST/HTTP/1.0" 502 166 "-" "ApacheBench/2.3" [192.168.0.131:8080, backend_stream - 5.002, 0.000] 5.002
我想這一切時,上游服務器被標記爲「它正在發生失敗「,但這只是一個猜測。我無法在文檔或其他任何地方找到有關此類行爲的任何信息。
這是正常行爲,我應該知道它可能發生或我做錯了什麼?
Nginx的上游enter link description here文檔代表:
如果與服務器的通信過程中發生錯誤,則該請求將被傳遞到下一個服務器,依此類推,直到所有的功能服務器將嘗試。如果無法從任何服務器獲得成功響應,則客戶端將收到與最後一個服務器通信的結果。
最差的部分是即時502 Bad Gateway
響應。
一些環境信息:
nginx version: nginx/1.10.0 (Ubuntu)
Nginx的從默認的軟件包倉庫instaled與所有分機的nginx-extras
包。