Nginx負載均衡詳解

2021-10-06 00:15:27 字數 3367 閱讀 5392

下面將介紹nginx開源版內建的4種負載均衡策略和2種三方負載均衡策略,他們分別是

本文只是展示了部分nginx實現負載均衡時可以使用的策略模組,另外在nginx商業版中還存在其他內建的策略模組。負載均衡的三方策略可以在三方模組列表這裡找到。

輪詢

nginx將所有請求均勻的分給集群中的每台伺服器。

upstream test 

server

}

upstream:定義乙個服務集群。

proxy_pass: 將匹配的請求****到proxy_pass後面配置的服務上,這裡因為需要配置負載均衡,所以這裡http://後面必須要跟上upstream定義的服務集群。

注意:upstream定義服務集群時,配置的服務位址只能是網域名稱+埠或者ip+埠,不能帶有協議和路徑,否則nginx會報nginx: [emerg] invalid host in upstream這個錯誤資訊。

加權(weight)

upstream test
前面兩次請求都會**到127.0.0.1:7001這個服務,後面一次請求會**到150.109.118.85:7001這個服務,再後面兩次**到127.0.0.1:7001,。。。

最少連線數

檔案位置:src/http/modules/ngx_http_upstream_least_conn_module.c

nginx請求分配給active_connection/weight最小的伺服器。

upstream test
ip_hash

檔案位置:src/http/modules/ngx_http_upstream_ip_hash_module.c

根據使用者的ip,計算出乙個hash值,如果負載均衡快取中有這個hash對應的伺服器,那就直接**到對應的伺服器上。

upstream test
nginx使用ip_hash策略後,只要使用者電腦的ip不變化,就會始終請求同一臺業務服務。

應用場景:在實現檔案上傳功能時,要實現乙個大檔案上傳,往往會將這個大檔案分成多個片段,然後上傳到伺服器,如果使用前面給的策略,就會出現同乙個檔案的分片被上傳到不同伺服器,導致檔案合併失敗,不能達到預期效果。nginx使用ip_hash策略後,客戶端只要上傳了當前檔案的乙個片段,後續檔案片段上傳的時候,nginx通過計算ip的hash,自動把請求**到hash對應的伺服器。

hash

檔案位置:src/http/modules/ngx_http_upstream_hash_module.c

可以進行hash計算的有remote_addr(客戶端ip)(從測試結果上面看感覺可以直接替換掉ip_hash)、request_uri(請求uri)、args(請求引數),下面主要以request_uri的使用作為展示,其他兩個使用都類似。

根據請求的uri計算出乙個hash值,然後將該請求**到一台伺服器上面,後續請求通過hash計算後,如果有相同的hash,那麼就會將該請求**到該hash對應的伺服器。

如果集群中某台伺服器宕機之後會出現什麼情況:假設r1命中a伺服器;r2命中b伺服器。當a伺服器宕機,之前通過r1計算出來的hash與a伺服器的對應情況會失效,r1將重新分配給b伺服器。後續a伺服器恢復正常後,r1還是會分配給b伺服器。

upstream test
consistent_hash

upstream test
fair

upstream test
測試中得出效果和輪詢預設情況效果一樣,暫時沒有找到問題在哪。。。

負載均衡相關引數

down

標識down的伺服器暫時不支援資源請求。

upstream test
上面負載均衡的例子中,因為127.0.0.1:7001標識為down,所以不會有請求**到這個服務,所有的請求都會**到150.109.118.85:7001這個服務。

weight

集群中服務的權重值,預設是1。在只有weight這乙個影響條件下,且集群中服務都正常,nginx會將更多的請求**到weight更大的服務。

upstream test
這個集群中127服務和150服務各處理的請求比例為2:1。

max_fails

允許服務處理請求時服務出錯的次數,預設為1。當服務處理請求發生錯誤的次數超過max_fails時,後面的請求暫時不會**到這台發生錯誤的服務。

upstream test
fail_timeout

當服務處理請求發生錯誤的次數超過max_fails以後,nginx會暫時禁止將請求**到這個服務。當過去fail_timeout設定的時間以後,nginx會嘗試將請求**到剛才被禁止的服務,如果服務正常,那麼後續的請求可以繼續**到這台服務,如果服務錯誤,那麼繼續等待fail_timeout時間後再來檢測。fail_timeout預設時間是10s。

upstream test
backup

備用伺服器,當所有非backup服務發生錯誤被停用或者設定為down時,nginx會啟用標識為backup的服務。

upstream test
max_conns

這個功能存在於nginx商業版。同一服務同時處理請求的個數。防止服務因處理請求過多,伺服器效能不足,發生宕機的情況。

upstream test
slow_start

這個功能存在於nginx商業版。當集群中錯誤服務等待fail_timeout時間後,nginx檢測到這個服務能夠正常使用後,再等待slow_start時間後,才正式使用這個服務。linux就該這麼學

upstream test

Nginx負載均衡詳解 四

負載均衡是一項基本的網路服務,主要為了解決業務併發壓力,增強網路處理能力,減輕單個裝置的資源壓力,提供整體服務的效能。nginx使用反向 來實現負載均衡,用到了proxy pass 模組,將客戶端的請求 到一組虛擬的服務資源池中。nginx負載均衡與反向 主要的區別是,反向 是將請求 到指定的服務中...

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

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

Nginx負載均衡配置例項詳解

負載均衡是我們大流量 要做的乙個東西,下面我來給大家介紹在nginx伺服器上進行負載均衡配置方法,希望對有需要的同學有所幫助哦。負載均衡 先來簡單了解一下什麼是負載均衡,單從字面上的意思來理解就可以解釋n臺伺服器平均分擔負載,不會因為某台伺服器負載高宕機而某台伺服器閒置的情況。那麼負載均衡的前提就是...