負載均衡的幾種常用方式
1、輪詢(默認)?
每個請求按時間順序逐一分配到不同的后端服務器,如果后端服務器down掉炉媒,能自動剔除烙懦。
upstream backserver {server192.168.0.14;server192.168.0.15;}
2驱入、weight?
指定輪詢幾率,weight和訪問比率成正比氯析,用于后端服務器性能不均的?
情況亏较。
upstream backserver {server192.168.0.14weight=3;server192.168.0.15weight=7;}
權重越高,在被訪問的概率越大掩缓,如上例雪情,分別是30%,70%你辣。
3巡通、上述方式存在一個問題就是說,在負載均衡系統(tǒng)中舍哄,假如用戶在某臺服務器上登錄了宴凉,那么該用戶第二次請求的時候,因為我們是負載均衡系統(tǒng)表悬,每次請求都會重新定位到服務器集群中的某一個跪解,那么已經(jīng)登錄某一個服務器的用戶再重新定位到另一個服務器,其登錄信息將會丟失,這樣顯然是不妥的叉讥。
我們可以采用ip_hash指令解決這個問題窘行,如果客戶已經(jīng)訪問了某個服務器,當用戶再次訪問時图仓,會將該請求通過哈希算法罐盔,自動定位到該服務器。
每個請求按訪問ip的hash結果分配救崔,這樣每個訪客固定訪問一個后端服務器惶看,可以解決session的問題。
upstream backserver {? ? ip_hash;server192.168.0.14:88;server192.168.0.15:80;}
4六孵、fair(第三方)?
按后端服務器的響應時間來分配請求纬黎,響應時間短的優(yōu)先分配。
upstream backserver {serverserver1;serverserver2;? ? fair;}
5劫窒、url_hash(第三方)?
按訪問url的hash結果來分配請求本今,使每個url定向到同一個后端服務器,后端服務器為緩存時比較有效主巍。
upstream backserver {? ? server squid1:3128;? ? server squid2:3128;hash$request_uri;hash_method crc32;}
每個設備的狀態(tài)設置為:
1.down 表示單前的server暫時不參與負載?
2.weight 默認為1.weight越大冠息,負載的權重就越大。?
3.max_fails:允許請求失敗的次數(shù)默認為1.當超過最大次數(shù)時孕索,返回proxy_next_upstream模塊定義的錯誤?
4.fail_timeout:max_fails次失敗后逛艰,暫停的時間。?
5.backup: 其它所有的非backup機器down或者忙的時候搞旭,請求backup機器散怖。所以這臺機器壓力會最輕。
配置實例:
#user? nobody;worker_processes4;events {# 最大并發(fā)數(shù)worker_connections1024;}http{# 待選服務器列表upstream myproject{# ip_hash指令肄渗,將同一用戶引入同一服務器杭抠。ip_hash;server125.219.42.4fail_timeout=60s;server172.31.2.183;? ? ? ? }server{# 監(jiān)聽端口listen80;# 根目錄下location / {# 選擇哪個服務器列表proxy_pass http://myproject;}? ? ? ? ? ? }}