??在之前的文章中,我們通過服務(wù)代理的方式已經(jīng)看到了Nginx有作為負(fù)載均衡服務(wù)的功能了台舱,在這篇文章中律杠,我會講解Nginx的基本的負(fù)載均衡的使用、backup狀態(tài)演示竞惋、輪詢策略和加權(quán)輪詢柜去、負(fù)載均衡策略ip_hash的方式、負(fù)載均衡策略url_hash策略拆宛。
1.負(fù)載均衡的基本使用
1.1負(fù)載均衡流程圖
通過在Nginx服務(wù)器中配置proxy_pass和upstream server組可以實(shí)現(xiàn)最基本的負(fù)載均衡嗓奢。Nginx收到客戶端的請求后,將請求代理路由到upstream server中配置的各個服務(wù)中浑厚,默認(rèn)會使用輪詢的策略依次訪問各個服務(wù)股耽。
1.2upstream語法
upstream name {...},而且只能配置在http中
1.3實(shí)戰(zhàn)一:Nginx將請求負(fù)載均衡到后端3個服務(wù)中去
1.3.1配置3個后端服務(wù)server1,server2,server3
server1.conf的配置文件:
server {
listen 8001;
server_name localhost;
#charset koi8-r;
access_log /var/log/nginx/log/server1.access.log main;
location / {
root /opt/app/code1;
index index.html index.htm;
}
端口8001钳幅,訪問的是/opt/app/code1路徑下的index.html文件
server2.conf配置文件
####################
#Author:jeson@imoocc.com
####################
server {
listen 8002;
server_name localhost;
#charset koi8-r;
access_log /var/log/nginx/log/server2.access.log main;
location / {
root /opt/app/code2;
index index.html index.htm;
}
端口8002物蝙,訪問的是/opt/app/code2路徑下的index.html文件
server3.conf配置文件
server {
listen 8003;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/log/server2.access.log main;
location / {
root /opt/app/code3;
index index.html index.htm;
}
端口8003,訪問的是/opt/app/code2路徑下的index.html文件
1.3.2新建upstream_test.conf
####################
#Author:zzm
####################
upstream zzm {
server localhost:8001;
server localhost:8002;
server localhost:8003;
}
server {
listen 80;
server_name localhost ;
#charset koi8-r;
access_log /var/log/nginx/test_proxy.access.log main;
resolver 8.8.8.8;
location / {
proxy_pass http://zzm;
}
這里的配置中如果我們監(jiān)聽80端口贡这,如果用戶直接訪問IP:80/茬末,那么就會負(fù)載均衡到8001和8002和8003中的一個上面去。
1.3.3訪問3次
實(shí)戰(zhàn)一完成,說明我們最最基本的負(fù)載均衡目的已經(jīng)達(dá)成丽惭。
1.4實(shí)戰(zhàn)二:了解后端服務(wù)器在負(fù)載均衡調(diào)度中的狀態(tài)
1.4.1狀態(tài)的種類:
- down:當(dāng)前的server暫時不參與負(fù)載均衡
- backup:預(yù)留的備份服務(wù)器
- max_fails:允許請求失敗的次數(shù)
- fail_timeout:經(jīng)過max_fails失敗后击奶,服務(wù)暫停的時間
- max_conns:限制最大的接收的連接數(shù)
1.4.2設(shè)置server1為down狀態(tài),server2為預(yù)留服務(wù)器,server3最大失敗次數(shù)1
upstream zzm {
server localhost:8001 down;
server localhost:8002 backup;
server localhost:8003 max_fails=1 fail_timeout=10s;
}
1.4.3不斷訪問localhost:80
訪問結(jié)果只有server3,因?yàn)閟erver1已經(jīng)down了责掏,server2是備份
1.4.4我們禁止對8003的訪問柜砾,預(yù)期訪問server2
我們用iptables命令來限制對8003的訪問:iptables -I INPUT -p tcp --dport 8003 -j DROP
此刻再訪問localhost:80的結(jié)果是:
說明backup生效了。
1.5負(fù)載均衡策略
1.5.1加權(quán)輪詢策略配置
upstream zzm {
server localhost:8001;
server localhost:8002 weight=5;
server localhost:8003;
}
這里我們就只把配置貼出來换衬,具體的演示結(jié)果就不展示了
1.5.2ip_hash
upstream zzm {
ip_hash;
server localhost:8001;
server localhost:8002;
server localhost:8003;
}
這里就多配置了ip_hash這個關(guān)鍵字痰驱,是根據(jù)客戶端的ip來進(jìn)行負(fù)載均衡的,但是如果Nginx的前置是路由器的話瞳浦,它會根據(jù)路由器IP來做負(fù)載均衡担映,所以用的不多,我們這里也不做演示叫潦。
1.5.3hash關(guān)鍵數(shù)值
有時候我們希望用戶訪問某一些關(guān)鍵路徑的時候只能路由到其中的一臺服務(wù)器上蝇完,而不是隨機(jī)落到一臺服務(wù)器上,這個時候我們的配置就是這樣的:
upstream zzm {
hash $request_uri;
server localhost:8001;
server localhost:8002;
server localhost:8003;
}
無論如何刷新url1.html矗蕊,都只會到server3上面去訪問短蜕,而不會到其他兩臺server中去訪問,如下圖所示:
Nginx作為負(fù)載均衡服務(wù)就講到這里~~Nginx的場景實(shí)踐篇就講到這里傻咖,接下來我們將深度學(xué)習(xí)Nginx