分配方式
Nginx的upstream支持5種 分配方式庙曙,其中 輪詢(xún)、權(quán)重钾挟、IP散列這三種為Nginx原生支持的分配方式坷随,fair 和 url_hash 為第三方支持的分配方式。
1暮屡,輪詢(xún)
輪詢(xún)是upstream的默認(rèn)分配方式撤摸,即每個(gè)請(qǐng)求按照時(shí)間順序輪流分配到不同的后端服務(wù)器,如果某個(gè)后端服務(wù)器 down 掉后栽惶,能自動(dòng)剔除愁溜。
upstream zhang21(名稱(chēng)){
? ? server 192.168.1.11:8888;
? ? ?server 192.168.1.22:8888外厂;
? ? server 192.168.1.33:8888冕象;
}
2,weight(權(quán)重)
輪詢(xún)的加強(qiáng)版汁蝶,既可以指定輪詢(xún)比率渐扮,weight 和訪問(wèn)幾率成正比,主要應(yīng)用于后端服務(wù)器異質(zhì)的場(chǎng)景下掖棉。
upstream zhang21 {
? ? server 192.168.1.11 weight=1墓律;
? ? server 192.168.1.22 weight=2;
? ? server 192.168.1.33 weight=3幔亥;
}
3耻讽,ip_hash
每個(gè)請(qǐng)求按照訪問(wèn) Ip(即Nginx的前置服務(wù)器或客戶端IP)的 hash結(jié)果分配,這樣每個(gè)訪客會(huì)固定訪問(wèn)一個(gè)后端服務(wù)器帕棉,可以解決 session 一致問(wèn)題针肥。
upstream zhang21 {
? ? ip_hash;
? ? server 192.168.1.11:7777;
? ? server 192.168.1.22:8888;
? ? server 192.168.1.33:9999;
}
4,fair
fair顧名思義香伴,公平地按照后端服務(wù)器的響應(yīng)時(shí)間(rt)來(lái)分配請(qǐng)求慰枕,響應(yīng)時(shí)間(rt)小的后端服務(wù)器優(yōu)先分配請(qǐng)求。
upstream zhang21 {
? ? server 192.168.1.11;
? ? server 192.168.1.22;
? ? server 192.168.1.33;
}
5即纲,url_hash
與 ip_hash類(lèi)似具帮,但是按照訪問(wèn) url 的 hash 結(jié)果來(lái)分配請(qǐng)求,使得每個(gè) url 定向到同一個(gè)后端服務(wù)器,主要應(yīng)用于后端服務(wù)器為緩存的場(chǎng)景下蜂厅。
upstream zhang21 {
? ? server 192.168.1.11;
? ? server 192.168.1.22;
? ? server 192.168.1.33;
? ?hash $request_uri匪凡;
? ? hash_method crc32;
}
其中葛峻,hash_method為使用的hash算法锹雏,需要注意,此時(shí)server語(yǔ)句中不能添加 weight等參數(shù)术奖。
設(shè)備狀態(tài)
從上面可以看出upstream中server指令語(yǔ)法如下:
server ?address ?[ parameters ]
address可以是主機(jī)名礁遵、域名、ip或Unix Socket采记,也可以指定端口號(hào)佣耐;
parameters表示可選參數(shù),有如下這些:
down唧龄,表示當(dāng)前server已停用兼砖;
backup,表示當(dāng)前server是備用服務(wù)器既棺,只有其它非backup后端服務(wù)器都掛掉了或很忙才會(huì)分配請(qǐng)求給它讽挟;
weight,表示當(dāng)前server負(fù)載權(quán)重丸冕,權(quán)重越大幾率愈高耽梅;
max_fails 和 fail_timeout 一般會(huì)關(guān)聯(lián)使用,如果某臺(tái)server在 fail_timeout 時(shí)間內(nèi)出現(xiàn)了 max_fails 次連接失敗胖烛,那么Nginx會(huì)認(rèn)為其已經(jīng)掛掉眼姐,從而在 fail_timeout 時(shí)間內(nèi)不再去請(qǐng)求它,fail_timeout默認(rèn)是 10s佩番,max_fails默認(rèn)是1众旗,即默認(rèn)情況只要是發(fā)生錯(cuò)誤就認(rèn)為服務(wù)器掛了,如果將max_fails設(shè)置為0趟畏,則表示取消這項(xiàng)檢查贡歧。
舉個(gè)栗子
四臺(tái)主機(jī),一臺(tái)處理轉(zhuǎn)發(fā)赋秀,另外三臺(tái)為后端處理服務(wù)器利朵。
192.168.1.11 ? ?#前
192.168.1.22
192.168.1.33
192.168.1.44
在 1.11上的簡(jiǎn)單配置
在nginx.conf的http{ }下;
upstream zhang21 {
server 192.168.1.22沃琅;
server 192.168.1.33哗咆;
server 192.168.1.44蜘欲;
}
在虛擬主機(jī)server { } 中配置益眉;
location / {
? ? root html;
? ? index index.html index.htm;
? ? proxy_pass http://zhang21(upstream名稱(chēng))郭脂;
}
在三臺(tái)后臺(tái)主機(jī)上的簡(jiǎn)單配置
配置虛擬主機(jī)server { }年碘;
server {
? ? listen 80;
? ? root /var/www;
? ? location / {
? ? ? ? fastcgi_pass? 127.0.0.1:9000;
? ? ? ? fastcgi_index? index.php;
? ? ? ? fastcgi_param? SCRIPT_FILENAME? $document_root/$fastcgi_script_name;
? ? ? ? include? ? ? ? fastcgi_params;
? ? }
}