1. 程式人生 > >Nginx的叢集和負載均衡

Nginx的叢集和負載均衡

Nginx的叢集和負載均衡

負載均衡配置案例1

設定上游伺服器:

# 設定上游伺服器:
upstream imgserver{
#weight權重	maxfails錯誤次數 fail_timeout超時時間.down 表示單前的server暫時不參與負載.其它所有的非backup機器down或者忙的時候,請求backup機器.  在upstream裡設定ip_hash,就可以針對同一個C類地址段中的客戶端選擇同一個後端伺服器可以解決session問題. Sticky基於cookie的負載均衡.
ip_hash; # 建議不要和Sticky同時使用;
Sticky; #建議不要和ip_hash同時使用;
server 192.168.1.100:80; weight:2 max_fails=2 fail_timeout=30s;
server 192.168.1.101:80; weight:2 max_fails=2 fail_timeout=30s;
server 127.0.0.1:7070 backup;
server 127.0.0.1:9090 down; 
}

下游呼叫

# 下游呼叫:
location ~ \.(jpg|jpeg|png|gif) {
#轉發到上游伺服器的地址池
proxy_pass imgserver;
# 將使用者的IP資訊同時帶過去,要不然,後端伺服器獲得的IP地址將是代理伺服器的IP;
proxy_set_header X-Forwarded-For $remote_addr;
}

負載均衡案例2,通過ip_hash

ubuntu 下負載均衡搭建
1準備條件 伺服器最少3臺

修改配置檔案:
cd /etc/nginx/conf.d/



1.新增一個配置檔案
	upstream a.com {
  		server  伺服器IP:埠;
 		server  127.0.0.1:80;
  		server  127.0.0.1:8080;
	}

2 配置虛擬主機

vim /etc/nginx/sites-available/default

server{
    listen 80;
    server_name a.com;
    location / {
	proxy_pass         http://自己配置;(轉發到哪裡)
    }

ln -s /etc/nginx/sites-available/{nidepaizhi}  /etc/nginx/sites-enabled/

//檢查配置檔案是否有錯
nginx -t 
//重啟伺服器
nginx -s reload

3其他引數配置
	擴充套件:

	1.輪詢(預設方式)

	每個請求按時間順序逐一分配到後端伺服器,如果後端伺服器down掉,能自動剔除

	2 weight

	指定輪詢機率,weight和訪問比率成正比,用於後端伺服器效能不均的情況。
	 upstream bakend {
    	 server 伺服器IP:埠 概率值;
    	 server 127.0.0.1:80 weight=10;
 	}
	3 ip_hash

每個請求按訪問ip的hash結果分配,

	這樣每個訪客固定訪問一個後端伺服器,可以解決session的問題

	upstream resinserver{

     		ip_hash;
  
   		server 192.168.159.10:8080;
   
  		server 192.168.159.11:8080;

	}

4 

 location / {
        proxy_pass         http://a.com;   #這個地址一定是上面定義的負載均衡的名字
        proxy_set_header   Host             $host;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
    }


均衡策略:

我之前所常用的策略:
基於cookie值區別使用者做負載均衡.(在cookie儲存sessionID,通過sessionID進行判斷)
通過redis直接使用redis儲存使用者的的登入資訊進行判斷.
nginx可以根據客戶端IP進行負載均衡,在upstream裡設定ip_hash,就可以針對同一個C類地址段中的客戶端選擇同一個後端伺服器,除非那個後端伺服器宕了才會換一個,可以解決session問題.。
Sticky基於cookie的負載均衡.

我現在的均衡策略:
就是不配Sticky或ip_hash直接用按權重輪訓就行了, session同步什麼的都不用擔心.現在都把session存在Redis中了.

百度轉載的五種均衡分配方式: nginx可以根據客戶端IP進行負載均衡,在upstream裡設定ip_hash,就可以針對同一個C類地址段中的客戶端選擇同一個後端伺服器,除非那個後端伺服器宕了才會換一個。 nginx的upstream目前支援的5種方式的分配

1、輪詢(預設)
每個請求按時間順序逐一分配到不同的後端伺服器,如果後端伺服器down掉,能自動剔除。 
upstream backserver { 
server 192.168.0.14; 
server 192.168.0.15; 
} 

2、指定權重
指定輪詢機率,weight和訪問比率成正比,用於後端伺服器效能不均的情況。 
upstream backserver { 
server 192.168.0.14 weight=10; 
server 192.168.0.15 weight=10; 
} 

3、IP繫結 ip_hash
每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個後端伺服器,可以解決session的問題。 
upstream backserver { 
ip_hash; 
server 192.168.0.14:88; 
server 192.168.0.15:80; 
} 

4、fair(第三方)
按後端伺服器的響應時間來分配請求,響應時間短的優先分配。 
upstream backserver { 
server server1; 
server server2; 
fair; 
} 

5、url_hash(第三方)
按訪問url的hash結果來分配請求,使每個url定向到同一個後端伺服器,後端伺服器為快取時比較有效。 
upstream backserver { 
server squid1:3128; 
server squid2:3128; 
hash $request_uri; 
hash_method crc32; 
} 

在需要使用負載均衡的server中增加 

proxy_pass http://backserver/; #轉發到哪裡去
upstream backserver{ 
ip_hash; 
server 127.0.0.1:9090 down; (down 表示單前的server暫時不參與負載) 
server 127.0.0.1:8080 weight=2; (weight 預設為1.weight越大,負載的權重就越大) 
server 127.0.0.1:6060; 
server 127.0.0.1:7070 backup; (其它所有的非backup機器down或者忙的時候,請求backup機器) 
} 

max_fails :允許請求失敗的次數預設為1.當超過最大次數時,返回proxy_next_upstream 模組定義的錯誤 

fail_timeout:max_fails次失敗後,暫