Nginx高階之負載均衡服務

2021-09-01 12:40:36 字數 3144 閱讀 1805

高階階段回顧:

nginx高階之靜態web資源服務

nginx高階之**服務

模型:

① gslb(全域性負載均衡), 特點: 節點龐大, 範圍廣

② slb(伺服器負載均衡), 特點: 範圍小, 實時性/響應性好

slb分為四層負載均衡和七層負載均衡, nginx是典型的七層負載均衡.

nginx的負載均衡:

測試nginx的負載均衡

要測試nginx的負載均衡功能需要兩台伺服器, 192.168.19.134和192.168.19.136

136伺服器提供三個server服務:

134伺服器提供負載均衡服務:

客戶端(瀏覽器)訪問:

預設的結果是在這3個服務埠之間輪詢

可以使用命令關閉其中某個埠, 模擬其中乙個服務掛掉的情況, 測試其他兩個服務還能否正常訪問.

命令如下:

iptables -i input -p tcp --dport 8082 -j drop   #關閉8082埠

iptables -i input -p tcp --dport 8082 -j accept #開啟8082埠

測試結果是8082埠的服務無法訪問, 而其他兩個服務正常訪問.

上面提到的upstream模組還有其他的配置項:

upstream [自定義的虛擬服務的名稱, 如上面我自定義的"testslb"] {

server [網域名稱的寫法www.example.com] weight=[權重值越大則訪問越多, 值為1/2/3/4/5/...];

server [網域名稱+埠的寫法www.example.com:8080];

server [socket的寫法unix:/tmp/...];

配置引數:

down

表示當前的server不參與負載均衡

backup

備份伺服器, 當其他服務沒有完全掛掉的情況下不使用該備份伺服器, 一旦全部掛掉, 則啟用該備份伺服器

max_fails

允許請求失敗的次數, 如: max_fails=1

fail_timeout

經過max_fails失敗後服務暫停的時間, 如: fail_timeout=10s

max_conns

限制最大的接收連線數(用於每台伺服器配置不統一的情況, 降低低配置伺服器的壓力)

進入134伺服器的.conf配置, 在upstream的每一台server後面加上對應的引數再測試

測試結果是只能訪問到8083埠, 利用上面的命令關閉8083埠, 測試能夠訪問到的是8082埠.

nginx的排程演算法

nginx的排程演算法預設是輪詢策略, 依次訪問.

排程演算法:

輪詢按照時間順序逐一分配到不同的後端伺服器

加權輪詢

weight值越大, 分配到的訪問機率就越大

ip_hash

每個請求按照訪問的ip的hash結果進行分配, 使得來自同乙個ip的固定訪問同乙個後端伺服器

least_conn

最少鏈結數, 當前哪個伺服器的連線數少就分發給哪個伺服器

url_hash

每個請求按照訪問的url的hash結果進行分配, 使得來自同乙個url的請求定向到同乙個後端伺服器

hash關鍵值

hash自定義的key

測試加權輪詢:

134伺服器的配置:

輪詢和加權輪詢都是基於請求來實現的, 這種輪詢有個缺點會導致使用者的cookie等資訊丟失, 可以採取ip_hash的排程演算法:

此時通過ip下的方問就只會固定乙個server

ip_hash的缺陷在於, 如果使用者在前端再走**的話, 此時nginx是無法獲取到使用者的真是ip的, 同時如果使用者訪問的後台是多台伺服器的話, 那麼會導致使用者的快取發生改變, 那麼資訊也將發生改變.

解決辦法: hash關鍵值/url_hash

url_hash跟hash關鍵值其實是同乙個道理, 配置語法如下:

systax: hash [key, 如$request_uri]

default: 無配置

context: upstream域

進入.conf檔案進行配置:

134伺服器:

136伺服器分別在code1/code2/code3裡面新增url1.html/url2.html/url3.html檔案, 用於區別訪問的路徑而已.

訪問: /url1.html, 此時只能定向訪問到server1下的url1.html, 

訪問: /url2.html, 此時只能定向訪問到server3下的url2.html,

訪問: /url3.html, 此時只能定向訪問到server2下的url3.html,

具體訪問哪台伺服器則根據url的hash計算結果進行分發的.

nginx之負載均衡

負載均衡 load balancing 是一種計算機網路技術,用來在多個計算機 計算機集群 網路連線 cpu 磁碟驅動器或其他資源中分配負載,以達到最佳化資源使用 最大化吞吐率 最小化響應時間 同時避免過載的目的。使用帶有負載均衡的多個伺服器元件,取代單一的元件,可以通過冗餘提高可靠性。負載均衡服務...

nginx之負載均衡

nginx常用來配置成服務的閘道器並通過反向 實現負載均衡。這裡記錄一下有關負載均衡的策略以及相關引數的配置。假設這是乙個基本的反向 配置 upstrean tomcats server 輪訓 輪訓是nginx預設的一種策略,當不進行其他配置時就會執行這種策略。對於上面的基本配置,當訪問www.to...

Nginx之負載均衡

按照網路模型osi nginx負載均衡 配置語法 upstream backend server 機器測試nginx負載均衡 upstream的常見用法 後端伺服器在負載均衡排程中的狀態 1down 當前server暫時不參與負載均衡 1backup 預留的備份伺服器 當正在使用的後端服務異常時,啟...