nginx負載均衡與調度演算法
本公眾號內容大多由平時操作整理記錄,如果有錯誤的地方歡迎留言指正
nginx負載均衡
nginx的負載均衡功能是通過upstream命令實現的,由ngx_http_upstream_module模塊支持,它的負載均衡實現機制比較簡單,容易理解。相比LVS,nginx負載均衡默認後端伺服器具有健康狀檢測功能,檢測方式是基於埠檢測,在後端伺服器比較少的情況下性能突出,如果後端負載節點比較多,所有的請求都從一台代理伺服器進出,容易造成請求阻塞,這種情況可以在nginx代理服務前端增加一層LVS進行分流,nginx代理做多節點來緩解。
nginx負載均衡演算法
1:輪詢(默認的模式),每個請求按時間順序逐一分配到不同的伺服器,如果後端某台伺服器死機,自動剔除故障系統使用戶使用不受影響。
2:權重(weight),指定輪詢的權值,weigth值越大,分配到訪問的概率就越高,只要用於後端伺服器性能不均衡的情況下。
3:ip_hash,每個請求按訪問ip的哈希結果分配,這樣來自同一ip的訪客固定訪問一台後端伺服器。能夠有效解決動態網頁存在的session共享問題。
4:least_conn 最少連接調度演算法,同時考慮伺服器的權重,當server擁有不同的權重時其為wlc,當所有後端主機連接數相同時,則使用wrr,適用於長連接
5:hash key [consistent] 基於指定的key的hash表來實現對請求的調度,此處的key可以直接文本、變數或二者組合
作用:將請求分類,同一類請求將發往同一個upstream server,key值可以用remote_addr,
當使用consistent參數時,將啟用ketama一致性hash演算法,適用於後端是Cache伺服器(如varnish)時使用hashremote_addr consistent;
在http upstream模塊中,可以通過server指令指定後端伺服器的ip地址和埠,同時還可以設定每台後端伺服器在負載均衡中的狀態。
upstream中可附加指令
1:down,表示當前的server不參與負載均衡。
2:backup,預留的備份機,當其他所有非backup的機器出現故障或者忙的時候,才會請求backup機器,因此這台機器的壓力最輕。
3:max_fails,允許請求失敗的次數,默認為1,當超過最大次數時,返回proxy_next_upstream模塊定義的錯誤。
4: fail_timeout,在經歷了max_fails次失敗後,暫停服務的時間,max_fails可以和fail_timeout一起使用。
5: keepalive 連接數N; 為每個worker進程保留的空閑的長連接數量,可節約nginx埠,並減少連接管理的消耗
配置負載均衡
輪詢負載
http段設置
server 段設置
測試
加權輪詢
http段
將192.168.214.133 權重設為3
測試
ip_hash
測試
least_conn最少連接
測試
hash key:一致性hash
GIF
![](https://pic.pimg.tw/zzuyanan/1488615166-1259157397.png)
![](https://pic.pimg.tw/zzuyanan/1482887990-2595557020.jpg)
※MySQL主從複製模式與複製過濾
※nginx記錄客戶端真實ip問題與日誌時間格式修改
TAG:Linux日記 |