nginx負載均衡策略你知道多少?

恆生LIGHT雲社群發表於2021-12-07

作者:燒雞太子爺

來源: 恆生LIGHT雲社群

簡介

nginx做反向代理在我們開發運維的同志日常生活中已經非常常見,當我們後端有多臺服務的時候還可以用nginx做負債均衡,而upstream模組就是其中的核心模組。

近期需要針對兩臺機器的叢集做一個測試,而由於兩臺服務的CPU和記憶體差距很大(一臺4C8G,一臺8C16G),導致原先預設的輪訓的配置就無法使用,期望實現權重的負載均衡策略,就對nginx的upstream模組做了一些筆記,跟大家一起分享一下

upstream中的常用引數

常用引數 引數作用
server 負載均衡後端的伺服器的IP或域名,不寫埠預設是80,高併發場景用域名,再透過DNS進行負載均衡
weight 後端伺服器的權重,預設為1,權重越大接收的請求越多,比如:weight=2
max_fails 檢查節點的健康狀態並允許請求失敗的次數,達到該次數將節點下線,預設為1,0表示禁止失敗嘗試,例如:max_fails=3
fail_timeout max_fails失敗次數達到限制後暫停該節點伺服器時間,預設是10秒。
backup 熱備配置,當服務池中所有的伺服器出現問題後會自動上線backup伺服器。
down 標誌伺服器不可用,不參與負載均衡,這個引數通常配合IP_HASH使用。
max_conns 限制最大連線數,通常對後端伺服器硬體不一致的情況進行配置。
keepalive 限制空閒長連線的最大數量。
keepalive_timeout 空閒長連線的最長保持時間。
keepalive_requests 每個長連線最多可以處理的請求數。

官方支援的分配的方式

1、輪詢

輪詢是upstream的預設分配的方式,即每個請求按照時間順序輪流分配到不同的後端伺服器,如果某個後端伺服器down掉後,能自動剔除。

2、weight

weight就是輪詢的加強版,即可以指定輪詢比率,weight和訪問機率成正比,主要應用於後端伺服器配置差異較大的情況下,後面會舉例。

upstream backend_developer {


  ip_hash

  server 172.27.26.174:8099 weight=2;

  server 172.27.26.243:8099 weight=1;

}

搜尋百度前面的所有舉例權重都是1,2,3的排名方式,反而讓人疑惑,是按1,2,3的順序輪訓??

1.png

3、ip_hash

每個請求按照訪問ip(即Nginx的前置伺服器或者客戶端IP)的hash結果分配,這樣每個訪客會固定訪問一個後端伺服器,可以解決session一致問題。這個存在的問題就是比如某一個部門在一個出口IP段內,這樣就會造成可能整個部門的都在訪問某一臺伺服器,造成服務不均衡

upstream backend_developer {


  ip_hash

  server 172.27.26.174:8099;

  server 172.27.26.243:8099;

}

實戰

前面也說到,我們是一臺4C8G+一臺8C16G的機器,單臺效能壓測的結果是8C的機器的tps是4C的機器的2倍,所以我們需要將兩臺機器的權重為2:1(即3次請求,有一次請求在4C的機器,有兩次請求會在8C的機器)

nginx的配置

2.png

傳送請求

我們利用postman工具連續傳送6次

3.png

檢視結果

4.png

5.png

根據結果我們可以看到,6次請求分別權重的weight=1的機器上請求了2次,權重weight=2的機器上輪訓了4次。

好了,本次就總結到這裡,後面我們有時間的話可以跟大家一起聊聊,upstream的實現原理,有興趣的可以在下方給我留言哦

參考

官網:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70001864/viewspace-2846258/,如需轉載,請註明出處,否則將追究法律責任。

相關文章