Nginx常見負載均衡演算法和第三方負載均衡演算法

2021-09-16 19:42:34 字數 2533 閱讀 8643

首先呢我在這裡給大家先介紹一下什麼是負載均衡,他的常見演算法有哪些。

nginx他是乙個擴充套件性非常強大的web伺服器軟體,他能夠支援除自己本身以外的第三方排程演算法,如:fair、url_hash等等。

負載均衡建立在現有網路結構之上,它提供了一種廉價有效透明的方法擴充套件網路裝置和伺服器的頻寬、增加吞吐量、加強網路資料處理能力、提高網路的靈活性和可用性。

負載均衡(load balance)其意思就是分攤到多個操作單元上進行執行,例如web伺服器、ftp伺服器、企業關鍵應用伺服器和其它關鍵任務伺服器等,從而共同完成工作任務。

nginx本身支援的演算法:輪詢(rr)、加權輪詢(wrr)、ip_hash、least_conn

輪詢(round-robin,rr):預設情況下nginx伺服器實現負載均衡的演算法就是輪詢,輪詢策略按照順序選擇組內伺服器處理請求。如果乙個伺服器在處理請求的過程**現錯誤,請求會被順次交給組內的下乙個伺服器進行處理,以此類推,直到返回正常的響應為止。但如果所有的組內伺服器都出錯,則返回最後乙個伺服器的處理結果。

例子:upstream rr

加權輪詢(weighted round-robin,wrr):為組內伺服器設定權重,權重值高的伺服器被優先用於處理請求。此時組內伺服器的選擇策略為加權輪詢。組內所有伺服器的權重預設設定為1,即採用輪詢處理請求。

例子:upstream wrr

ip_hash:ip_hash用於實現會話保持功能,將某個客戶端的多次請求定向到組內同一臺伺服器上,保證客戶端與伺服器之間建立穩定的會話。只有當伺服器處於無效(down)的狀態時,客戶端請求才會被下乙個伺服器接收和處理。注意:使用ip_hash後不能使用weight,ip_hash和主要根據客戶端ip位址分配伺服器,因此在整個系統中,nginx伺服器應該是處於最前端的伺服器,這樣才可以獲取到客戶端ip位址,否則它得到的ip位址將是位於它前面的伺服器位址,從而就會產生問題。

例子:upstream iphash

least_conn:least_conn用於為網路連線分配伺服器組內的伺服器,在功能上實現了最小連線數負載均衡演算法,在選擇組內的伺服器時,考慮各伺服器權重的同時,每次選擇的都是當前網路連線最少的那台伺服器,如果這樣的伺服器有多台,就採用加權輪詢選擇權重值大的伺服器。

例子:upstream leastconn

nginx擴充套件第三方模組後得到的演算法:fair、url_hash等(還有好多,這裡就列舉兩種常見的第三方)。

fair:用於為響應時間分配伺服器組內的伺服器,他是按後端伺服器的響應時間來分配請求,響應時間越短的越優先分配,需要第三方模組的支援nginx-upstream-fair-master

例子:upstream fair

url_hash:按訪問url的hash結果來分配請求,使每個url定向到同乙個後端伺服器,後端伺服器為快取時比較有效。注意:使用hash後不能使用weight。需要第三方模組的支援ngx_http_upstream_hash_module

upstream urlhash

該指令用於設定組內的伺服器。

server address [parameters];

address,伺服器的位址,可以是包含埠號的ip位址(ip:port)、網域名稱或者以"unix:"為字首用於程序間通訊的unix domain socket。

weight=number,為組內伺服器設定權重,權重值高的伺服器被優先用於處理請求。此時組內伺服器的選擇策略為加權輪詢策略。組內所有伺服器的權重預設設定為1,即採用輪詢排程原則處理請求。

max_fails=number,設定乙個請求失敗的次數。在一定時間範圍內,當對組內某台伺服器請求失敗的次數超過該變數設定的值時,認為該伺服器無效(down)。請求失敗的各種情況與proxy_next_upstream指令的配置相匹配。預設設定為1。如果設定為0,則不使用上面的辦法檢查伺服器是否有效。

fail_timeout=time,有兩個作用,一是設定max_fails指令嘗試請求某台組內伺服器的時間,即學習max_fails指令時提到的"一定時間範圍內";另乙個作用是在檢查伺服器是否有效時,如果一台伺服器被認為是無效(down)的,該變數設定的時間為認為伺服器無效的持續時間。在這個時間內不再檢查該伺服器的狀態,並一直認為它是無效(down)的。預設設定為10s。

backup,將某台組內伺服器標記為備用伺服器,只有當正常的伺服器處於無效(down)狀態或者繁忙(busy)狀態時,該伺服器才被用來處理客戶端請求。

down,將某台組內伺服器標記為永久的無效狀態,通常與ip_hash指令配合使用。

示例:

upstream backend

nginx 負載均衡演算法

1 輪詢 就是按照時間順序分配下乙個請求的伺服器。2 權值輪詢 給每乙個伺服器加上權值,權值和分配的請求成正比,比較適應於伺服器配置不均的情況。upstream backend 3 ip雜湊 根據ip的雜湊值分配,這樣每個ip每次訪問的伺服器都相同,這樣session的處理會容易些。upstream...

Nginx 負載均衡演算法

1 輪詢 預設 每個請求按順序逐一分配到不同的伺服器,如果某台伺服器宕機,自動剔除故障系統,整個服務保證可用 2 weight 輪詢加權 weight的值越大分配到的訪問概率越高 upstream bakend 3 ip hash 每個請求按訪問ip的雜湊結果分配,使來自同乙個ip的訪客固定訪問一台...

Nginx負載均衡演算法

目前只有思路,過兩天上 伺服器 權重 a 5 b 3 c 2 1 總的權重是10,先隨機出乙個數字 肯定是10以內的數字 2 然後遍歷權重的陣列 5,3,2 乙個乙個的去比較 核心 遍歷ip 拿到權重weight if offset 數形結合 權重座標 0 5 8 10 a b c 如果offset...