nginx負載均衡及配置 1 負載均衡概述 2 負載均衡的常見平衡機制 1 輪詢(round robin) :以輪詢方式將請求分配到不同伺服器上,每個請求按時間順序逐一分配到不同的後端伺服器, 如果後端伺服器掛掉,自動剔除,保證正常的服務。 2 權重負載均衡(weight):如果沒有配置權重,每個服 ...
nginx負載均衡及配置
1 負載均衡概述
負載均衡由來是因為當一臺伺服器單位時間內的訪問量很大時,此時伺服器的壓力也會很大,當超過自身承受能力時,伺服器就會崩潰.為避免讓伺服器崩潰,用戶擁有更好的體驗,就誕生了負載均衡來分擔伺服器壓力.
負載均衡實質上就是用反向代理的原理實現的,是一種優化伺服器資源,合理處理高併發的一種技術,能夠平衡個伺服器的壓力,減少用戶請求等待時間,並確保容錯.一般採用nginx作為一種高效的HTTP負載均衡伺服器,將流量分配到多個應用伺服器上以提高性能,可擴展和高可用性.
原理: 內網可以建很多伺服器,組成伺服器集群,當用戶訪問該網站時,先訪問公網中間伺服器,中間伺服器根據演算法合理分配到內網伺服器,分擔伺服器的壓力,因此戶的每次訪問,都會保證伺服器集群中的每個伺服器壓力趨於平衡,分擔了伺服器壓力,避免了伺服器崩潰的情況。
nginx反向代理實現包括下麵這些負載均衡HTTP、HTTPS、FastCGI、uwsgi,SCGI和memcached。
要配置HTTPS的負載均衡,只需使用'http'開頭的協議。
當要設置FastCGI,uwsgi,SCGI,或者memcached的負載平衡,分別使用fastcgi_pass,uwsgi_pass,scgi_pass和memcached_pass指令。
2 負載均衡的常見平衡機制
1 輪詢(round-robin) :以輪詢方式將請求分配到不同伺服器上,每個請求按時間順序逐一分配到不同的後端伺服器, 如果後端伺服器掛掉,自動剔除,保證正常的服務。
配置1:
upstream server_back { #nginx分發服務請求
server 192.168.162.49;
server 192.168.162.50;
}
配置2:
http {
upstream servergroup { # 服務組接受請求,nginx輪詢分發服務請求
server srv1.demo.com;
server srv2.demo.com;
server srv3.demo.com;
}
server {
listen 80;
location / {
proxy_pass http://servergroup; #所有的請求被代理到servergroup服務組
}
}
}
proxy_pass 後面是被代理的伺服器ip,也可以是主機名,功能變數名稱,ip埠模式
upstream 設定負載均衡後臺伺服器列表
2 權重負載均衡(weight):如果沒有配置權重,每個伺服器的負載都是一樣的,當出現伺服器性能不均時,採用 權重輪詢,指定的伺服器的權重參數,權重占比為負載均衡決定的一部分。權重大負載就大。
upstream server_back {
server 192.168.162.49 weight=3;
server 192.168.162.50 weight=7;
}
3 最少連接數(least-connected):將下一個請求分配到連接數最少的那台伺服器上,當一些請求需要更長的時 間響應, 最少連接可以更公平地控制應用程式實例的負載。nginx會將請求轉發到負載較少的伺服器。
upstream servergroup {
least_conn;
server srv1.demo.com;
server srv2.demo.com;
server srv3.demo.com;
}
4 ip-hash :基於客戶端的IP地址。原因時負載均衡每次請求都會重新定位到伺服器集群中的某一個,那麼已經登錄某一個伺服器的用戶再重新定位到另一個伺服器,其登錄信息將會丟失,這樣明顯不太妥。採用ip_hash解決這個問題,如果客戶已經訪問了某個伺服器,當用戶再次訪問時,會將該請求通過哈希演算法,自動定位到該伺服器。
每個請求按照IP hash的結果分配,因此請求被固定到某一個後端伺服器,也可以解決session問題
upstream servergroup {
ip-hash;
server srv1.demo.com;
server srv2.demo.com;
server srv3.demo.com;
}
附上一個實例:
#user nobody;
worker_processes 4;
events {
# 最大併發數
worker_connections 1024;
}
http{
# 待選伺服器列表
upstream myserver{
# ip_hash指令,將同一用戶引入同一伺服器。
ip_hash;
server 125.219.42.4 fail_timeout=60s; #max_fails失敗後暫定時間60s
server 172.31.2.183;
}
server{
# 監聽埠
listen 80;
# 根目錄下
location / {
# 選擇哪個伺服器列表
proxy_pass http://myserver;
}
}
}
max_fails 允許請求失敗的次數預設為1
fail_timeout=60s fail_timeout=60s失敗暫停的時間
down 表示當前的伺服器暫時不參與負載
backup 所有非backup機器忙的時候會請求backup,因此其壓力會最輕
參考:http://www.ttlsa.com/nginx/using-nginx-as-http-loadbalancer/ 非常感謝
更多:http://nginx.com/blog/load-balancing-with-nginx-plus/
http://nginx.com/blog/load-balancing-with-nginx-plus-part2/