常見負(fù)載均衡方法:
手動(dòng)選擇
下載站點(diǎn),提供不同線路,不同服務(wù)器連接
例如:
下載某附件地址自主選擇:
xx網(wǎng)絡(luò) xx互聯(lián) xx下載 xx電信 xx聯(lián)通 xx網(wǎng)盤 ...
DNS輪詢
對主機(jī)添加多條A記錄
缺點(diǎn):
- 可靠性低,網(wǎng)絡(luò)運(yùn)營商DNS存在緩存,不能即時(shí)生效
- 負(fù)載分配不均衡,本地DNS有緩存
硬件負(fù)載均衡
硬件交換機(jī):F5,Cisco Css等,價(jià)格較高
軟件負(fù)載均衡
四層:LVS
七層:Nginx,HAProxy等
支持虛擬主機(jī),可配置性好,提供多種負(fù)載策略和健康檢查
查看QQ郵箱DNS示例:
[root@bogon ~]# dig mail.qq.com
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 <<>> mail.qq.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 49183
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;mail.qq.com. IN A
;; ANSWER SECTION:
mail.qq.com. 476 IN A 183.61.51.74
mail.qq.com. 476 IN A 14.17.42.24
mail.qq.com. 476 IN A 14.18.245.237
mail.qq.com. 476 IN A 183.61.38.175
;; Query time: 5 msec
;; SERVER: 219.141.136.10#53(219.141.136.10)
;; WHEN: Fri Jun 30 23:41:43 2017
;; MSG SIZE rcvd: 93
負(fù)載均衡算法
輪詢(默認(rèn))
每個(gè)請求按時(shí)間順序逐一分配到不同的后端服務(wù)器,如果后端服務(wù)器down掉,能自動(dòng)剔除。
weight 指定輪詢的權(quán)值 weight值越大,分配的訪問的機(jī)率越高
主要用于后端的每個(gè)服務(wù)器性能不均的情況下
-
可靠性低和負(fù)載分配不均衡。
server 192.168.1.22 weight = 7; server 192.168.1.23 weight = 3;
ip_hash
每個(gè)請求按訪問Ip的hash結(jié)果分配
-
解決了動(dòng)態(tài)網(wǎng)頁存在的session共享問題
upstream bbs { ip_hash; server 127.0.0.1:9001; server 127.0.0.1:9002; }
fair(第三方)
根據(jù)后端服務(wù)器的響應(yīng)時(shí)間來分配請求,響應(yīng)時(shí)間短的優(yōu)先分配。
-
Nginx本身不支持fair的,須下載Nginx的upstream_fair模塊
upstream tomcats { server 127.0.0.1:9001; server 127.0.0.1:9002; fair; }
url_hash:
按訪問url的hash結(jié)果來分配請求,使每個(gè)url定向到同一個(gè)后端服務(wù)器,后端服務(wù)器為緩存時(shí)比較有效。
配置和IP哈希類似,只不過針對請求的url進(jìn)行hash(基于緩存的server,頁面靜態(tài)化)。
負(fù)載均衡調(diào)度中常用的狀態(tài):
down:
表示當(dāng)前的server暫時(shí)不參與負(fù)載均衡
backup:
備份機(jī)器,其他所有非backup機(jī)器出現(xiàn)故障或忙碌時(shí),才請求backup主機(jī)
max_fails:
允許請求失敗的次數(shù),默認(rèn)為1,當(dāng)超過最大的次數(shù)時(shí),返回proxy_next_upstream模塊定義的錯(cuò)誤
fail_timeout:
在經(jīng)歷max_fails次失敗后,暫停服務(wù)的時(shí)間
當(dāng)負(fù)載調(diào)度算法為ip_hash時(shí),后端服務(wù)器在負(fù)載均衡調(diào)度中的狀態(tài)不能是weight和backup。
示例
upstream bbs{
#ip_hash
server bbs1.test.com weight=6;
server bbs2.test.com weight=4;
server bbs3.test.com backup;
}
server {
listen 80;
server_name bbs.test.com;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_buffering off;
proxy_pass http://bbs/;
}
}