Q1 : Multi-Subnet Failover Cluster 的 Listener 在 DNS 是一個 IP?
在 Multi-Subnet Failover Cluster ,WSFC 的 Cluster 在 DNS 只會有一筆 A record,即是 Owner node 的虛擬 IP
從容錯移轉叢集管理員可以看到,Owner node 的虛擬 IP 是上線,另一個 node 的虛擬 IP 是離線。
在 DNS 可以看到叢集名稱只有一個 IP 即是 Owner node 的虛擬 IP
當叢集核心資源移轉到另一個 node,DNS 叢集名稱對應的 IP 也會更換。
那麼在 Multi-Subnet Failover Cluster,Listener 的虛擬 IP 在 DNS 也是一個 IP?答案是多個 IP
從容錯移轉叢集管理員看到,Listener 虛擬 IP 在 Owner node 只會有一個虛擬 IP 上線
測試從一台沒有加入網域的主機 ping DNS Listener,只會回傳一個 IP,是在 Owner node 網段的虛擬 IP
移動可用性群組的叢集角色到另一個 node
Q2 : 從網域外的主機如何連線到可用性群組
伺服器名稱需要加入網域名稱;需使用 SQL Server 驗證
Q3 : AP 無法連線 Listener
比如 Java 開發的 AP,要連線 SQL Server 可用性群組的 Listener 失敗;或是可連上,但容錯移轉後,就連不上 SQL Server,特別是在多子網路的容錯移轉。
原因極可能是 JDBC Driver 不支援 SQL Server 可用性群組。
Microsoft JDBC Driver for SQL Server 4.0 版,連線到可用性群組的接聽程式(Listener)或容錯移轉叢集執行個體時,需指定 multiSubnetFailover=true。multiSubnetFailover 預設為 false。
Microsoft JDBC Driver for SQL Server 6.0版,新增了連線屬性 transparentNetworkIPResolution (TNIR),用來連線到可用性群組,特別是在多子網路,有多個虛擬 IP。當 transparentNetworkIPResolution = true 時,JDBC Driver 會嘗試連線到第一個可用的 IP 位址。 如果第一次嘗試失敗,驅動程式就會嘗試以平行方式連線到所有 IP 位址,直到逾時到期為止,當其中一個成功時,就會捨棄所有其他的連線嘗試。
Microsoft JDBC Driver for SQL Server 6.0版以上,transparentNetworkIPResolution 預設為 true。
基本上 Driver 連線過程是這樣:
1 問 DNS ,回傳所有 Listener IP
2 逐一用每個 IP 連線資料庫:如果連線失敗或 Timeout ,會用下一個 IP 嘗試連線
參考微軟官網文件:JDBC 驅動程式對於高可用性、災害復原的支援
參考