Domain-Name-System

跨不同數據中心的多個 VPS 集的負載平衡/故障轉移

  • October 21, 2011

我知道已經問過這個問題的許多變體,但我仍然找不到滿足我需求的好答案。

我想要做的是設置幾個(至少 2 個)VPS來託管我的網路應用程序。我想提供一些負載平衡(使用 Varnish 很容易實現)和相對高的可用性——這是我的問題。

使用負載均衡器(我需要在其中一個 VPS 上託管)會引入單點故障,這幾乎與只有一台機器來提供內容一樣糟糕。

http://i.stack.imgur.com/lFafj.png

而且 AFAIK DNS 循環方法不僅對於負載平衡來說是個壞主意,而且不提供故障轉移機制。如果其中一台伺服器出現故障,某些人(具有記憶體的 DNS IP)仍會嘗試連接到不可用的伺服器。忘記短 TTL - 這不是正確的解決方案。

http://i.stack.imgur.com/mTLRf.png

需要考慮的一件非常重要的事情:我想讓我的 VPS 分佈在多個數據中心,所以如果一個數據中心的電力或 ISP 出現故障,網站不會關閉。

我能想到的唯一 2 個解決方案要麼依賴 dns 循環(如果伺服器出現故障,至少在恢復之前將內容提供給一定比例的使用者),或者在數據中心購買專用伺服器,為停電做好充分準備並配備有幾個網際網路連接(與租用甚至 10 個 VPS 相比,這非常昂貴)。

所以問題是: 在擁有多個負載平衡 VPS 的同時避免單點故障的正確方法是什麼?

請原諒圖片。它們只是我的意思的盡可能基本的例子。

筆記:

你願意花多少錢,我還沒有看到有人依賴 VPS 並且真的想把錢花在數據中心故障案例上。

關於你的圖紙:

當(且僅當)負載均衡器是單台機器時,第一個失敗是正確的,如果它是單個系統(如在由多個主機建構的系統中),則不再正確。

SPA(最短的答案):

非常簡短的回答:您需要獲得在所有位置都可用的服務 IP。並設置BGP路由。

稍長一點:通常這是通過使用 BGP 並在 2 個不同位置宣布 IP 來完成的。您可以將其設置為始終公佈 IP,但其中一個的優先級低於另一個。這樣,在正常情況下,您的流量將僅流向一個站點,如果該站點失敗,則 BGP 路由將被丟棄並且流量切換到仍然可用的 IP。

我們有一些與此類似的設置,典型的佈局是:

(每個位置):

  • 2個負載均衡器

這是 BGP 也執行並宣布其 IP 的地方。通常是 Quagga 和一些 IPVS 設置(我們使用 keepalived)

  • n處理負載的伺服器 (FE)

失敗案例:

  • 任何 1 個負載均衡器(在單個站點)失敗

    • 由keepalived處理,另一個LB將繼續它的工作
  • 任何n-kFE 失敗(k即在我們沒有遇到問題的情況下可能失敗的 FE 數量)

    • 由 LB 處理,檢查會將它們從中刪除,並且它們不會再收到任何流量
  • n-(k+1)FE 失敗(在單個站點)

    • 由 BGP 處理。我們將在太多 FE 失敗的站點上終止 LB 上的 BGP 會話。另一個位置接管
  • 單個站點的任何重大中斷

    • 由 BGP 處理,BGP 會話將被丟棄,其他位置跳轉

很抱歉,我現在沒有心情進一步了解手動執行此操作的細節。我的猜測是,通過租用負載均衡器服務,您會變得更好(並且更便宜),這將為您帶來魔力。我讀過亞馬遜提供了這些,但我不知道如果不使用其他基礎設施是否可以使用它們。

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