我們經常用nginx做反向代理和負載均衡,這里匯總一下nginx的幾種調度算法:
1、輪詢
按時間順序逐一分配到不同的后端服務器。
upstream lb_demo { server 172.16.255.194:9001; server 172.16.255.195:9001; }
2、加權輪詢
可在配置的server后面加個weight=number,number值越高,分配的概率越大。
upstream lb_demo { server 172.16.255.194:9001 weight=10; server 172.16.255.195:9001 weight=20; }
3、ip_hash
每個請求按訪問IP的hash分配,這樣來自同一IP固定訪問一個后台服務器。
upstream lb_demo { ip_hash; server 172.16.255.194:9001; server 172.16.255.195:9001; }
4、least_hash
最少鏈接數,哪個機器連接數少就發分發給哪個機器。
upstream lb_demo { least_conn; server 172.16.255.194:9001; server 172.16.255.195:9001; }
5、url_hash
按訪問的url的hash結果分配請求,是每個url定向到同一后端服務器上。
upstream lb_demo { url_hash; server 172.16.255.194:9001; server 172.16.255.195:9001; }
6、hash關鍵值
hash自定義的key。
注:調度算法在設置upstream中配置,例如在此大括號里面寫入ip_hash表示使用ip_hash的方式分配
輪詢只是簡單實現請求的順序轉發,並沒有考慮不同服務器的性能差異;
加權輪詢設置了初始時服務器的權重,但是沒有考慮運行過程中的服務器狀態;
IP Hash保證同一個客戶端請求轉發到同一個后台服務器實現了session保存,然而當某一后台服務器發生故障時,某些客戶端將訪問失敗;
最少連接數只是考慮了后端服務器的連接數情況,並沒有完全考慮服務器的整體性能。