nginx 負載均衡

2021-09-07 12:42:28 字數 4619 閱讀 9881

負載均衡(load balancing)是一種計算機網路技術,用來在多個計算機(計算機集群)、網路連線、cpu、磁碟驅動器或其他資源中分配負載,以達到最佳化資源使用、最大化吞吐率、最小化響應時間、同時避免過載的目的。

使用帶有負載均衡的多個伺服器元件,取代單一的元件,可以通過冗餘提高可靠性。負載均衡服務通常是由專用軟體和硬體來完成。

負載均衡最重要的乙個應用是

利用多台伺服器提供單一服務

對於網際網路服務,負載均衡器通常是乙個軟體程式,這個程式偵聽乙個外部埠,網際網路使用者可以通過這個埠來訪問服務,而作為負載均衡器的軟體會將使用者的請求

**給後台內網伺服器

,內網伺服器將請求的響應返回給負載均衡器,負載均衡器再將響應傳送到使用者,這樣就向網際網路使用者隱藏了內網結構,阻止了使用者直接訪問後台(內網)伺服器,使得伺服器更加安全,可以阻止對核心網路棧和執行在其它埠服務的攻擊。

當所有後台伺服器出現故障時,有些負載均衡器會提供一些特殊的功能來處理這種情況。例如**請求到乙個備用的負載均衡器、顯示一條關於服務中斷的訊息等。負載均衡器使得 it 團隊可以顯著提高容錯能力。它可以自動提供大量的容量以處理任何應用程式流量的增加或減少。

upstream 負載均衡概要

配置示例,如下:

upstream test.net server }

upstream 是 nginx 的 http upstream 模組,這個模組通過乙個簡單的排程演算法來實現客戶端 ip 到後端伺服器的負載均衡。在上面的設定中,通過 upstream 指令指定了乙個負載均衡器的名稱

test.net。這個名稱可以任意指定

,在後面需要用到的地方直接呼叫即可。

upstream 支援的負載均衡演算法

nginx 的負載均衡模組目前支援 6 種排程演算法,下面進行分別介紹,其中後兩項屬於第三方排程演算法。

upstream 支援的狀態引數

在 http upstream 模組中,可以

通過 server 指令指定後端伺服器的 ip 位址和埠

,同時還可以設定每個後端伺服器在負載均衡排程中的狀態。常用的狀態有:

當負載排程演算法為 ip_hash 時,後端伺服器在負載均衡排程中的狀態

不能是 backup

。 配置 nginx 負載均衡

nginx 配置負載均衡

upstream

webservers

server }

注,upstream 是定義在 

server

之外的,不能定義在 

server

內部。定義好 upstream 之後,

用 proxy_pass 引用一下即可。

# curl web1.test.com # curl web2.test.com # curl web1.test.com # curl web2.test.com

注,大家可以不斷的重新整理瀏覽的內容,可以發現 web1 與 web2 是交替出現的,達到了負載均衡的效果。

檢視一下web訪問伺服器日誌

先修改一下,web 伺服器記錄日誌的格式。

注,大家可以看到,兩台伺服器日誌都記錄是 192.168.18.138 訪問的日誌,也說明了負載均衡配置成功。

配置 nginx 進行健康狀態檢查

利用 max_fails、fail_timeout 引數,控制異常情況,示例配置如下:

upstream

webservers

先停止 web1,進行測試:

# curl web2.test.com # curl web2.test.com # curl web2.test.com

注,大家可以看到,

現在只能訪問 web2

,再重新啟動 web1,再次訪問一下。

# curl web1.test.com # curl web2.test.com # curl web1.test.com # curl web2.test.com

ps:大家可以看到,現在又可以重新訪問,說明 nginx 的健康狀態查檢配置成功。但大家想一下,如果不幸的是所有伺服器都不能提供服務了怎麼辦,使用者開啟頁面就會出現出錯頁面,那麼會帶來使用者體驗的降低:

配置 backup 伺服器

備份伺服器配置:

server

index.html 檔案內容:

# cat index.html

負載均衡配置:

upstream

webservers

關閉 web 伺服器並進行測試:

# curl # curl # curl

注,大家可以看到,當所有伺服器都不能工作時,

就會啟動備份伺服器。

好了,backup 伺服器就配置到這裡,下面我們來配置 ip_hash 負載均衡。

配置 ip_hash 負載均衡

ip_hash:每個請求按訪問 ip 的 hash 結果分配,這樣來自同乙個 ip 的訪客固定訪問乙個後端伺服器,有效解決了動態網頁存在的 session 共享問題,電子商務**用的比較多。

# vim /etc/nginx/nginx.conf upstream webservers

注,當負載排程演算法為 ip_hash 時,後端伺服器在負載均衡排程中的狀態不能有 backup。

# service nginx reload nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful 重新載入 nginx: [確定]

測試一下:

# curl web2.test.com # curl web2.test.com # curl web2.test.com

注,大家可以看到,你不斷的重新整理頁面一直會顯示 web2,說明 ip_hash 負載均衡配置成功。

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...