Nginx負載均衡與高可用的實現

Nginx負載均衡與高可用的實現
當生產環境裏有很大的流量產生時,通常需要用負載均衡技術來做優化,並確保容錯配置。Nginx不光可以實現Web Server,還可以作爲HTTP負載均衡來分發流量給後端的應用程序服務器,以此來提高性能。Nginx的負載均衡功能依賴於ngx_http_upstream_module模塊,所支持的代理方式有proxy_pass,fastcgi_pass,memcached_pass。
Nginx常用負載均衡算法:
輪詢(默認算法)——每個請求會依次分配給後端不同的應用程序服務器,不理會後端服務器的實際壓力
加權輪詢——權重越大的服務器,被分配到的次數就會越多,通常用於後端服務器性能不一致的情況
IP HASH——當同IP進行重複訪問時會被指定到上次訪問到的服務器,可以解決動態網站SESSION共享問題
upstream模塊常用參數說明:
server 192.168.0.100:80 負載均衡後端RealServer的IP或者域名,端口不寫的話默認爲80。高併發場景用域名,再通過DNS進行負載均衡
weight=5 權重,默認爲1,權重越大接收的請求越多
max_fails=2 最大嘗試的失敗次數,默認爲1,0表示禁止失敗嘗試
fail_timeout=10s 失敗超時時間,默認是10秒,通常3s左右比較合適
backup 熱備配置,前段RealServer出現問題後會自動上線backup服務器
down 標誌服務器不可用,這個參數通常配合IP_HASH使用
Nginx負載均衡設置:
默認的負載均衡配置
http {        #upstream模塊包含在http模塊下
    upstream  linuxidc{        #定義upstream名字,下面會引用
        server 192.168.1.100;        #指定後端服務器地址
        server 192.168.1.110;        #指定後端服務器地址
        server 192.168.1.120;        #指定後端服務器地址
    }
    server {
        listen 80;
        server name www.linuxidc.com;
        location / {
            proxy_pass http://linuxidc;        #引用upstream
        }
    }
}
在上面的例子中,當用戶訪問www.linuxidc.com站點時,Nginx會負載平衡分配給後端的三個服務器。
加權負載均衡
http {      
    upstream  linuxidc{        
        server 192.168.1.100 weight=3;        #指定後端服務器地址,權重爲3
        server 192.168.1.110;      
    }
    server {
        listen 80;
        server name www.linuxidc.com;
        location / {
            proxy_pass http://linuxidc;        
        }
    }
}
在上面配置中,每3個請求分配給192.168.1.100,然後第4個請求會分配給192.168.1.110,如此循環下去。
IP HASH負載均衡
upstream linuxidc {
    ip_hash;        #採用IP HASH算法
    server 192.168.1.100;
    server 192.168.1.110;
    server 192.168.1.120;
}
如果需要將客戶與後端一臺服務器“綁定”起來,可以使用ip-hash負載平衡機制。這樣可以確保來自相同客戶機的請求總是指向相同的服務器除非該服務器不可用。
Nginx高可用的實現,利用backup標籤,可以實現高可用,當主服務掛掉後,backup服務器會自動接管服務,當主服務恢復後,backup也會自動放棄服務
http {      
    upstream  linuxidc{        
        server 192.168.1.100 
        server 192.168.1.110 backup;  
    }
    server {
        listen 80;
        server name www.linuxidc.com;
        location / {
            proxy_pass http://linuxidc;        
        }
    }
}
Nginx的upstream模塊相當於是建立一個函數庫一樣,把後端的服務器地址放在了一個池子裏,而proxy模塊則是從這個池子裏調用了這些服務器。
http_proxy_module模塊常用參數:
proxy_set_header:讓後端服務器能獲取到前端用戶真實IP,而不只是代理服務器的IP
proxy_set_header Host $host;    
#當後端服務器配置多個web站點時,該選項可以讓服務器識別出具體要訪問的是哪個站點,而不會將第一個站點作爲默認站點傳遞給用戶
proxy_set_header X-Forwarded-For $remote_addr;    
#如果後端服務器需要獲取用戶的真實IP,需要該選項
client_body_buffer_size:客戶端請求主體緩衝區大小
proxy_connect_timeout:代理服務器和後端真實服務器握手連接超時時間
proxy_send_timeout:後端服務器回傳數據給Nginx的時間,需要在設置的時間範圍內發送完所有數據,否則Nginx將斷開連接
proxy_read_timeout:代理服務器和後端服務器連接成功後,等待後端服務器響應時間
前端Nginx反向代理,如何獲取客戶端真實IP?
#轉發動態頁面給Tomcat處理
location ~ \.(jsp|jspx|do)?$ {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://tomcat_server;
更多Nginx負載均衡配置相關教程見以下內容
Nginx負載均衡配置說明 http://www.linuxidc.com/Linux/2016-03/129424.htm
Linux下Nginx+Tomcat負載均衡和動靜分離配置要點  http://www.linuxidc.com/Linux/2016-01/127255.htm
Docker+Nginx+Tomcat7配置簡單的負載均衡  http://www.linuxidc.com/Linux/2015-12/125907.htm
Nginx負載均衡(主備)+Keepalived  http://www.linuxidc.com/Linux/2015-12/126865.htm
使用Nginx作爲負載均衡器 http://www.linuxidc.com/Linux/2015-12/125789.htm
CentOS環境下Nginx實現3臺虛擬機負載均衡 http://www.linuxidc.com/Linux/2015-12/125875.htm
Nginx反向代理負載均衡羣集實戰  http://www.linuxidc.com/Linux/2015-08/122111.htm
Nginx 的詳細介紹請點這裏
Nginx 的下載地址請點這裏
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章