High-Availability

如何創建一組偵聽同一 IP 地址的伺服器,允許故障轉移/接管?

  • September 14, 2017

我想以穩健的方式部署 Web 應用程序。

應用程序本身是使用 Elixir 編寫的,它執行在 Erlang/OTP 之上,這意味著應用程序可以部署在不同的節點上,當其中一個節點由於某種原因出現故障時,這些節點可以內部管理故障轉移/接管。

但是,DNS 並不是為此而建構的:添加多個 A 記錄並不意味著當客戶端嘗試連接的伺服器沒有及時響應時,它們會嘗試其他伺服器之一。

然後很多人給出的答案是“使用負載均衡器”,這很好,但是負載均衡器本身就變成了單點故障。

幸運的是,我提到了邊界網關協議,它(如果我理解正確的話)允許多個伺服器監聽同一個 IP 地址,因此可以作為替代方案。我不知道(還)BGP是如何在內部工作的,如果你想使用它是否需要專用硬體,我也不知道。

所以我想做的是:

  • 在正常使用期間,流量應在兩台伺服器之間大致平均分配。
  • 當其中一台伺服器出現故障時,另一台應接管所有流量。

如果可以在伺服器位於較遠的地理位置(即不在同一棟建築物中)時對伺服器進行配置,以確保例如本地電源故障不會同時關閉兩台伺服器,那就太好了。我確實意識到 Erlang/OTP 和 BGP 都需要一些地理上的接近,因為網路延遲需要足夠低才能使這些技術正常工作。

所以我的問題:

  1. 這可能嗎?如果是這樣,怎麼做?
  2. 您是否需要專用硬體(如特殊路由器)來完成這項工作,或者這是否也可以在兩台伺服器是不同提供商(地理上接近)的 VPS(虛擬專用伺服器)的環境中工作?

代替 BGP 使用 haproxy(負載平衡器)與 keepalived VRRP 解決方案(解決 VIP - 虛擬 IP)的組合。有一個簡單的方法:

dasunhegoda.com/how-to-setup-haproxy-with-keepalived/833/

或者甚至可能來自 RH 文件的更好範例:

access.redhat.com/documentation/en-us/red_hat_ceph_storage/1.3/html/object_gateway_guide_for_red_hat_enterprise_linux/haproxy_keepalived_configuration

並且不要忘記設置核心參數:

net.ipv4.ip_nonlocal_bind=1

在 haproxy 節點上,因此兩者都可以綁定 VIP。

對於 haproxy,您可以搜尋其他更符合您需求的解決方案。

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