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,因此其壓力會最輕。