我確信這是一個簡單的解決方案,我只是不太熟悉 DNS 的工作原理,或者與此問題相關。
如果我在亞馬遜 ec2 上執行分佈在多個實例上的 Web 服務,如何才能使用單一網域來存取整個伺服器池(這些伺服器池會不時變更)?
由於實例可能前一秒還存在,但下一秒就消失了(反之亦然),因此我需要一種方法來隨機選擇要路由到的叢集的活動成員。更新必須是即時的。有了 dns 快取等功能,這是否可能?
答案1
有幾種方法可以實現這一點,其中一些是您所能做到的。
對於您的情況,我建議只使用多個 DNS 記錄,並使用相對較短的 TTL。分佈不是最優的,客戶端可能不會選擇延遲最低的節點。然而,它非常簡單:您所需要做的就是能夠新增 DNS 記錄。這是一種廣泛使用和測試的技術。
如果您需要從池中刪除伺服器,只需刪除它的 DNS 記錄,大多數用戶端將在 TTL 過期後停止使用它。新伺服器也是如此:新增它們,在 TTL 到期時間之後客戶端將開始使用它們。
例如,谷歌將其用作平衡技術的一部分:
$ dig A google.com
;; QUESTION SECTION:
;google.com. IN A
;; ANSWER SECTION:
google.com. 297 IN A 74.125.77.99
google.com. 297 IN A 74.125.77.104
google.com. 297 IN A 74.125.77.147
谷歌對此進行了擴展,一旦您訪問了他們的網站,就會根據他們猜測您所在的國家/地區,將您重定向到離您較近(並以您的語言)託管的版本。您通常不需要的等級。
答案2
更新必須是即時的。有了 dns 快取等功能,這是否可能?
不,DNS 不可能做到這一點。DNS 記錄帶有生存時間 (TTL),它指定快取可以使用該記錄的時間量沒有向權威 DNS 伺服器進行檢查。由於各種原因,DNS TTL 不能有效地少於 10 分鐘。 DNS 迴圈是不是負載平衡的解決方案,至少在您需要服務正常運行時間時不是。請參閱解決此問題傑夫·阿特伍德提出的較舊問題。
你能使用將 DNS 循環與主動監控結合的第 3 方 DNS 服務的伺服器,並自動從 DNS 中刪除死伺服器。這不是一個好的解決方案,但對於不太重要的網站來說已經足夠了,而且使用 fx DNSMadeEasy 或 EdgeDirector 進行設定很簡單。
處理網路伺服器可用性的業界標準方法是第 4 層或第 7 層負載平衡器在網路伺服器前面。
亞馬遜 EC2 上的 Web 服務分佈在多個實例中,我如何使用單一網域名稱來存取整個伺服器池
亞馬遜為此提供了即插即用服務,稱為亞馬遜彈性負載平衡。基本上,它是 Amazon 的託管服務,它在 EC2 Web 伺服器前面設定第 7 層 (HTTP) 或第 4 層 (TCP) 負載平衡器。
另一個常見的選擇是使用 L7 負載平衡器設定 EC2 實例,例如 nginx、HAProxy、Apsis Pound、Apache 2.2、Zeus 負載平衡器或其他(有多種)。但如果你走這條路,你將需要自己管理作業系統+負載平衡軟體,並考慮如何讓EC2負載平衡器執行個體本身就具有足夠的高可用性。