Nginx的負載均衡

2022-03-26 11:17:27 字數 2864 閱讀 2350

我們都知道,nginx支援負載均衡,可以很方便的幫助我們進行水平擴容,然而它究竟是依據什麼原則進行請求的分發,其中又有哪些負載均衡演算法可供選擇和配置,今天就讓我們好好來了解一下。

當客戶端傳送請求時,會先到nginx,然後nginx會將請求分發到後台不同的伺服器上。

如果後台的伺服器群中有乙個宕機了,那麼nginx會自動忽略這台伺服器,不會將請求再次分發到這台伺服器上。

如果有新加入的伺服器,nginx也會將請求分發到這台伺服器上。

我所理解的負載均衡,就是:

能夠將客戶端的請求均勻地分發到後台各個應用伺服器上,從而緩解伺服器壓力。

並且當伺服器出現宕機或者擴容時,也能正常執行。

上面了解了什麼是負載均衡,那麼nginx是怎麼實現這個功能的呢?

nginx中負責與上游互動的模組,統稱為upstream模組。

指定上游伺服器的address時,其位址可以是網域名稱、ip位址或者unix socket位址。

可以在網域名稱或者ip位址後加埠,如果不加埠,那麼預設使用80埠

address後面可以新增一些引數,比如:

backup:指定當前server為備份服務,僅當非備份server不可用時,請求才會**到該server。

down:標識某台服務已經下線,不再服務。

舉個例子:

upstream upstream-service
upstream這個模組中,它還提供了乙個最基本的負載均衡演算法round-robin

其功能是:

以加權輪詢的方式訪問server指令指定的上游服務。

這個演算法是預設整合在nginx的框架中,無法移除,所以後面講解的所有演算法都是基於此,所有演算法在某些特殊情況下最終都會變成round-robin

涉及到的指令有:

weight:服務訪問的權重,預設是1。

max_conns:server的最大併發連線數,僅作用於單worker程序。

max_fails:在fail_timeout時間內,最大的失敗次數。當達到最大失敗時,會在fail_timeout時間內不允許再次被選擇。

fail_timeout:單位為秒,預設是10秒。指定一段時間內,最大的失敗次數max_fails。到達max_fails後,該server不能訪問的時間。

有的時候,正常的輪詢演算法並不能滿足我們的需求,

比如:帶有cookie請求狀態的連線,如果應用服務沒有設定專門的管理cookie的伺服器,那麼我們就希望同乙個使用者能被分配到同乙個伺服器。

再比如:我們後端應用需要針對請求當中的引數或者url,將相同的請求放到相同的伺服器上進行處理。

針對第一種情況,就可以用upstream_ip_hash。針對第二種情況,可以使用upstream_hash

upstream_ip_hash

功能:

以客戶端的ip位址作為hash演算法的關鍵字,對映到特定的上游伺服器中。

對ipv4位址使用前3個位元組作為關鍵字,對ipv6則使用完整位址。

可以使用round-robin演算法的引數。

可以基於realip模組修改用於執行演算法的ip位址。

舉個例子:

upstream upstream-service
upstream_hash

功能:

通過制定關鍵字作為hash key,基於hash演算法對映到特定的上游伺服器中。

關鍵字可以含有變數、字串。

可以使用round-robin演算法的引數。

舉個例子(以請求中的引數username作為hash key):

upstream upstream-service
hash演算法在一定程度上已經可以滿足了我們的業務需求,但如果這個時候遇到應用宕機或者應用擴容,那麼hash的總數就會變化,這樣很有可能帶來大量請求原本請求的伺服器會更換,路由會失效,這樣對於我們的應用服務也會產生極大的影響,這時候就可以採用一致性hash演算法。

對於一致性雜湊演算法的理解,可以參考這篇文章:一致性雜湊演算法的理解與實踐

它的使用也十分簡單,就是在之前說的upstream_hash模組的hash指令最後,新增引數consistent,這樣nginx就可以使用一致性雜湊演算法了。

舉個例子(仍以請求中的引數username作為hash key):

nginx 負載均衡 Nginx負載均衡策略

nginx提供的負載均衡策略有2種 內建策略和擴充套件策略。內建策略為輪詢 預設 加權輪詢,ip hash,第三方。upstream mysvr1 輪詢 每個請求按照時間順序逐一的分配到每乙個後台伺服器上。如果某台伺服器宕機了,將會自動的剔除宕機的服務。nginx預設就是輪詢其權重都預設為1,伺服器...

nginx負載均衡

nginx 的 upstream目前支援 4 種方式的分配 1 輪詢 預設 每個請求按時間順序逐一分配到不同的後端伺服器,如果後端伺服器down掉,能自動剔除。2 weight 指定輪詢機率,weight和訪問比率成正比,用於後端伺服器效能不均的情況。3 ip hash 每個請求按訪問ip的hash...

nginx負載均衡

nginx s stop quick exit nginx s quit graceful quit nginx s reload changing configuration,starting a new worker,quitting an old worker gracefully nginx...