nginx負載均衡

一 nginx負載均衡:支持三種   

   (1)默認輪詢round-robin  以輪詢方式將請求分配到不同服務器上。


   (2)ip_hash(源地址hash)基於客戶端的IP地址。散列函數被用於確定下一個請求分配到哪臺服務器上。實現同一源地址重定向到該地址,注意:會破壞負載效果


   (3)least_conn(最少連接數) 將下一個請求分配到連接數最少的那臺服務器上。  

    upstream www.cqelpay.com(名稱) { 

        round-robin   #默認輪詢

#ip_hash;     #實現同一源地址重定向到該地址,注意:會破壞負載均衡效果

#least_conn;  #最少連接數

        server 192.168.11.38:8081  weight=1(權重)  max_fails=2(最大檢查次數)  fail_timeout=30s(檢查持續時間); 

        server 192.168.11.34:8080  weight=2  max_fails=2    fail_timeout=30s; 

        server 127.0.0.1:8080 backup;  #當前面兩個負載主機都宕機後,會啓動這個錯誤頁面.

    }

     

   server {                #每一個server對應一個虛擬主機

        listen       8080;    #監聽端口

        server_name  localhost;   #域名

root /web/errorpages;

index   index.html;

      }

   [root@nginx-master /]# mkdir -pv /web/errorpages 

   [root@nginx-master /]#vim /web/errorpages/index.html  

   

   (4)nginx負載均衡最簡單的配置如下:

  http { 


    upstream myapp1 { 


        server srv1.example.com;   可以是域名,ip地址,端口號和unix套接字


        server srv2.example.com; 


        server srv3.example.com; 


    } 

    server { 


        listen 80; 

        location / { 

            proxy_pass http://myapp1; 

        } 


    } 


}     

在上面的例子中,srv1,srv2,srv3。運行着相同的應用程序。如果沒有特別指定負載均衡方法默認是以輪詢方式。所有的請求被代理到服務組

myapp1,然後nginx負載均衡的分發請求。


nginx反向代理實現包括下面這些負載均衡HTTP、HTTPS、、FastCGI、uwsgi,SCGI和memcached。


要配置HTTPS的負載均衡,只需使用“https”開頭的協議。


當要設置FastCGI,uwsgi,SCGI,或者memcached的負載平衡,分別使用fastcgi_pass,uwsgi_pass,scgi_pass和memcached_pass指令。


   (5)最少連接負載均衡

   在一些要求需要更長的時間才能完成的應用情況下,最少連接可以更公平地控制應用程序實例的負載。使用最少連接負載均衡,

   nginx不會向負載繁忙的服務器上分發請求,而是將請求分發到負載低的服務器上。

配置如下:

    upstream myapp1 { 


        least_conn; 


        server srv1.example.com; 


        server srv2.example.com; 


        server srv3.example.com; 


    }

  

   (6)會話持久性

    以輪詢或最少連接的負載均衡算法,每個後續的客戶端的請求,可以潛在地分配

    給不同的服務器上,並不能保證相同的客戶端請求將總是指向同一服務器上。

    

這對於有會話信息的應用場景下,會有問題的。一般的做法是需要將session信息共享,如使用

   memcache來存放session。

    

如果將客戶端的會話“粘性”或總是試圖選擇一個特定的服務器,也是可以的。負載均衡的ip-hash機制就可以實現。

配置如下:

upstream myapp1 { 


    ip_hash; 

    server srv1.example.com; 

    server srv2.example.com;

    server srv3.example.com; 

   (7)加權負載均衡   

     可以使用權重來進一步控制影響nginx負載均衡算法。

   在上面的例子中,都沒有配置權重,這意味着所有指定的服務器都被視爲同樣的。

   當指定的服務器的權重參數,權重佔比爲負載均衡決定的一部分。權重大負載就大。

   配置如下:

   upstream myapp1 { 


        server srv1.example.com weight=3; 


        server srv2.example.com; 


        server srv3.example.com; 


    }

這種情況下,每5個新的請求將被分佈如下:3 請求將被引導到SRV1,一個請求將去SRV2,另一個請求去srv3。

   

    (8)後端健康檢測

     nginx反向代理包含內置的或第三方擴展來實現服務器健康檢測的。如果後端某臺服務器響應失敗,

     nginx會標記該臺服務器失效,在特定時間內,請求不分發到該臺上。

     max_fails指令設置在fail_timeout期間內連續的失敗嘗試。默認情況下,max_fails爲1。如果被設置爲0,該服務器的健康檢測將禁用。

     fail_timeout參數還定義了多長時間服務器將被標記爲失敗。在fail_timeout後,服務器還是failed,

     nginx將檢測該服務器是否存活,如果探測成功,將標記爲活的。

     

     (9)官方文檔  

      upstream模塊內容:http://nginx.org/en/docs/http/ngx_http_upstream_module.html#server

      應用負載均衡:http://nginx.com/products/application-load-balancing/  

   

    (10)統計有多少人訪問80: netstat -ant | awk '/:80\>/{S[NF]++}end{for(A in S) {print A,S[A]}}'


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章