A 記錄上具有多個 IP 的私人 DNS Azure 無法正常運作,正如我預期的那樣

A 記錄上具有多個 IP 的私人 DNS Azure 無法正常運作,正如我預期的那樣

我希望你能幫忙。提前致謝。

我在 Azure 上有一個 Azure 私人 DNS,它連接到 2 個區域中的 4 個 Vnet。我讀到我可以將 2 個 IP 放入單一 A 記錄中(例如 A 記錄名稱 sql.midomain.local IP1 192.168.1.1 / 192.168.2.1)。

我預計如果 VM IP1 關閉,客戶端可以解析為 IP2,但這並沒有發生。當我對“sql.domain.local”執行 ping 操作時,它始終解析為 IP1,儘管該虛擬機器已關閉。

我需要這個,因為如果區域1 中的實例SQL1 關閉,客戶端仍然連接到區域2 中的複製虛擬機,我需要更多彈性。 IP 放在上面我的 SQL 使用外部負載平衡。

有什麼想法我怎麼能達到這個目標?

PD:重要的是要知道所有 Vnet 都可以透過 Vnet 對等互連相互連接。我可以存取任何虛擬網路中的任何虛擬機器。

答案1

我讀到可以將 2 個 IP 放入一筆 A 記錄中

不,您可以建立多個具有相同名稱和不同值的 A(或 CNAME、TXT、MX)記錄。

我預計如果 VM IP1 關閉,客戶端可以解析為 IP2,但這並沒有發生。當我對“sql.domain.local”執行 ping 操作時,它始終解析為 IP1,儘管該虛擬機器已關閉

當給定名稱提供多個位址時,客戶端應該依次嘗試它們。這在RFC 1794。 Ping 是一種低階診斷工具;我需要做一些重要的研究來確定他在這裡的行為是故意的、不合時宜的還是只是有缺陷的。

瀏覽器的工作方式非常不同 - 循環 DNS (rrDNS) 是支援 HTTP[s] 服務高可用性的非常有效的工具。但那是因為他們實作故障檢測很多比其他 TCP 用戶端更短的逾時(<1 秒)。大多數作業系統上的預設 TCP 配置的故障偵測逾時為 5 分鐘或更長。這也預先假設 TCP 用戶端正確符合 RFC 標準。根據我的經驗,Java(或可能是在 Java 之上運行的應用程式程式碼)無法如預期般處理 DNS 解析。

為外部客戶端提供 HA 存取的昂貴的替代方案是透過 TCP 多路徑。使用 2 個不同提供者的 IME,故障轉移偵測/切換至少需要 3 分鐘,有時根本不會發生。

雖然它是為外部客戶端提供高可用性的一個很好的解決方案,但我不會使用 rrDNS 作為為給定基礎設施內的節點之間的連接提供高可用性的手段。

但我不想在我的 SQL 上放置公用 IP 來使用外部負載平衡

不要在公共地址上公開您的 DBMS 伺服器是明智的。這並不意味著您無法以其他方式連接它們。事實上,如果您的 DBMS 上有事務數據,那麼您真的,真的需要能夠保證資料庫節點之間的通訊。如果這可以透過 vnet 對等互連獲得,並且您的應用程式不支援固有的 HA 用戶端功能,請查看 haproxy 或 ProxySQL。

OTOH,您可能會發現您的應用程式對應用程式伺服器和 DBMS 之間的延遲有些敏感(例如,如果使用簡單的 ORM)。在這種情況下,允許位置“A”中的應用程式伺服器連接到位置“B”中的DBMS 將是不可取的- 這裡rrDNS 到隔離堆疊可以部分解決問題,但您還需要考慮會話管理和數據複製故障轉移/故障復原。

答案2

當我對“sql.domain.local”執行 ping 操作時,它始終解析為 IP1,儘管該虛擬機器已關閉。

這是很自然的,因為作業系統會在 DNS 伺服器指定的 TTL 時間內快取解析的 IP 位址。

DNS 有一個循環機制,每次用戶端直接從該伺服器請求時都會輪換答案,但它並不是為像您這樣的故障轉移場景而設計的。我不知道你的環境,但一般來說我會建議使用反向代理。

相關內容