Nginx之負(fù)載均衡
Nginx 通過Upstream 模塊進(jìn)行負(fù)載均衡。
http {
upstream backend {
server backend1.example.com weight=5;
server backend2.example.com;
server 192.0.0.1 backup;
}
}
upstream 支持的負(fù)載均衡算法
Nginx的負(fù)載均衡模塊目前支持4種調(diào)度算法饺蚊,下面進(jìn)行分別介紹榨惰,其中后兩項(xiàng)屬于第三方調(diào)度算法。
- 輪詢(默認(rèn))。每個(gè)請(qǐng)求按時(shí)間順序逐一分配到不同的后端服務(wù)器未荒,如果后端某臺(tái)服務(wù)器宕機(jī)荧降,故障系統(tǒng)被自動(dòng)剔除接箫,使用戶訪問不受影響。Weight 指定輪詢權(quán)值朵诫,Weight值越大辛友,分配到的訪問機(jī)率越高,主要用于后端每個(gè)服務(wù)器性能不均的情況下剪返。
upstream backend {
server backend1.example.com;
server backend2.example.com;
}
- ip_hash废累。每個(gè)請(qǐng)求按訪問IP的hash結(jié)果分配,這樣來自同一個(gè)IP的訪客固定訪問一個(gè)后端服務(wù)器脱盲,有效解決了動(dòng)態(tài)網(wǎng)頁存在的session共享問題恰力。
upstream backend {
ip_hash;
server backend1.example.com;
server backend2.example.com;
}
fair诊霹。這是比上面兩個(gè)更加智能的負(fù)載均衡算法。此種算法可以依據(jù)頁面大小和加載時(shí)間長(zhǎng)短智能地進(jìn)行負(fù)載均衡,也就是根據(jù)后端服務(wù)器的響應(yīng)時(shí)間來分配請(qǐng)求锭碳,響應(yīng)時(shí)間短的優(yōu)先分配衅疙。Nginx本身是不支持fair的很魂,如果需要使用這種調(diào)度算法趴樱,必須下載Nginx的upstream_fair模塊。
url_hash尚卫。此方法按訪問url的hash結(jié)果來分配請(qǐng)求归榕,使每個(gè)url定向到同一個(gè)后端服務(wù)器,可以進(jìn)一步提高后端緩存服務(wù)器的效率吱涉。Nginx本身是不支持url_hash的刹泄,如果需要使用這種調(diào)度算法,必須安裝Nginx 的hash軟件包怎爵。
最小連接循签。選擇連接數(shù)最少的服務(wù)器,同時(shí)也會(huì)考慮服務(wù)器權(quán)重疙咸。
upstream backend {
least_conn;
server backend1.example.com;
server backend2.example.com;
}
3.upstream 支持的狀態(tài)參數(shù)
在HTTP Upstream模塊中县匠,可以通過server指令指定后端服務(wù)器的IP地址和端口,同時(shí)還可以設(shè)定每個(gè)后端服務(wù)器在負(fù)載均衡調(diào)度中的狀態(tài)。常用的狀態(tài)有:
- down乞旦,表示當(dāng)前的server暫時(shí)不參與負(fù)載均衡贼穆。
upstream backend {
server backend1.example.com;
server backend2.example.com;
server backend3.example.com down;
}
backup,預(yù)留的備份機(jī)器兰粉。當(dāng)其他所有的非backup機(jī)器出現(xiàn)故障或者忙的時(shí)候故痊,才會(huì)請(qǐng)求backup機(jī)器,因此這臺(tái)機(jī)器的壓力最輕玖姑。
max_fails愕秫,允許請(qǐng)求失敗的次數(shù),默認(rèn)為1焰络。當(dāng)超過最大次數(shù)時(shí)戴甩,返回proxy_next_upstream 模塊定義的錯(cuò)誤。
fail_timeout闪彼,在經(jīng)歷了max_fails次失敗后甜孤,暫停服務(wù)的時(shí)間。max_fails可以和fail_timeout一起使用畏腕。
注缴川,當(dāng)負(fù)載調(diào)度算法為ip_hash時(shí),后端服務(wù)器在負(fù)載均衡調(diào)度中的狀態(tài)不能是weight和backup描馅。
http {
upstream backend {
server backend1.example.com;
server backend2.example.com;
server 192.0.0.1 backup;
}
server {
location / {
proxy_pass http://backend;
}
}
}
服務(wù)器權(quán)重
upstream backend {
server backend1.example.com weight=5;
server backend2.example.com;
server 192.0.0.1 backup;
}