1. 程式人生 > >配置Nginx實現負載均衡(轉載)

配置Nginx實現負載均衡(轉載)

conf 而且 name 實現負載均衡 檢測 avi nignx 客戶端 alt

一、負載均衡的作用

1、轉發功能

按照一定的算法【權重、輪詢】,將客戶端請求轉發到不同應用服務器上,減輕單個服務器壓力,提高系統並發量。

2、故障移除

通過心跳檢測的方式,判斷應用服務器當前是否可以正常工作,如果服務器期宕掉,自動將請求發送到其他應用服務器。

3、恢復添加

如檢測到發生故障的應用服務器恢復工作,自動將其添加到處理用戶請求隊伍中。

技術分享圖片

二、下載安裝

可在http://nginx.org/en/download.html網站下載Nginx。我選擇的是穩定版本。

技術分享圖片

下載完之後就是安裝,我把它放在D:\NGINX目錄下,可以直接點擊nginx-1.10.2下的nginx.exe文件,但是安裝的時候一閃而過,並不知道安裝成功與否,我就遇到了這樣的情況,它默認配置的是80端口,我瀏覽器輸入Localhost時沒任何輸出,這時可以打開logs文件,查看下日誌,在error文件中還真找到了輸出,原來是有錯誤。

技術分享圖片

2016/12/03 21:29:23 [emerg] 6940#1604: bind() to 0.0.0.0:80 failed (10013: An attempt was made to access a socket in a way forbidden by its access permissions)

百度查了下,這種情況可能有下面的幾種情況.
1.防火墻未關閉,防火墻我檢查是關閉了

2.有其他應用在占用80端口,我把瀏覽器關閉之後,再運行還是會報錯,用cmd命令行更加明顯直接顯示錯誤信息。這時我又把IIS停了,然後再運行就沒報錯了。在瀏覽器輸入http://localhost/就會有下面頁面輸出。

技術分享圖片

技術分享圖片

三、Nginx實現負載均衡
同樣使用兩個tomcat模擬兩臺應用服務器,端口號分別為8080 和8081

1、Nginx的負載分發策略

Nginx 的 upstream目前支持的分配算法:
1)、輪詢 ——1:1 輪流處理請求(默認)

每個請求按時間順序逐一分配到不同的應用服務器,如果應用服務器down掉,自動剔除,剩下的繼續輪詢。
2)、權重 ——you can you up
通過配置權重,指定輪詢幾率,權重和訪問比率成正比,用於應用服務器性能不均的情況。
3)、ip_哈希算法
每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個應用服務器,可以解決session共享的問題。

2、配置Nginx的負載均衡與分發策略

通過在upstream參數中添加的應用服務器IP後添加指定參數即可實現,如:

[html] view plain copy
  1. upstream tomcatserver1 {
  2. server 192.168.72.49:8080 weight=3;
  3. server 192.168.72.49:8081;
  4. }
  5. server {
  6. listen 80;
  7. server_name 8080.max.com;
  8. #charset koi8-r;
  9. #access_log logs/host.access.log main;
  10. location / {
  11. proxy_pass http://tomcatserver1;
  12. index index.html index.htm;
  13. }
  14. }

通過以上配置,便可以實現,在訪問8080.max.com這個網站時,由於配置了proxy_pass地址,所有請求都會先通過nginx反向代理服務器,在服務器將請求轉發給目的主機時,讀取upstream為 tomcatsever1的地址,讀取分發策略,配置tomcat1權重為3,所以nginx會將大部分請求發送給49服務器上的tomcat1,也就是8080端口;較少部分給tomcat2來實現有條件的負載均衡,當然這個條件就是服務器1、2的硬件指數處理請求能力。

3、nginx其他配置

[html] view plain copy
  1. upstream myServer {
  2. server 192.168.72.49:9090 down;
  3. server 192.168.72.49:8080 weight=2;
  4. server 192.168.72.49:6060;
  5. server 192.168.72.49:7070 backup;
  6. }

1)down

表示單前的server暫時不參與負載

2)Weight

默認為1.weight越大,負載的權重就越大。

3)max_fails

允許請求失敗的次數默認為1.當超過最大次數時,返回proxy_next_upstream 模塊定義的錯誤

4)fail_timeout

max_fails 次失敗後,暫停的時間。

5)Backup

其它所有的非backup機器down或者忙的時候,請求backup機器。所以這臺機器壓力會最輕。

三、使用Nginx的高可用

除了要實現網站的高可用,也就是提供n多臺服務器用於發布相同的服務,添加負載均衡服務器分發請求以保證在高並發下各臺服務器能相對飽和的處理請求。同樣,負載均衡服務器也需要高可用,以防如果負載均衡服務器掛掉了,後面的應用服務器也紊亂無法工作。

實現高可用的方案:添加冗余。添加n臺nginx服務器以避免發生上述單點故障。具體方案詳見下文:keepalive+nginx實現負載均衡高可用

四、總結

總結一點,負載均衡不論是各種軟件或硬件上的解決方案,主要還是將大量的並發請求按照一定的規律分發給不同的服務器處理,從而減少某臺服務器的瞬時壓力,提高網站的抗並發能力。nginx在負載均衡的應用之所以廣泛,筆者認為這歸功於它的靈活配置,一個nginx.conf文件解決大部分問題,不論是nignx創建虛擬服務器、nginx的反向代理服務器,還是本文介紹的nginx的負載均衡,幾乎都在這個配置文件中進行。服務器上只負責把nginx搭好,跑起來即可。而且它本身輕量級,不需要占用服務器太多資源就可以達到較好的效果,膩害。

配置Nginx實現負載均衡(轉載)