Nginx負載均衡詳解
- 2019 年 10 月 16 日
- 筆記
負載均衡
負載均衡可以將請求前端的請求分擔到後端多個節點上,提升系統的響應和處理能力。
負載均衡是擴展應用程式並提高其性能和冗餘的絕佳方法。Nginx是一種流行的Web伺服器軟體,可以配置為簡單但功能強大的負載均衡器,以提高伺服器資源的可用性和效率。在負載平衡配置中,nginx充當在多個單獨伺服器上工作的分散式Web應用程式的單個入口點。
對於CentOS安裝nginxn,用戶可以在/etc/nginx/conf.d/下找到其主機配置文件,載入了任何.conf類型的虛擬主機文件。
Nginx負載均衡策略
負載均衡的策略可以大致分為兩大類:內置策略 和擴展策略
內置策略:一般會直接編譯進Nginx內核,常用的有輪詢、加權輪詢、最少連接平衡和ip_hash策略。在默認情況下內置策略會編譯進nginx內核,只需在nginx配置中指明參數即可。
擴展策略:fair、url hash、Sticky策略等,默認不編譯進nginx內核。
Nginx配置方法與配置模板
1.編輯配置文檔:load-balancer.conf
sudo vi /etc/nginx/conf.d/load-balancer.conf
2.在load-balancer.conf中,您需要定義以下兩個段:上游和伺服器
#定義要包含在負載均衡方案中的伺服器。 #最好使用伺服器的私有IP以獲得更好的性能和安全性。 http { upstream backend { server 10.1.0.101; server 10.1.0.102; server 10.1.0.103; } #該伺服器接受到埠80的所有流量並將其傳遞給上游。 #請注意,上游名稱和proxy_pass需要匹配。 server { listen 80; location / { proxy_pass http://backend; } } }
3.然後保存文件,退出編輯器並再次重新啟動nginx。
sudo systemctl restart nginx
內置策略
(1)輪序策略
該策略就是伺服器將每個前端請求按順序(時間順序和排列次序)逐一分配到不同的後端伺服器節點。如果後端伺服器出現問題,即down掉,那麼就會被自動剔除。
http {
# … 省略其它配置
upstream s_siat{
server 192.168.0.100:8080;
server 192.168.0.101:8080;
}
# … 省略其它配置
}
(2)加權輪詢策略
該策略在基本的輪詢策略基礎上考慮各後端伺服器節點接受請求的權重,指定各後端伺服器節點被輪詢到的機率,主要應用於後端伺服器節點性能不均的情況。
例如:通過直接配置weight來設置訪問機率,weight的大小和訪問比率成正比。下面三個伺服器(如果不配置weight,則默認配置為weight=1),第一個的權重是1,第二個的權重是3,第三個的權重是2,那麼這三個後端伺服器被訪問的比率是1:3:2,即server172.31.3.82:9171被訪問的機率最高,server172.31.3.82:9171次之,server172.31.3.82:9170訪問的機率最小。
http {
# … 省略其它配置
upstream s_siat{
server 172.31.3.82:9170;
server 172.31.3.82:9171 weight=3;
server 172.31.3.82:9173 weight=2;
}
# … 省略其它配置
}
(3)ip_hash策略
該策略是將前端的訪問IP進行hash操作,然後根據hash結果將請求分配到不同的後端伺服器節點。這樣會使得每個前端訪問IP會固定訪問一個後端伺服器節點,好處是前端用戶的session只在一個後端伺服器節點上,不必考慮一個session存在多台伺服器節點出現session貢獻問題。
例如:因為weight是內置,所以可以直接和其他策略配合使用。本策略使用的是ip_hash策略,需要在配置upstream中添加ip_hash一行。
http {
# … 省略其它配置
upstream s_siat{
ip_hash;
server 172.31.3.82:9170;
server 172.31.3.82:9171 weight=3;
server 172.31.3.82:9173 weight=2;
}
# … 省略其它配置
}
或者
http {
# … 省略其它配置
upstream s_siat{
ip_hash;
server 172.31.3.82:9170;
server 172.31.3.82:9171;
server 172.31.3.82:9173;
}
# … 省略其它配置
}
兩者都是ip_hash策略。只是對應伺服器被訪問的機率有所改變。
注意:ip_hash模組和後面的Sticky模組不能夠同時使用。
(4)最少連接(least_conn)
基於最少連接的負載平衡是另一種簡單的方法。顧名思義,此方法將請求定向到當時具有最少活動連接的伺服器。對於請求有時可能需要更長時間才能完成的應用程式,它比循環法更有效。
http {
# … 省略其它配置
upstream s_siat {
least_conn;
server 192.168.0.100:8080;
server 192.168.0.101:8080;
}
# … 省略其它配置
}
擴展策略
(1)url_hash策略
該策略將前端請求的url地址進行hash操作,根據hash結果將請求定向到同一後端伺服器節點上,後台伺服器為快取是比較有效。一般url_hash需要配合緩衝命中來使用。
http {
# … 省略其它配置
upstream s_siat {
server 192.168.0.100:8080;
server 192.168.0.101:8080;
hash $request_uri;
hash_method crc32;
}
# … 省略其它配置
}
(2)fair策略
該策略請求轉發到負載最小的後端伺服器節點上。Nginx通過後端伺服器節點對響應時間來判斷負載情況,響應時間最短的節點負載就相對較輕,Nginx就會將前端請求轉發到此後端伺服器節點上。
http {
# … 省略其它配置
upstream s_siat{
server 172.31.3.82:9170;
server 172.31.3.82:9171;
server 172.31.3.82:9173;
fair;
# … 省略其它配置
}
(3)Sticky策略
該策略在多台伺服器的環境下,為了確保一個客戶端只和一台伺服器通訊,它會保持長連接,並在結束會話後再次選擇一個伺服器,保證了壓力均衡。
http {
# … 省略其它配置
upstream s_siat{
sticky;
server 172.31.3.82:9170;
server 172.31.3.82:9171;
server 172.31.3.82:9173;
# … 省略其它配置
}
注意:如果瀏覽器不支援cookie,那麼sticky不生效,畢竟整個模組是給予cookie實現。Sticky模組和ip_hash模組不能夠同時使用。
upstream中的其他配置
在需要使用負載均衡的server中增加 :
proxy_passhttp://backserver/;
upstreambackserver{
ip_hash;
server127.0.0.1:9090 down; (down 表示單前的server暫時不參與負載)
server127.0.0.1:8080 weight=2; (weight 默認為1.weight越大,負載的權重就越大)
server127.0.0.1:6060 max_fails=3 fail_timeout=30s;(max_fails允許請求失敗的次數默認為1,此處允許失敗的次數為3。每次失敗後暫停的時間為30s)
server127.0.0.1:7070 backup; (其它所有的非backup機器down或者忙的時候,請求backup機器)
keepalive16;(連接到nginx負載均衡器的最大)
}
server{
location / { #(進行url重定向或進行新的代理)
proxy_pass http://backend;
}
1.down表示單前的server暫時不參與負載
2.weight默認為1.weight越大,負載的權重就越大。
3.max_fails:允許請求失敗的次數默認為1.當超過最大次數時,返回proxy_next_upstream模組定義的錯誤
4.fail_timeout:max_fails次失敗後,暫停的時間。
5.backup:其它所有的非backup機器down或者忙的時候,請求backup機器。所以這台機器壓力會最輕。
6. keepalive:連接數(keepalive的值)指定了每個工作進程中保留的持續連接到nginx負載均衡器快取的最大值。如果超過這個設置值的閑置進程想鏈接到nginx負載均衡器組,最先連接的將被關閉。
7. location對URL進行匹配.可以進行重定向或者進行新的代理負載均衡
註:nginx支援同時設置多組的負載均衡,用來給不用的server來使用。
l client_body_in_file_only設置為On可以講clientpost過來的數據記錄到文件中用來做debug
l client_body_temp_path設置記錄文件的目錄 可以設置最多3層目錄
refer