前言
Nginx作為一款最流行WEB服務器軟件,同時也是一款反向代理和負載均衡軟件。毫不夸張地說,Nginx在負載均衡領域絕對是老大地位,這得益于它的高并發和穩定性。而且在配置使用上也是非常簡單,維護也特別容易。那么本篇文章就來聊聊Nginx作為負載均衡器,它支持的算法都有哪些?
Nginx支持的算法匯總
Nginx并不像LVS那樣支持多達10種負載均衡算法,它默認支持4種算法,另外還可以通過自定義三方模塊來支持更多的三方算法,下面我只列出來兩種常見的。
算法 | 說明 |
輪詢 | 默認的算法,如果配置中不指定就走這個算法 |
Weight | 帶權重的輪詢算法,權重越高被請求的次數就越多 |
ip_hash | 根據客戶端IP來選擇后端服務器 |
least_conn | 會將請求優先發送給連接數最少的后端服務器 |
fair | 三方模塊,按后端服務器響應時間來決策 |
url_hash | 三方模塊,按訪問url的hash結果來分配請求 |
輪詢
按請求發來的順序逐一分配到不同的后端服務器上,最簡單最弱智的負載均衡算法,看似公平,其實并不好,比如后端某臺服務器負載很高了,那么還是會雷打不動地被動接收請求。
配置示例如下:
upstreamaminglinux{ server 192.168.10.11; server 192.168.10.12; }
Weight
相比較默認的輪詢算法,這個Weight多加了一層權重的概念。就是說,我們可以人為地給后端服務器定義權重。這樣確實可以保證讓性能更好的服務器接收更多的請求,正所謂“能者多勞”! 配置示例如下:
upstreamaminglinux{ server 192.168.10.11 weight=1; server 192.168.10.12 weight=3; }說明:這個weight定義的值范圍為1-255,值越大,那么給到的請求就越多。
Ip_hash
當使用了負載均衡后,那么就意味著,同一個客戶端很有可能第一次訪問的是A機器,而第二次訪問的是B機器,那么這樣就會導致,訪問A機器時登錄了,而訪問B機器時是非登錄狀態。而這個算法主要用來解決此類問題。 該算法下,每個請求按訪問IP的哈希結果分配后端服務器,使來自同一個IP的訪客固定訪問一臺后端服務器,這樣就解決了上面提到的問題,也就是說所謂的“session共享問題”。
配置示例如下:
upstreamaminglinux{ ip_hash; server192.168.10.11; server192.168.10.12; }
Least_conn
從字面意思上也可以理解,就是將請求優先分配給后端服務器里連接數最少的服務器。不過,這個算法是和weight配合使用的,它有一個公式:conns/weight,也就是說Nginx會計算連接數除以權重,最終拿這個值進行比對,值越小會優先分配到請求。 配置示例如下:
upstreamaminglinux{ least_con server192.168.10.11 weight=10; server192.168.10.12 weight=5; }
Fair
這是一個三方的算法,需要在編譯Nginx時增加nginx-upstream-fair-master模塊支持。該算法可以根據后端服務器的響應時間的大小來決定將請求發送給誰,響應時間越快,那么就優先拿到請求。 配置示例如下:
upstreamaminglinux{ fair; server192.168.10.11; server192.168.10.12; }
Url_hash
三方的算法,需要在編譯Nginx時增加ngx_http_upstream_hash_module模塊支持。該算法按訪問url的hash結果來分配請求,使每個url定向到同一個后端服務器。注意:使用該算法后不能帶weight。 配置示例如下:
upstreamaminglinux{ hash$request_uri; server192.168.10.11; server192.168.10.12; }
審核編輯:劉清
-
LVS
+關注
關注
1文章
36瀏覽量
9940 -
Hash算法
+關注
關注
0文章
43瀏覽量
7382 -
nginx
+關注
關注
0文章
149瀏覽量
12170
原文標題:Nginx的負載均衡算法你知道都有哪些嗎
文章出處:【微信號:aming_linux,微信公眾號:阿銘linux】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論