nginx中調度算法的五種實現(xiàn)
一、常見的三種調度算法
輪詢:nginx負載均衡默認策略,按時間順序一個接一個的調度,適用于連接狀態(tài)較短、且后端服務器配置一樣的情況下。
權重(weight):權重越高被訪問的頻率越高,適用于連接狀態(tài)較短、且后端服務器配置差別較大的情況下。
ip_hash:根據(jù)客戶端ip進程分配,保證同一個客戶端每次都能訪問到固定的服務器節(jié)點,適用于用戶長時間進行文件傳輸?shù)膱鼍?。ip_hash不能提供健康監(jiān)測功能
配置方式
NGINX配置負載均衡主要是在nginx.conf文件中里upstream模塊
1、upstream模塊應放于nginx.conf配置的http{}標簽內
2、upstream模塊默認算法是wrr (權重輪詢 weighted round-robin)
分配算法
Nginx的upstream支持5種分配方式,下面將會詳細介紹,其中前三種為Nginx原生支持的分配方式,后兩種為第三方支持的分配方式。
1、輪詢
輪詢是upstream的默認分配方式,即每個請求按照時間順序輪流分配到不同的后端服務器,如果某個后端服務器down掉后,能自動剔除。
upstream backend { server 192.168.1.101:8888; server 192.168.1.102:8888; server 192.168.1.103:8888; }
2、weight(權重比)
輪詢的加強版,即可以指定輪詢比率,weight和訪問幾率成正比,主要應用于后端服務器異質的場景下。
upstream backend { server 192.168.1.101 weight=1; server 192.168.1.102 weight=2; server 192.168.1.103 weight=3; }
3、ip_hash
每個請求按照訪問ip(即Nginx的前置服務器或者客戶端IP)的hash結果分配,這樣每個訪客會固定訪問一個后端服務器,可以解決session一致問題。
upstream backend { ip_hash; server 192.168.1.101:7777; server 192.168.1.102:8888; server 192.168.1.103:9999; }
注意:
1、當負載調度算法為ip_hash時,后端服務器在負載均衡調度中的狀態(tài)不能是weight和backup。
2、導致負載不均衡。
4、fair
fair顧名思義,公平地按照后端服務器的響應時間(rt)來分配請求,響應時間短即rt小的后端服務器優(yōu)先分配請求。如果需要使用這種調度算法,必須下載Nginx的upstr_fair模塊。
upstream backend { server 192.168.1.101; server 192.168.1.102; server 192.168.1.103; fair; }
5、url_hash,目前用consistent_hash替代url_hash
與ip_hash類似,但是按照訪問url的hash結果來分配請求,使得每個url定向到同一個后端服務器,主要應用于后端服務器為緩存時的場景下。
upstream backend { server 192.168.1.101; server 192.168.1.102; server 192.168.1.103; hash $request_uri; hash_method crc32; }
其中,hash_method為使用的hash算法,需要注意的是:此時,server語句中不能加weight等參數(shù)。
提示:url_hash用途cache服務業(yè)務,memcached,squid,varnish。特點:每個rs都是不同的。
二、設備狀態(tài)
從上面實例不難看出upstream中server指令語法如下:server address [parameters]
參數(shù)說明:
server:關鍵字,必選。
address:主機名、域名、ip或unix socket,也可以指定端口號,必選。
parameters:可選參數(shù),可選參數(shù)如下:
1.down:表示當前server已停用
2.backup:表示當前server是備用服務器,只有其它非backup后端服務器都掛掉了或者很忙才會分配到請求。
3.weight:表示當前server負載權重,權重越大被請求幾率越大。默認是1.
4.max_fails和fail_timeout一般會關聯(lián)使用,如果某臺server在fail_timeout時間內出現(xiàn)了max_fails次連接失敗,那么Nginx會認為其已經掛掉了,從而在fail_timeout時間內不再去請求它,fail_timeout默認是10s,max_fails默認是1,即默認情況是只要發(fā)生錯誤就認為服務器掛掉了,如果將max_fails設置為0,則表示取消這項檢查。
舉例說明如下:
upstream backend { server backend1.example.com weight=5; server 127.0.0.1:8080 max_fails=3 fail_timeout=30s; server unix:/tmp/backend3; }
到此這篇關于nginx中調度算法的實現(xiàn)的文章就介紹到這了,更多相關nginx 調度算法內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Nginx 請求壓縮的實現(xiàn)(動態(tài)壓縮,靜態(tài)壓縮)
本文主要介紹了Nginx 請求壓縮的實現(xiàn)(動態(tài)壓縮,靜態(tài)壓縮),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-03-03安裝Windows版nginx及部署前端代碼并解決刷新出現(xiàn)404問題
這篇文章主要給大家介紹了關于安裝Windows版nginx及部署前端代碼解決刷新出現(xiàn)404問題的相關資料,使用nginx部署前端項目是一篇非常詳細的教程,旨在幫助初學者使用Nginx來部署前端項目,需要的朋友可以參考下2023-12-12通過Nginx的proxy_set_header設置請求頭無效的解決
這篇文章主要介紹了通過Nginx的proxy_set_header設置請求頭無效的解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-12-12