一、概要
upstream模塊主要用來配置上游服務器,(之所以稱爲上游服務器,是因爲響應的數據是由upstream裏配置的後端服務器傳輸過來的,屬於響應數據的上游),nginx配置集羣就是由upstream完成的,upstream模塊在http模塊下進行配置。實例如下:
upstream tomcats {
server 192.168.40.22:8088;
server 192.168.40.23:8088;
server 192.168.40.24:8088;
}
server {
listen 80;
server_name www.tomcats.com;
location / {
proxy_pass http://tomcats; #這裏用到的tomcats就是upstream模塊定義的名稱
}
}
二、輪詢與加權輪詢
輪詢與加權輪詢的內容,在鏈接對應文章中又介紹 https://blog.csdn.net/b15735105314/article/details/106982811。
三、指令參數
(1)max_conns(最大連接數):限制每臺server的連接數,用於保護避免過載,可起到限流作用。如果當前所有服務器的連接數達到max_conns指定的最大連接數,那麼nginx便爲新的請求響應502 bad gateway(nginx其實就是一種網關)。
upstream tomcats {
server 192.168.1.173:8080 max_conns=2;
server 192.168.1.174:8080 max_conns=2;
server 192.168.1.175:8080 max_conns=2;
}
上面實例的max_conns的值指定爲2是爲了方便測試,實際的環境所能承受的連接數量要根據具體服務器的硬件指標去指定。
(2)slow_start(緩慢啓動):這個參數在商業版本才能使用。
upstream tomcats {
server 192.168.1.173:8080 weight=6 slow_start=60s;
server 192.168.1.174:8080 weight=2;
server 192.168.1.175:8080 weight=2;
}
該參數不能使用在hash
和random 這兩種負載均衡方式
中,即只能用在加權負載均衡方式中。
如果在 upstream 中只有一臺 server,則該參數失效。
(3)down:用於標記服務節點不可用:
upstream tomcats {
server 192.168.1.173:8080 down;
server 192.168.1.174:8080 weight=1;
server 192.168.1.175:8080 weight=1;
}
這個時候如果有請求到來時,nginx是不會把請求轉發到173這個節點上的。
(4)backup:表示當前服務器節點是備用機,只有在其他的服務器都宕機以後,自己纔會加入到集羣中,被用戶訪問到:
upstream tomcats {
server 192.168.1.173:8080 backup;
server 192.168.1.174:8080 weight=1;
server 192.168.1.175:8080 weight=1;
}
backup
參數不能使用在hash
和random 負載均衡方式
中。
(5)max_fails 和 fail_timeout
max_fails
:表示失敗幾次,則標記server已宕機,剔出上游服務。 fail_timeout
:表示失敗的重試時間。
假設目前設置如下:
max_fails=2 fail_timeout=15s
則代表在15秒內請求某一server失敗達到2次後,則認爲該server已經掛了或者宕機了,隨後再過15秒,這15秒內不會有新的請求到達剛剛掛掉的節點上,而是會請求到正常運作的server,15秒後會再有新請求嘗試連接掛掉的server,如果還是失敗,重複上一過程,直到恢復。
四、Keepalived 提高吞吐量
這裏設置的是nginx到後端服務器的長連接,並不是客戶端到nginx的長連接。
keepalived
: 設置長連接處理的數量proxy_http_version
:設置長連接http版本爲1.1proxy_set_header
:清除connection header 信息
upstream tomcats {
# server 192.168.1.173:8080 max_fails=2 fail_timeout=1s;
server 192.168.1.190:8080;
# server 192.168.1.174:8080 weight=1;
# server 192.168.1.175:8080 weight=1;
keepalive 32;
}
server {
listen 80;
server_name www.tomcats.com;
location / {
proxy_pass http://tomcats;
proxy_http_version 1.1;
# 設置Connection爲空串,以禁止傳遞頭部到後端
# http1.0中默認值Connection: close
proxy_set_header Connection "";
}
}
# 默認情況下 Nginx 訪問後端都是用的短連接(HTTP1.0),一個請求來了,Nginx 新開一個和後端的連接,
# 請求結束連接回收。HTTP1.1之後,HTTP協議支持持久連接,也就是長連接,優點在於在一個TCP連接上可以# 傳送多個HTTP請求和響應,減少了建立和關閉連接的消耗和延遲。
這裏對nginx的長連接只簡單介紹,後面會有專門的一片文章介紹nginx的長連接問題。