使用 RegisterAllProvidersIP 1 的多子網故障轉移
我正在使用 2 節點 SQL AG (2014 EE)(每個節點位於不同的子網),並且偵聽器配置有 2 個靜態 IP。客戶端應用程序使用 SQL Native Client 11.4。我的理解是這個驅動程序是遺留的,因此不應該支持 RegisterAllProvidersIP 為 1 和預設 HostRecordTTL(20 分鐘)的故障轉移。雖然當 RegsiterAllProvidersIP 為 0 且 TTL 為 20 分鐘時我無法進行故障轉移(當 TTL 降低到 2 分鐘時我能夠做到),但應用程序成功地進行了故障轉移,並將 RegisterAllProvidersIP 設置為 1。根據此處的部落格,https: //blogs.msdn.microsoft.com/alwaysonpro/2014/06/03/connection-timeouts-in-multi-subnet-availability-group/ 建議將 RegisterAllProvidersIP 設置為 0 並將 HostRecordTTL 設置為 2 分鐘以實現故障轉移,但在我的情況下,我發現不需要它,因為我可以將 RegisterAllProvidersIP 設置為 1 進行故障轉移。我是否完全錯過了推薦設置的要點MS 部落格或我的多子網設置有什麼問題嗎?
我們正在使用 SQLNCLI11 的 OLEDB 風格,它不支持開箱即用的多子網故障轉移。
Microsoft 已棄用本機客戶端,但他們發布了新的 OLE DB 驅動程序,該驅動程序支持所有本機客戶端功能,並添加了 MultiSubnetFailover 和 TLS1.2 支持。請參閱此處的公告。可能值得考慮升級 OLE DB 以利用。
我的理解是這個驅動程序是遺留的,因此不應該支持 RegisterAllProvidersIP 為 1 和預設 HostRecordTTL(20 分鐘)的故障轉移。雖然當 RegsiterAllProvidersIP 為 0 且 TTL 為 20 分鐘時我無法進行故障轉移(當 TTL 降低到 2 分鐘時我能夠做到),但應用程序成功地進行了故障轉移,並將 RegisterAllProvidersIP 設置為 1。
使用 RegisterAllProvidersIP = 0 和 TTL = 20 組合,您需要在故障轉移後等待長達 20 分鐘,以便在 DNS 中註冊新的偵聽器 IP 並由您的客戶端獲取。從技術上講,它仍然在“工作”,只是速度很慢。
根據這裡的部落格, https: //blogs.msdn.microsoft.com/alwaysonpro/2014/06/03/connection-timeouts-in-multi-subnet-availability-group/ 建議將RegisterAllProvidersIP設置為0和HostRecordTTL到 2 分鐘來實現故障轉移,但在我的情況下,我發現它不需要,因為我可以將 RegisterAllProvidersIP 設置為 1 進行故障轉移。我完全錯過了 MS 部落格中推薦的設置點還是我的多子網設置有任何問題?
- 您如何測試以驗證故障轉移是否有效?
- 你的連接超時是多少?
當 RegisterAllProvidersIP 設置為 1 時,本機客戶端將嘗試連接到 DNS 串列返回的每個 IP 地址。如果 DNS 返回的第一個 IP 是它連接的正確 IP,如果不是,則需要約 20 秒超時,然後等待約 20 秒,然後嘗試下一個 IP。
這意味著如果您的連接超時大於約 40 秒,您很可能會看到有問題的行為,但高連接超時值會掩蓋它。
無論哪種方式,真正的解決方法是開始使用 MultiSubnetFailover 以充分利用 RegisterAllProvidersIP=1 提供的快速故障轉移功能。如果您不想升級 OLE DB 驅動程序,則應為偵聽器 DNS 條目設置較低的 TTL 並設置 RegisterAllProvidersIP=0。現在它設置為 1 可能對您有用,但是您的環境中的條件可能會發生變化並導致它突然停止工作。