2016-11-17 60 views
0

你好,我有負載均衡器下面很簡單的配置/故障切換: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包。

回答

1

我和你有同樣的問題,我在this website here找到答案。

上游名稱可以在$ upstream_addr變量可以看出,如果nginx的 無法選擇上游服務器連接到因爲所有 服務器分別下降爲每max_fails/fail_timeout。在同一時間 錯誤日誌中記錄「無活上游」錯誤。

我希望這可以幫助你。