面對高並發的問題,企業往往會從兩個方面來解決。其一,從硬件上面,提升硬件的配置,增加服務器的性能;另外,就是從軟件上,將數據庫和WEB服務器分離,使數據庫和WEB服務器都能夠充分發揮各自的性能,並且二者不相互影響。然而,這樣還不夠,一台WEB服務器可能無法承受太高的並發請求。那么負載均衡技術就應運而生,下面我們就來談談如何用Nginx進行負載均衡。
負載均衡的作用
1.轉發
轉發是負載均衡的核心功能,它能夠根據一定的算法,將客戶端請求轉發到不同應用服務器,緩解每台服務器的壓力,提高並發量。
2.移除故障
當其中一台服務器發生故障時,會被移出輪詢隊列,客戶端請求將會發送到其他幾台正常的服務器,不會影響客戶端的訪問。
3.恢復添加
當故障的服務器恢復時,會自動被加到輪詢隊列,繼續處理客戶端請求。
Nginx配置
輪詢
如下是Nginx的基本配置,upstream配置要負載的節點。nodes可以自己取,要跟server中proxy_pass的nodes一致。
server_name可以是Nginx服務器的ip地址,也可以是域名,根據具體情況配置即可,listen為端口號。
upstream nodes {
server 192.168.1.11;
server 192.168.1.12;
}
server {
listen 80;
server_name 127.0.0.1;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://nodes;
index index.html index.htm;
}
}
使用以上配置,默認采用輪詢的分發策略,即每個請求按時間順序逐一分配到不同的應用服務器,如果應用服務器down掉,自動剔除,剩下的繼續輪詢。
權重
如果需要為每個請求節點配置不同的權重,可以在地址后面增加權重,配置如下
upstream nodes {
server 192.168.1.11 weight=4;
server 192.168.1.12;
}
通過配置權重,指定輪詢幾率,權重和訪問比率成正比,用於應用服務器性能不均的情況。weight默認為1,weight越大,負載的權重就越大。
IP哈希算法
還有一種策略是IP哈希算法,請求按訪問ip的hash結果分配,這樣每個IP固定訪問一個應用服務器,可以解決session共享的問題,配置如下
upstream nodes {
ip_hash;
server 192.168.1.11;
server 192.168.1.12;
}
其他
upstream中還有其他幾個常用的配置項:
down: 表示當前的server不參與負載均衡
max_fails: 允許請求失敗的次數默認為1.當超過最大次數時,返回proxy_next_upstream 模塊定義的錯誤
fail_timeout: max_fails次失敗后,暫停請求此台服務器的時間
backup: 其他全部的非backup機器down或者忙的時候,請求backup機器。所以這台機器壓力會最輕
upstream nodes {
server 192.168.1.11 down;
server 192.168.1.12 backup;
server 192.168.1.13;
}
以上就是Nginx的一些基本配置,能夠滿足基本的使用,大家可以動手測試一下。
下載地址:https://nginx.org/en/download.html,下載后解壓即可。配置文件為conf/nginx.conf,修改好配置文件后雙擊nginx.exe啟動。