一 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]}}'