Load-Balancing
負載均衡器以靜默方式處理伺服器錯誤
我正在尋找一個可以靜默處理伺服器錯誤的 HTTP 負載平衡器。我想要的是對每個請求進行負載平衡,以便在最壞的情況下有一點超時。
- 如果工作 Web 節點返回 HTTP 500 伺服器錯誤,負載均衡器將不得不重試另一個 Web 節點的請求。如果第二個節點確實返回另一個 500 錯誤,則對最後一個節點執行相同操作(我假設有 3 個節點)。如果最後一個節點返回 500 錯誤,則將其顯示給最終使用者。
- 如果伺服器節點超時(響應時間超過 1 或 2 秒),則必須將請求路由到另一台伺服器,客戶端應在 2 秒內收到良好的響應。
您可以使用HttpProxyModule(它是非常標準的模組,通常在 nginx 內部)來實現這樣的負載均衡器。
Nginx 是輕量級的、快速的並且有很多功能(你甚至可以在其中嵌入 lua 程式碼)。
您的案例的範例配置是
upstream backend { server 10.0.0.1; server 10.0.0.2; server 10.0.0.3; } server { listen 80; server_name _; location / { proxy_pass http://backend; proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; proxy_redirect off; proxy_buffering off; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
秘訣是proxy_next_upstream指令,它決定在什麼情況下請求將被傳輸到下一個伺服器。可能的值為:
- error — 在連接到伺服器、向其發送請求或讀取其響應時發生錯誤;
- timeout — 在與伺服器連接、傳輸請求或從伺服器讀取響應期間發生超時;
- invalid_header — 伺服器返回一個空的或不正確的答案;
- http_500 — 伺服器返回程式碼為 500 的答案
- http_502 — 伺服器返回程式碼為 502 的答案
- http_503 — 伺服器返回程式碼為 503 的答案
- http_504 — 伺服器返回程式碼為 504 的答案
- http_404 — 伺服器返回程式碼為 404 的答案
- off — 它禁止將請求傳輸到下一個伺服器