upstream 配置
upstream backend{
server 192.168.1.11:8080 weight=1;
server 192.168.1.12:8080 weight=2;
}
- 權(quán)重:使用weight來配置,默認(rèn)為1,權(quán)重越高分配的請求就越多
然后使用proxy_pass來處理用戶請求
location / {
proxy_pass http://backend;
}
負載均衡算法
負載均衡用來解決用戶請求到來時如何選擇upstream server,默認(rèn)采用輪詢round-robin
- round-robin:輪詢,以輪詢方式將請求轉(zhuǎn)發(fā)到上游服務(wù)器,通過配合weight配置實現(xiàn)基于權(quán)重的輪詢
- ip_hash:根據(jù)客戶IP進行負載均衡,將相同IP負載均衡到同一個upstream server
upstream backend{
ip_hash;
server 192.168.1.11:8080 weight=1;
server 192.168.1.12:8080 weight=2;
}
- hash key [consistent]: 對某個key進行哈喜蚁眨或者使用一致哈希算法進行負載均衡
哈希算法
upstream backend{
hash $uri
server 192.168.1.11:8080 weight=1;
server 192.168.1.12:8080 weight=2;
}
哈希一致性算法
upstream backend{
hash $consistent_key consistent;
server 192.168.1.11:8080 weight=1;
server 192.168.1.12:8080 weight=2;
}
- least_conn:將請求負載均衡到最少活躍連接的上游服務(wù)器.
- least_time:最小平均響應(yīng)時間進行負載均衡(商業(yè)版提供)
失敗重試
通過配置max_fails和max_timeout來指定每個上游服務(wù)器失敗次數(shù)
upstream backend {
server 192.168.1.11:8080 max_fails=2 fail_timeout=10s weight=1;
server 192.168.1.12:8080 max_fails=2 fail_timeout=10s weight=1;
}
location /{
proxy_connect_timeout 5s;
proxy_read_timeout 5s;
proxy_timeout 5s;
proxy_next_upstream error timeout;
proxy_next_upstream_timeout 10s;
proxy_next_upstream_tries 2;
proxy_pass http://backend;
add_header upstream_add $upstream_add;
}
TCP心跳檢查
- interval:監(jiān)測時間間隔
- fall:監(jiān)測失敗多少次后上游服務(wù)器被標(biāo)識為不存活
- rise:檢測成功多少次后上游服務(wù)器被標(biāo)識為存活,并可以處理請求
- timeout:監(jiān)測請求超時時間配置
upstream backend{
server 192.168.1.11:8080 weight=1;
server 192.168.1.12:8080 weight=2;
check interval=3000 rise=1 fall=3 timeout=2000 type=tcp;
}
HTTP心跳檢查
- check_http_send:檢查時發(fā)送HTTP請求內(nèi)容
- check_http_expect_alive:服務(wù)器返回匹配響應(yīng)狀態(tài)碼
upstream backend{
server 192.168.1.11:8080 weight=1;
server 192.168.1.12:8080 weight=2;
check interval=3000 rise=1 fall=3 timeout=2000 type=http;
check_http_send "HEAD /status HTTP/1.0\r\n\r\n";
check_http_expect_alive http_2xx http_3xx;
}
注意:檢查時間間隔不能太短,否則可能因為心跳檢查包太多導(dǎo)致服務(wù)器掛掉
本文使用的是openresty/1.11.2.1(對應(yīng)nginx-1.11.2),安裝之前需要打nginx_upstream_check_module補丁(check_1.9.2+.patch)到Nginx目錄下執(zhí)行shell:
patch -p0</usr/servers/nginx_upstream_check_module-master/check_1.9.2+.patch
如果不安裝補丁,那么ngixn_upstream_check_module模塊是不工作的,建議使用wireshark抓包查看是否工作.