故障轉移群集客戶端訪問點僅響應所有者節點上的 Ping
背景
我們在安裝了 SQL Server 的 Azure 上執行兩個 VM(Windows Server 2012 R2),設置為可用性組。當然,我們還有另一個 VM 作為專用 DC。這些都通過單個虛擬網路連接。這個設置對我們來說效果很好,我能夠從我的本地物理機器連接到 SQL,沒有任何問題,但隨後賬戶達到了支出限制,它取消了所有配置。我們取消了限制,我再次使用相同的 VHD 分配了所有伺服器,所有設置(大概)都恢復了,但我不再能夠訪問 SQL Server。
名稱定義
為了更好地解釋這一點,我們將呼叫這兩個節點 SQL1 和 SQL2、可用性組 SQL-AG、可用性組偵聽器 SQL-Listener 以及這一切都在執行的雲服務(設置了適當的端點上)SQL-CloudService。SQL1 是故障轉移集群角色的所有者(相應地,具有主副本角色),SQL2 是輔助集群。
設想
我能夠對兩台伺服器進行 RDP,並使用 SQL1 中的 SSMS 並連接到 SQL-Listener,並查看 SQL-AG 儀表板,該儀表板報告一切正常且同步。
在 SQL2 上,我無法連接到 SQL-Listener。我也無法從我的本地電腦連接到 SQL-CloudService,這在以前也可以工作。兩個系統都返回錯誤,
無法連接到 SQL 偵聽器。
建立與 SQL Server 的連接時發生與網路相關或特定於實例的錯誤。伺服器未找到或無法訪問。驗證實例名稱是否正確以及 SQL Server 是否配置為允許遠端連接。(提供程序:命名管道提供程序,錯誤:40 - 無法打開與 SQL Server 的連接)(Microsoft SQL Server,錯誤:53)
找不到網路路徑
當我繼續 SQL1 並通過 SSMS 連接時,我可以告訴 SQL-AG 故障轉移到 SQL2。它成功地做到了這一點。但是,在這樣做之後,我不再能夠從 SQL1 連接到 SQL-Listener,但我來自 SQL2。
長話短說,我只能從標有主副本角色的系統將 SSMS 連接到可用性組偵聽器。
真正的問題
我真的不需要能夠完成所有這些操作,但我確實需要能夠通過 Internet 從本地電腦訪問 SQL Server,並且我假設這些問題是由相同的潛在問題引起的因為他們給出了相同的錯誤資訊。
我一路上發現的東西
考慮到錯誤消息和情況,這並不奇怪,但我無法 ping SQL-Listener,除非它在我啟動 ping 的機器上執行。當 SQL1 被標記為 Primary 時,我可以從 SQL1 毫無問題地 ping 它,但是當我嘗試從 SQL2 時,它成功地使用 DNS 查找 IP,但返回“回復來自
$$ SQL2’s IP $$:目標主機無法訪問。”當我故障轉移 SQL-AG 時,同樣的問題發生在另一個方向。但是,我總是能夠從 SQL2 ping SQL1,反之亦然。因此,我傾向於相信它故障轉移集群問題,而不是 SQL 問題。因此,這個問題的標題。 我還發現防火牆似乎沒有受到影響。我想說,這與 ping 問題是一致的,但是在防火牆上的監視顯示沒有任何遠端機器(我的本地機器或非擁有 VM)嘗試 SQL Server。
從我已經說過的內容中可以推斷出,但似乎值得注意的是,即使通過雲服務,我也無法通過埠 1433 接觸防火牆。我不完全確定為什麼會這樣,因為直接-to-server 路由,我認為應該將它直接推送到伺服器。因此,我希望日誌中有一個項目代表這一點,但是有很多項目,但沒有一個是那樣的。
毫不奇怪,考慮到 ping 問題,我還能夠
http://sql-listener/ReportServer
在所有者節點上本地訪問報表伺服器 URL(類似於 ),但不能從另一個遠端訪問。如果我指定電腦的名稱(SQL1 或 SQL2,與 SQL-Listener 相比),我可以從另一個連接到 SQL Server。無論如何,這讓我感到很陌生,我似乎無法通過雲服務。我認為這意味著它正在監聽它應該在的任何地方,並且鑑於我不必告訴 Azure 指向 SQL-Listener,我不希望這會產生任何影響。所以也許我只是把整個情況看錯了。
我已採取的故障排除步驟
- 重啟所有相關機器
- 確保所有 IP 都是靜態的,並且是我們期望的
- 確保防火牆設置正確
- 關閉每個 SQL 伺服器(在 Azure 上,這會取消分配 VM,因此比重新啟動要嚴重得多)並再次啟動它們。
- 刪除並重新創建故障轉移群集角色的客戶端訪問點(以及可用性組偵聽器)
- 重新創建雲服務端點(儘管這似乎不再有任何幫助,因為那是在我知道伺服器之間存在問題之前)
- 嘗試使用明確聲明的 IP 地址連接到伺服器(“tcp:$$ SQL-Listener’s IP $$”)。這會返回一個與網路相關/實例特定的錯誤,說“連接嘗試失敗,因為連接方在一段時間後沒有正確響應,或者建立連接失敗,因為連接的主機沒有響應。”
我有過的想法
- 這可能與子網有關嗎?他們肯定似乎在同一個,但我可以想像這會導致一些奇怪的問題。
- 有沒有人知道 Azure 在關閉伺服器以超出支出限制時所做的任何事情?是否只有一個設置發生了我沒有註意到的更改?
因此,正如預期的那樣,這是一個非常愚蠢的錯誤。我忘記了設置可用性組以使用 Azure 所需的所有步驟,如此處所述。
由於雲服務的解除分配改變了它的 IP,SQL-Listener 監聽了錯誤的 IP 地址。我曾考慮過這一點並通過刪除和重新創建監聽器來解決它,但我完全忽略了我尷尬地首先親自執行設置監聽器的所有步驟。因此,在與 Microsoft 支持人員通了一個小時的電話後,我們終於重新設置好了一切。現在一切都恢復正常了。