High-Availability

高可用性如何工作?

  • February 23, 2016

我不明白如何為我非常簡單的場景設置故障轉移。我正在為 API 建構服務網關。我想要的是兩台伺服器託管在不同的數據中心. 而且我只是希望即使其中一台伺服器停機,使用者也能夠訪問該服務。數據庫同步沒有問題,我只關心服務的可用性。

我該如何做到這一點,同時防止使用者最終實現任何類型的故障轉移邏輯?我希望為使用者提供單個域或單個 IP 地址,並且能夠始終使用這個單一端點訪問服務。

我不明白這是如何實現的。我知道我可以設置一個網路節點,它將請求轉發到第一台或第二台伺服器,具體取決於這兩個伺服器中的哪一個目前線上。但是,我看不到此設置如何解決 HA 問題,因為我們剛剛向系統引入了單點故障 - 轉發節點。因此,如果此節點出現故障,則服務不可用。

您能否解釋一下如何在現實世界中實現這一點?是否有可能以合理的成本實現這一目標~~(即不超過託管伺服器本身的成本)~~.

**編輯:**有人建議不同的數據中心要求是昂貴的。因此,請隨時為 1 個數據中心內的 2 台伺服器提供建議。

**編輯 2:**請隨意提及該設置的合理成本。

它的工作原理很簡單。第一條規則是你必須擁有不止一次的東西。為簡單起見,我將在一個數據中心中設置它,並使用該 DC 擁有的 IP 地址(您可以使用自己的 IP 地址和多個數據中心進行設置,但我們正在討論一些多宿主 AS 的東西、BGP 和其他一些不是如此便宜且易於實施)。

您將需要至少有 4 台伺服器(您可以只使用兩台,但這不是一個好方法)。2個用於應用程序和2個用於負載平衡,每個伺服器具有多個網卡。

基本設置是這樣的:

      /---\     /------\     /----------\
      | S |-----| LB 1 |-----| SERVER 1 |
--NET--| W |     \------/\   /\----------/
      | I |              \_/
      | T |              / \
--NET--| C |     /------\/   \/----------\
      | H |-----| LB 2 |-----| SERVER 2 |
      \---/     \------/     \----------/

您的 DC 提供了兩條單獨的線路來連接網路。這兩條線都在同一個 VLAN 中,並且都連接到交換機(最好的方法是 2 個交換機)。2 個負載均衡器連接到這些交換機並共享一個虛擬 IP。可以在這兩台機器之間流動的是IP。您可以使用 VRRP 和 keepalived 來很好地實現這一點。

在這兩個負載均衡器後面,放置了兩個鏡像伺服器。魔法來了:

  1. 您將您的 DNS 記錄指向該虛擬 IP
  2. 當有人訪問您的應用程序時,它將通過一個 LB 並在一台伺服器上結束
  3. 當一台伺服器當機時,負載均衡器會通過類似 healthcheck 的方式註意到它並禁用該伺服器。每個新請求都將發送到健康伺服器。
  4. 當一個負載均衡器死掉時,keepalived 會注意到它(再次通過一些健康檢查)並將浮動 IP 移動到健康負載均衡器,沒有人會注意到它。

您應該知道 HA 是一種昂貴的方式,而且您不能在低預算的情況下做到這一點。您需要計算服務中斷是否比 HA 成本更便宜,有時確實如此。

您應該查看關鍵字 vrrp、keepalived 和 haproxy,了解一些想法和思考方式。

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