4

我最近開始閱讀並玩弄AWS。我對可以使用該平臺實現的不同高可用性體系結構特別感興趣。具體來說,我正在尋找可靠的窮人的解決方案,可以使用服務器的最低金額實施。AWS替代DNS故障轉移?

到目前爲止,我很滿意爲主要HA關切的辦法:負載均衡,冗餘,自動恢復,可擴展性...

唯一的癥結點我是故障解決方案。

使用ELB可能看起來不錯,但是ELB實際上使用DNS平衡。見Is AWS's Elastic Load Balancer a single point of failure?。同樣來自Netflix的博客文章:Lessons Netflix Learned from the AWS Outage

這是因爲ELB是雙層負載均衡方案。第一層由基於DNS的循環負載平衡組成。這會將客戶端獲取到ELB配置爲使用的其中一個區域中的雲中的ELB端點。

現在,我已經瞭解到DNS故障轉移不是一個理想的解決方案,正如其他人指出的,主要是因爲DNS緩存不可預知。參見例如:Why is DNS failover not recommended?

除了ELBs,在我看來,大多數AWS HA架構中使用路由53

最後,浮動IP /彈性IP(EIP)戰略在極少數的彈起依賴於DNS故障轉移文章,例如Leveraging Multiple IP Addresses for Virtual IP Address Fail-over,我很難弄清楚這是否是生產系統的可行解決方案。另外,我遇​​到的所有示例都使用一組主動 - 被動實例來實現此功能。對於每一個積極的人來說,實現這一目標似乎是一種浪費。

鑑於此,我想問問什麼是更快更可靠的故障切換方式?

更具體地,請討論如何在不使用DNS以下2對設置進行失效切換

  1. 2主動 - 主動EC2實例在單獨的AZS。主動 - 主動,因爲這是一個預算安排,我們是否無法負擔一個實例。

  2. 1 ELB在區域A中有2個EC2實例,1個ELB在區域B中有2個EC2實例。同樣,兩個區域都是活動的並提供流量。你如何處理從1個ELB到另一個的故障轉移?

回答

2

如果你是好奇型的人,就會更好地理解ELB,就像我一樣。

「1」在2個可用區域中配置的ELB被計爲1,但被部署爲2.有2個IP地址分配,每個平衡器一個,自動創建2個A記錄,每個記錄一個,TTL很短。

這兩個平衡器中的每一個都會將流量轉發到其同一個AZ中的實例,或者您可以啓用跨域負載均衡(如果在每個AZ中只有一個服務器實例,則應該這樣做)。

這些IP地址並沒有經常變化,儘管ELB像其他任何東西一樣失敗了,但我可能有30個,並且從未故意在我手上弄過一個,大概是因爲ELB基礎設施將取代死了的實例,並更改了DNS,而無需您的干預。

對於2個地區,除了在的某些級別使用DNS之外,您別無選擇。基於延遲的Route 53路由可以在正常運行中將人員送到最近的站點,並且在整個區域發生故障時(如Route 53運行狀況檢查所檢測到的)將所有流量路由到另一個站點,但是這是有點當整個區域不可用時更可能遇到DNS緩存問題。

當然,使用Elastic IP的單個區域中的主動/被動困境的一部分很容易在兩個應用服務器上用HAProxy修復。它是一個http請求路由器和ELB等負載均衡器,但具有更廣泛的功能。代碼非常緊湊,您可以在可忽略的CPU消耗的情況下在您的應用服務器上運行代碼。然後,EIP實例將平衡本地應用服務器和對等設備之間的流量。在各地區,ELB後面的HAProxy可以將流量轉發到遠程地區的隊友,如果本地區域已啓動,但由於某種原因,應用程序無法爲本地區域提供請求。 (我使用這樣的設置來增加外部服務的可用性,當來自本地區域的直接Internet路徑不起作用時,通過向遠程AWS區域彈出請求)。

+0

我應該瞭解,根據您的體驗,DNS緩存問題從來不是一個足以重新考慮使用ELB的重要因素? –

+0

我喜歡這兩個應用程序都處於活動狀態時主動/被動HAProxy的想法。如果完美的故障轉移是目標,那麼這種設置不會被ELB所青睞嗎? –

+0

回覆:DNS緩存,這是正確的。 –