nginx的負載均衡

nginx支持下面幾種負載均衡機制:
round-robin:輪詢。以輪詢方式將請求分配到不同服務器上
least-connected:最少連接數。將下一個請求分配到連接數最少的那臺服務器上
ip-hash :基於客戶端的IP地址。散列函數被用於確定下一個請求分配到哪臺服務器上

  1. 負載均衡默認配置
    nginx負載均衡最簡單的配置如下:
    http {
    upstream myapp1 {
    server srv1.example.com;
    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指令。

  2. 最少連接負載均衡
    在一些要求需要更長的時間才能完成的應用情況下, 最少連接可以更公平地控制應用程序實例的負載。使用最少連接負載均衡,nginx不會向負載繁忙的服務器上分發請求,而是將請求分發到負載低的服務器上。
    配置如下:
    upstream myapp1 {
    least_conn;
    server srv1.example.com;
    server srv2.example.com;
    server srv3.example.com;
    }
  3. 會話持久性

以輪詢或最少連接的負載均衡算法,每個後續的客戶端的請求,可以潛在地分配給不同的服務器上,並不能保證相同的客戶端請求將總是指向同一服務器上。
這對於有會話信息的應用場景下,會有問題的。一般的做法是需要將session信息共享,如使用memcache來存放session。
如果將客戶端的會話“粘性”或總是試圖選擇一個特定的服務器,也是可以的。負載均衡的ip-hash機制就可以實現。
配置如下:
upstream myapp1 {
ip_hash;
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}

  1. 加權負載均衡
    可以使用權重來進一步控制影響nginx負載均衡算法。
    在上面的例子中,都沒有配置權重,這意味着所有指定的服務器都被視爲同樣的。
    當指定的服務器的權重參數,權重佔比爲負載均衡決定的一部分。權重大負載就大。
    配置如下:

upstream myapp1 {
server srv1.example.com weight=3;
server srv2.example.com;
server srv3.example.com;
}
這種情況下,每5個新的請求將被分佈如下:3請求將被引導到SRV1,一個請求將去SRV2,另一個請求去srv3。

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