Nginx的負載均衡策略及配置

2022-08-04 00:12:15 字數 2251 閱讀 8336

**

為了增加對負載均衡的好感,我們先了解負載均衡能實現什麼。

下面正式進入主題。

負載均衡就是將請求「均衡」地分配到多台業務節點伺服器上。這裡的「均衡」是依據實際場景和業務需要而定的。

對於nginx來說,請求到達nginx,nginx作為反向**伺服器,有絕對的決策權,可以按照規則將請求分配給它知道的節點中的乙個,通過這種分配,使得所有節點需要處理的請求量處於相對平均的狀態,從而實現負載均衡。

nginx支援的負載均衡策略很多,比較重點的如下:

這麼多的策略,非常不利於記憶和選擇,我們不妨將這些常見的策略歸類,分而化之,方便挑選。

最佳實踐,其實就是最常見、最普通的預設配置,當然也是在一定程度上最好用的配置。不知道用什麼方式的時候,就可以選擇用這一型別。

輪詢不用多說。這裡的隨機,其實在大量請求的情況下,按照概率的理論等同於輪詢的方式。

輪詢配置參考:

#預設配置就是輪詢策略

upstream server_group

隨機配置參考:

upstream server_group
讓業務節點中效能更強的機器得到更多請求,這也是乙個比較好的分配策略。

什麼是效能更好的機器?這個問題也有很多的維度去考量。

權重的配置參考:

upstream server_group
響應的時長(fair)配置參考:需要在nginx編譯時加入nginx-upstream-fair模組。

upstream server_group
最少連線數(least_conn)配置參考:

upstream server_group
很多請求都是有狀態的,上一次請求到哪個業務節點,這次還要請求到哪台機器。比如常見的session就是這樣一種有狀態的業務。

這裡nginx提供了按照客戶端ip的hash來作為使用者的標示分配、url的hash作為分配標示的規則。本質上還是要找到使用者的請求中不變的要素,抽離出來,這樣就可以進行分配了。

ip_hash配置參考:

upstream server_group
url_hash配置參考:

upstream server_group
nginx支援一致性hash進行分配,也就是配置中consistent。

什麼是一致性hash?為什麼要引入這個機制?在生產環境下,業務節點經常會出現增加或減少的情況,就算這種增加或減少都是被動的,也可能會對hash分配產生影響。如何能夠做到儘量減少影響呢?這時一致性hash被發明出來。

一致性hash解決兩個問題:

1)如何解決分配不均的問題

將原來的每乙個節點複製出n個虛擬節點,並且給這些虛擬節點都起個名字。

比如原來有5個節點,分配的時候經常會不均勻,現在每個節點都虛擬出n個節點,就是5*n個節點,會極大降低分配不均勻的情況。下面就要說說如何分配的問題了。

2)如何解決節點變動的問題

一致性雜湊的基本思想:

如下圖。

下面再來看節點的變化對一致性hash的影響。

先看看經典配置,再詳細解釋。

upstream server_group
這個引數決定了多少次請求後端失敗後會暫停這個業務節點,不再給它發新的請求,預設值是1。此引數需要配合fail_timeout一起用。

題外話:如何定義失敗,有很多種型別,這裡因為主要處理http**,所以更關注proxy_next_upstream。

proxy_next_upstream:主要定義了當服務節點出現狀況時,會將請求發給其他節點,也就是定義了怎麼算作業務節點失敗。

決定了當nginx認定這個節點不可用時,暫停多久。不配置預設就是10s。

把上面兩個引數聯合起來考慮就是:當nginx發現傳送到這個節點上的請求失敗了3次的時候,就會把這個節點摘除,摘除時間是30s,30s後才會再次傳送請求到這個節點上。

類似於switch語句中的default,當主要節點都掛了的時候,會把請求打到這個backup節點。這是最後乙個救兵了。

由於nginx採用了反向**技術,對於請求的**有絕對的控制權,使得負載均衡變成了可能。

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

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

Nginx 負載均衡及相關策略

增加伺服器的數量,然後將請求分發到各個伺服器上,將原先請求集中到單個伺服器上的情況改為將請求分發到多個伺服器上,將負載分發到不同的伺服器,也就是我們所說的負載均衡。實現效果 準備工作 兩台tomcat 配置nginx nginx.conf 在server裡面加上 規則名字 測試 瀏覽器輸入 http...

nginx負載均衡及配置

實現伺服器集群主要就是為了負載均衡 load balance 有兩台或者以上的伺服器或者站點提供服務,服務將來自客戶端的請求,靠某種演算法,去盡量平分請求到集群的機器中,從而避免一台伺服器因為負載太高而出現故障,而即使其中某個機器出現故障,負載均衡會自動規避選擇,使得使用者也能正常訪問服務。好處 減...