具有健康檢查的 DNS 負載平衡

具有健康檢查的 DNS 負載平衡

我這裡有問題。

我們在來自雲端提供者的兩個不同雲端區域上設定了運算實例,我不會提及,只是想說使用起來很痛苦。

這些實例(顯然)使用的是私有的。

我們無法使用基於 VIP 的負載平衡解決方案,因為此雲端提供者不允許跨區域私有 IP,因此 NLB 不適用。

我們需要的是一台具有 A 記錄健康檢查功能的 DNS 伺服器(實際上,至少兩台)。讓我舉個例子:

  1. 服務:
  • 伺服器 A - 區域 1 - IP 10.1.1.100
  • 伺服器 B - 區域 2 - IP 172.26.1.100
  1. DNS 平衡器(共用相同的記錄和設定資料庫):
  • DNS A - 區域 1 - IP 10.1.1.50
  • DNS B - 區域 2 - IP 172.26.1.50
  • DNS 記錄 1:whatever.local - 10.1.1.50
  • DNS 記錄 2:whatever.local - 172.26.1.50
  1. 客戶:
  • 客戶端 A - 任何地區 - 任何 IP
  1. 場景一:
  • 用戶端 A 將 DNS A 和 DNS B 設定為 DNS 伺服器。
  • 客戶端A向DNS伺服器A請求whatever.local
  • 伺服器A離線
  • DNS 伺服器 A 具有後端運作狀況檢查並偵測到它並回覆伺服器 B 的 IP (172.26.1.50)
  • TTL 設定為 0(零)或同等低的值以避免快取。
  1. 場景B:
  • 用戶端 A 將 DNS A 和 DNS B 設定為 DNS 伺服器。
  • 用戶端 A 請求whatever.local,DNS 伺服器 A 已關閉,因此 DNS 伺服器 B 回复
  • 伺服器B離線
  • DNS 伺服器 B 具有後端健康檢查並偵測到它並回覆伺服器 A 的 IP (10.1.1.100)
  • TTL 設定為 0(零)或同等低的值以避免快取。

本質上:一個檢查 DNS 記錄 IP 健康狀況的 DNS 伺服器。

問候。

答案1

用戶端 A 將 DNS A 和 DNS B 設定為 DNS 伺服器。

嗯,如果一台機器使用配置了不同分割資料的多個 DNS 伺服器,您將走向一個痛苦的世界。您確實需要在監控主機上建立自己的解析堆疊以獲得可預測的行為。

監控該服務的方法是不分割DNS:

service.example.com.  CNAME region1_service.example.com.
service.example.com.  CNAME region2_service.example.com.
region1_service.example.com. A 10.1.1.50
region2_service.example.com. A 172.26.1.50

並監控以下各項:

  • service.example.com
  • Region1_service.example.com
  • Region2_service.example.com

或您的監控代理可能支援設定明確位址 - 這樣您就可以單獨監控每個實例。但是,您會遇到在兩個節點上標記中斷的複雜情況,這比在其中一個節點上標記中斷要嚴重得多。

您還應該檢查監控客戶端如何實​​施 rrDNS。遵守規則的故障轉移偵測時間約為 5 分鐘,但瀏覽器對初始連線套用約 10 秒的閾值,對後續請求套用 <1 秒的閾值。

答案2

最後有解決方案。這本質上就是 GSLB 所提供的,有很多商業的。

如果您想以一定的簡單性和開源方式做到這一點,您可以在 PowerDNS 叢集上使用具有 LUA 記錄的 PowerDNS。

相關內容