如何製作冗餘負載平衡器?

如何製作冗餘負載平衡器?

據我所知,負載平衡器的目的是平衡伺服器之間的負載並追蹤實例運行狀況等。如何設定冗餘負載平衡器? (負載平衡負載平衡器?)

我可以看到 DNS 健康檢查如何有用,但顯然存在重大延遲問題,不是嗎?

這是假設您沒有使用任何第三方服務,例如 AWS ELB 或類似服務。如果你只使用 Nginx 怎麼辦?

答案1

有幾種方法可以實現負載平衡器的 HA(高可用性)—或任何服務的 HA(高可用性)。假設您有兩台具有 IP 位址的電腦:

  • 192.168.100.101
  • 192.168.100.102

使用者連接到一個IP,所以你要做的就是將IP與特定的盒子分開——例如建立虛擬IP。該 IP 將為 192.168.100.100。

現在,您可以選擇 HA 服務,該服務將負責 IP 位址的自動故障轉移/故障復原。一些最簡單的 unix 服務是 (u)carp 和 keepalived,一些更複雜的服務例如 RedHat Cluster Suite 或 Pacemaker。

讓我們以 keepalived 為例 - 兩個 keepalived 服務 - 每個服務都在自己的機器上運行 - 並且它們一起通訊。這種通信通常稱為心跳。

|   VIP   |                           |         |
|  Box A  | ------v^-----------v^---- |  Box B  |
|   IP1   |                           |   IP2   |

如果一個 keepalived 停止回應(無論出於何種原因,服務停止,或盒子反彈或關閉) - 另一盒子上的 keepalived 將注意到丟失的心跳,並假定其他節點已死亡,並採取故障轉移操作。在我們的例子中,該操作將提出浮動 IP。

                                      |   VIP   |
    ------------------ -------------- |  Box B  |
                                      |   IP2   |

在這種情況下可能發生的最壞情況是客戶端會話遺失,但他們將能夠重新連線。如果您想避免這種情況,兩個負載平衡器必須能夠在它們之間同步會話數據,如果它們可以做到這一點,用戶將不會注意到任何事情,除了可能會中斷短暫的延遲。

這種設置的另一個陷阱是腦裂 - 當兩個盒子都在線但鏈接被切斷時,兩個盒子都使用相同的 IP。這通常可以透過某種防護機制(SCSI 預留、IPMI 重新啟動、智慧型 PDU 斷電等)或需要大多數叢集成員處於活動狀態才能啟動服務的奇數節點來解決。

|   VIP   |                           |   VIP   |
|  Box A  |                           |  Box B  |
|   IP1   |                           |   IP2   |

更複雜的叢集管理軟體(如 Pacemaker)可以移動整個服務(例如:在一個節點上停止它並在另一個節點上啟動它)——這就是資料庫等服務實現 HA 的方式。

另一種可能的方法 - 如果您要控制負載平衡器附近的路由器,則可以使用 ECMP。此方法還使您能夠水平擴展負載平衡器。這是透過您的兩個盒子中的每一個與您的路由器進行 BGP 通訊來實現的。每個盒子都必須通告虛擬 IP (192.168.100.100),路由器將透過 ECMP 負載平衡流量。如果一台機器當機,它將停止通告 VIP,這反過來又會阻止路由器向其發送流量。在此設定中您唯一需要注意的是,如果負載平衡器本身失效,請停止通告 IP。

答案2

使用 Nginx 作為負載平衡器應該允許您透過更改配置來檢測無響應逾時來遵循本文中詳細介紹的重定向:

nginx自動故障轉移負載平衡

理論上,如果您有一個 HA 環境,叢集的多個負載平衡器應該允許在其中一個發生故障時維持服務。

希望這可以幫助。

答案3

硬體負載平衡器多年來一直支援「主動/被動」或「主動/主動」設置,在這兩種情況下,它們都是從第1/2 層角度並行設置的...主動/被動使用如上所述的監控/保活機制,主動/主動可以透過多種方式實現。為了在前端顯示為單一 IP,兩個或多個平衡器可能(只要它們全部/都在線)會執行以下操作:

  • 當客戶端位於同一網路時,根據來源 MAC 或 IP 位址選擇性應答對共用 IP 的 ARP 請求
  • 相互協商誰處理給定的新 TCP 連線的流量
  • 讓重複或錯誤的第 3-7 層流量肆意發生,並依靠客戶端/路由器 TCP 堆疊來解決它

然後,當與合作夥伴設備的通訊遺失時,將其模式變更為接受所有或更多流量。

在後端:

  • 在正常操作中,每個平衡器可能僅使用給定的應用程式伺服器子池
  • 或者,這裡也可能簡單地產生重複的請求...
  • 或者,平衡者之間可以進行協商

相關內容