Nginx

沒有負載平衡的 nginx 故障轉移

  • July 5, 2019

我在配置 nginx 時遇到問題。

我使用 nignx 作為反向代理。我想將所有請求發送到我的第一台伺服器。如果第一台伺服器關閉,我想向第二台伺服器發送請求。

簡而言之,如何在沒有負載平衡的情況下擁有故障轉移解決方案?

您想要的是主動+被動設置。這是一個範例 nginx conf 片段,可以幫助您進行操作:

upstream backend {
   server 1.2.3.4:80 fail_timeout=5s max_fails=3;
   server 4.5.6.7:80 backup;
}

server {
   listen 80;
   server_name whatevs.com;

   location / {
       proxy_pass http://backend;
   }
}

因此,“通常”,所有請求都將轉到主機 1.2.3.4。如果我們在那個盒子上遇到三個失敗,那麼 4.5.6.7 將接管。

擴展 chrskly 的答案,您可能需要配置 3 個標誌/配置。

  1. fail_timeout:失敗嘗試的總時間,並將伺服器在同一時間標記為 DOWN。如果 5 秒,則將在 5 秒內嘗試max_fail嘗試,如果仍然失敗,則將該伺服器標記為 DOWN 5 秒。
  2. max_fail : 最大嘗試次數
  3. proxy_connect_timeout:等待連接的時間。

在下面的 GRPC 範例中,如果主伺服器在 7 秒內無法連接,則切換到備份並將主伺服器標記為關閉 6000 秒:

upstream grpcservers {
   server 192.168.0.XX:9997 fail_timeout=6000s max_fails=1;  # After 1 fail in 6000s, Main server is marked unavailable for 6000s.
   server 192.168.0.XX:9999 backup;
       } 
location / {
           grpc_pass grpc://grpcservers;
           grpc_connect_timeout 7s;  # If conn cant be made in 7sec, switch to backup
       }

引用自:https://serverfault.com/questions/480241