nginx負載均衡配置

jopen 10年前發布 | 19K 次閱讀 Nginx Web服務器

原文http://nginx.org/en/docs/http/load_balancing.html

本文依照自己的理解翻譯

  在多個應用程序間提供負載均衡是一種常用的提高資源利用率的技術,提高服務器的吞吐量,減少延遲,確保應用程序容錯。Nginx可以做為一個高效的http負載均衡器來將負載分發到多個應用程序上以提高性能,它也是一種可靠地,可伸縮的web應用程序服務器。

  負載均衡的類別
    輪詢             -應用程序輪流來響應請求
    最少連接     -請求被分配到活動連接最少的服務器上
    ip-hash       -通過一個hash函數決定哪個服務器來響應用戶的請求(依據客戶端的請求ip)

  下面是最簡單的負載均衡的配置

</div> </div>

    http {
upstream myapp1 {
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}

    server {  
        listen 80;  

        location / {  
            proxy_pass http://myapp1;  
        }  
    }  
}  </pre><br />

上面這個配置中3個相同的應用程序的服務器srv1-srv3,默認的負載均衡方式是輪詢,所用的請求通過反向代理給了myapp1組,nginx通過負載均衡來分發這些請求到三個服務
上。

  在nginx中HTTP, HTTPS, FastCGI, uwsgi, SCGI, and memcached. 的負載均衡都是通過反向代理實現的。
  要配置https的負載均衡只需要將http協議改https就可以了,其他配置不變。
  要實現FastCGI, uwsgi, SCGI, or memcached的負載均衡可以分別使用 fastcgi_pass, uwsgi_pass, scgi_pass, and memcached_pass指令。

另一種負載均衡方式是least-connected,在“請求需要更長的時間來完成”的場景下采用least-connected方式可以更公平的將負載分配到多個機器上面。使用least-connected,nginx不會將請求分發到繁忙的機器上面,而且將新的請求分發的較清閑的機器上面。
  可以在 upstream {}模塊中配置least_conn;指令來激活least-connected負載模式。

</div> </div>

    upstream myapp1 {  
            least_conn;  
            server srv1.example.com;  
            server srv2.example.com;  
            server srv3.example.com;  
        }  

  輪詢和least-connected這兩種負載均衡方式會將新的請求分發到不同的機器上,很難保證每個客戶端會固定訪問某一個服務器。

   如果需要某個客戶端只訪問訪問固定的一個服務器可以通過ip-hash負載均衡方式實現。
   使用ip-hash時,客戶端的ip作為一個散列的Key來決定服務器組中哪個服務器來響應請求,這種方式可以保證每個客戶端每次訪問的都是同一個服務器。
     客戶通過ip_hash指令來配置ip_hash負載均衡方式

    upstream myapp1 {  
            ip_hash;  
            server srv1.example.com;  
            server srv2.example.com;  
            server srv3.example.com;  
        }  
</div> </div> 權重的負載均衡方式,在輪詢的基礎上為每個服務器配置權重可以保證某個服務器盡可能處理多的請求

    upstream myapp1 {  
            server srv1.example.com weight=3;  
            server srv2.example.com;  
            server srv3.example.com;  
        }  
</div> </div> 上面的配置中,如果有5個請求,有3個會分配到serv1上,有1個會分配到srv2上,有一個會分配到srv3上。如果不指定weight,默認是平的的。


負載均衡包含服務器的健康檢查,如果某個請求被分配到了一個服務器上,服務器無法響應,那么nginx會標記它失敗了,在短時間內,nginx是不會將之后的請求分配給標記失敗的服務器。max_fails指令可以設置最大失敗次數,默認是1,需要先設置了fail_timeout才行。 fail_timeout指定響應時間超過多少秒就將服務器標記為失敗。服務器標記失敗后,nginx會使用幾個客戶端請求優雅地探測服務器,如果探測成功,則服務器標記成功。

更多的負載均衡指令:proxy_next_upstream,backup,down, andkeepalive.

來自:http://blog.csdn.net/ilovezhangxian/article/details/38511657

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!