WEB服務做負載均衡的方法有很多種,但使用Nginx做負載均衡部署毫無疑問是非常高效也是非常流行的一種。
本人大多數做.NET開發,但部署負載卻一直用Nginx,對其他的負載方式研究不多,只測試過一次使用Server Farm做負載部署,沒有在實際專案中實戰,最近見同事使用Server Farm做負載配置,但對其效能等不甚瞭解,望知之者留言討論。
廢話少說,請看步驟:
1、Nginx服務安裝部署
請看上文《Nginx服務介紹》
2、配置檔案編寫
在Nginx安裝目錄下下開啟Vhost目錄(該目錄已經在Nginx.conf中被包含,如果只是針對某站點的某個目錄負載,可以將包含路徑修改一下即可),新建負載配置檔案testfz.conf,內容如下:
upstream backend { server 192.168.1.106:8001 weight=1; server 192.168.1.107:8001 weight=2; #ip_hash; } server { listen 80; server_name www.test.com; location ~ ^/* { proxy_set_header Host $host; 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://wwwbackend; } }
3、測試
./nginx –t 返回如下資訊表示引數配置無誤 nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
4、重新載入配置檔案
/etc/init.d/nginx reload
如果重啟報PID錯誤,在安裝路徑下-C重新載入一下配置檔案即可。
5、關於Nginx配置的引數說明
a、輪詢 每個請求根據Nginx配置檔案中的順序,依次分發到不同的後端伺服器,伺服器如果down掉會自動識別並剔除;
b、weight Nginx根據weight配置把請求更多地分發到高配置的後端伺服器上,把相對較少的請求分發到低配伺服器。
c、ip_hash 每個請求按訪問ip的hash結果分配,保證連線到固定的負載伺服器上,這種方式可以解決session問題;
d、最少連線 可以將Web請求會被轉發到連線數最少的伺服器上。只要加least_conn節就可以。
另外這每個負載伺服器上還可以做如下的配置:
a、down : 當前的伺服器暫時不參與負載;
b、max_fails: 允許請求失敗的次數預設為1,當超過最大次數時,返回proxy_next_upstream模組定義的錯誤;
c、fail_timeout : max_fails次失敗後,暫停的時間;
d、backup: 其它所有非backup機器down或者忙時候,才開始請求backup機器,可以用做故障轉移。