注意:nginx自帶的http服務後端檢測有缺陷,沒法根據狀態碼來檢測,建議使用tengine的nginx_upstream_check_module來實現後端服務的http健康狀態檢測html
做用:提高吞吐率,提高請求性能,提升容災 負載均衡按層級劃分 四層負載均衡:ip+tcp端口, 七層負載均衡:處理http層,例如根據主機地址調度 nginx實現負載均衡用到了proxy_pass代理模塊核心配置,將客戶端請求代理轉發至一組upstream虛擬服務池 ngx_http_proxy_module //proxy代理模塊 ngx_http_upstream_module //負載均衡模塊,能夠實現網站的負載均衡功能及節點的健康檢查。nginx自帶的健康狀態很差用
0.語法和例子node
upstrem name { .... } 必需要配置http標籤以內和server標籤以外
1.web服務器配置nginx
#vim /usr/local/nginx/conf/nginx.conf server { listen 8001; root /webroot/node1; index index.html; } server { listen 8002; root /webroot/node2; index index.html; } server { listen 8003; root /webroot/node3; index index.html; } #nginx -t #mkdir -pv /webroot/{node1,node2,node3} #echo "node1" >>/webroot/node1/index.html #echo "node2" >>/webroot/node2/index.html #echo "node3" >>/webroot/node3/index.html #nginx -s reload
2.代理服務器配置web
#vim /usr/local/nginx/conf http { include /usr/local/nginx/conf.d } #vim /usr/local/nginx/conf.d/www.test.com.conf upstream node { server 192.9.191.31:8001; server 192.9.191.31:8002; server 192.9.191.31:8003; } server { listen 80; server_name www.test.com; location / { proxy_pass http://node; } } #nginx -t #nginx -s reload
3.修改hosts文件以及測試redis
#vim /etc/hosts 192.9.191.30 www.test.com # curl http://192.9.191.30 node2 # curl http://192.9.191.30 node3 # curl http://192.9.191.30 node1
1.參數詳解算法
server 1.1.1.1:80 \\負載均衡後面的RS配置,能夠是IP或域名,端口不寫,默認是80端口,高併發場景ip要換成域名,經過dns作負載均衡 weight \\權重,默認爲1,權重大接受的請求越多 max_fails=2 \\最大嘗試次數監測後端服務是否正常,默認根據端口檢查,默認爲1,0表示禁止失敗嘗試, backup \\預留的備份服務器,當前面激活的real server都失敗後會自動啓用該服務器 fail_timeout=20s \\失敗超時時間,默認是10s。根據業務需求去配置,常規業務2-3秒合理,失敗以後,20秒以後在檢測服務是否正常 down \\這標誌着服務器永遠不可用 max_conns=10 \\最大併發鏈接數,超過10個鏈接沒法訪問;保護節點 slow_start=10s \\後端服務器由down轉爲up,加入到集羣的時間 server x.x.x.x:80 max_fails=2 fail_timeout=20s; \\ 每隔20秒鐘檢測後端服務是否正常2次,若是後端服務down機,自動切換到其它正常機器,若是後端機器由down改爲up狀態,又自動加入到web集羣中
2.配置案例vim
#vim /usr/local/nginx/conf.d/www.test.com.conf upstream node { server 192.9.191.31:8001 down; server 192.9.191.31:8002 backup; server 192.9.191.31:8003 max_fail=1 fail_timeout=10s; } server { listen 80; server_name www.test.com; location / { proxy_pass http://node; } }
1.調度算法詳解後端
rr輪詢 \\按時間順序逐一分配到不一樣的後端服務器,默認調度算法 weight \\加權輪詢,weight值越大,分配到訪問概率越大 ip_hash \\同一個ip請求web服務器,第一次扔給一臺服務器,下次同一個ip都會扔給同一臺服務器,能夠解決動態網頁session共享問題,可是會破壞負載均衡,請求分配不均,最大的問題是NAT;建議不要使用ip_hash方式,使用redis方式進行會話共享; fair \\第三方動態算法,按照後端服務器RS的響應時間來分配請求,響應時間短的優先分配 url_hash \\按訪問url的hash結果來分配請求,讓每一個url定向到同一個後端服務器,url_hash和ip_hash相似,url_hash用於web緩存,ip_hash用於會話保持,例如www.baidu.com/1.html和www.baidu.com/index.html這兩個url會分配不一樣的後端服務器,必定要記錄url包含請求的資源例如index.html等 一直性hash \\淘寶tengine, least_conn \\最少鏈接數
2.weight加權配置案例緩存
upstream node { server 192.9.191.31:8001; server 192.9.191.31:8002 weight=5; }
3.ip_hash配置案例服務器
upstream node { ip_hash; server 192.9.191.31:8001; server 192.9.191.31:8002; }
4.url_hash配置案例,注意低版本的nginx不支持
upstream node { hash $request_uri; server 192.9.191.31:8001; server 192.9.191.31:8002; }