在 Azure 虛擬機器 (VM) 上,分散式網路名稱 (DNN) 會將流量路由傳送至適當的叢集資源。 讓您不需 Azure Load Balancer,即可比虛擬網路名稱 (VNN) 輕鬆連線 SQL Server 容錯移轉叢集執行個體 (FCI)。
本文說明如何設定 DNN 資源,使用 Azure VM 的 SQL Server 路由傳送流量至容錯移轉叢集執行個體,提供高可用性和災害復原 (HADR)。
如需替代連線選項,請改為考慮 虛擬網路名稱 (VNN) 和 Azure 負載平衡器 。
概觀
搭配 SQL Server VM 的 Always On 容錯移轉叢集執行個體使用時,分散式網路名稱 (DNN) 會取代虛擬網路名稱 (VNN) 成為連接點。 設定 DNN 可以免除使用 Azure 負載平衡器將流量路由至 VNN 的必要,從而簡化部署和維護,並增強容錯移轉能力。
使用 FCI 部署時,VNN 仍然存在,但用戶端會連線 DNN DNS 名稱,而不是 VNN 名稱。
提示
在相同 Azure 虛擬網路內的多個子網路中建立 SQL Server 虛擬機器(VM),容錯移轉叢集執行個體就不需要 Azure Load Balancer 或分散式網路名稱 (DNN),可簡化部署作業。
必要條件
建議先準備好下列項目,再完成本文中的步驟:
- SQL Server 使用 Windows Server 2016 及更新版本的 SQL Server 2019 CU8 及更新版本、SQL Server 2017 CU25 及更新版本,或 SQL Server 2016 SP3 及更新版本啟動。
- 判斷分散式網路名稱是否為 HADR 解決方案適用的連線能力選項。
- 已設定錯移轉叢集執行個體。
- 已安裝最新版的 PowerShell。
注意
相同叢集上的每個可用性群組或容錯移轉叢集執行個體都需要自己的獨立連線點,無論是 VNN 聆聽器還是 DNN 聆聽器。
建立 DNN 資源
DNN 資源和 SQL Server FCI 建立在相同的叢集群組。 使用 PowerShell 在 FCI 叢集群組中建立 DNN 資源。
下列 PowerShell 命令會以 <dnnResourceName> 的資源名稱,在 SQL Server FCI 叢集群組新增 DNN 資源。 資源名稱用來唯一識別資源。 請使用對您有意義,且在整個叢集中唯一的名稱。 資源類型必須是 Distributed Network Name。
-Group 值必須對應 SQL Server FCI,即您要在分散式網路名稱新增的叢集組名。 如果是預設執行個體,一般格式為 SQL Server (MSSQLSERVER)。
Add-ClusterResource -Name <dnnResourceName> `
-ResourceType "Distributed Network Name" -Group "<WSFC role of SQL Server instance>"
例如,若要建立預設 SQL Server FCI 的 DNN 資源 dnn-demo,請使用下列 PowerShell 命令:
Add-ClusterResource -Name dnn-demo `
-ResourceType "Distributed Network Name" -Group "SQL Server (MSSQLSERVER)"
設定叢集 DNN DNS 名稱
設定叢集中 DNN 資源的網域名稱系統 (DNS) 名稱。 接著叢集會使用此值,路由傳送流量至目前裝載 SQL Server FCI 的節點。
用戶端會使用 DNS 名稱連線 SQL Server FCI。 您可以選擇唯一值。 或者,如果您已經有現有的 FCI,而且不想更新用戶端連接字串。 您可以將 DNN 設定為使用用戶端已使用的目前 VNN。 若要這麼做,請重新命名 VNN,然後設定 DNS 的 DNN。
您可以使用此命令設定 DNN 的 DNS 名稱:
Get-ClusterResource -Name <dnnResourceName> | `
Set-ClusterParameter -Name DnsName -Value <DNSName>
此 DNSName 值是用戶端用來連線 SQL Server FCI 的值。 例如,若要用戶端連線 FCIDNN,請使用下列 PowerShell 命令:
Get-ClusterResource -Name dnn-demo | `
Set-ClusterParameter -Name DnsName -Value FCIDNN
客戶端現在在連線到 SQL Server FCI 時必須在其連接字串中輸入 FCIDNN。
警告
請勿刪除目前的虛擬網路名稱 (VNN),因為它是 FCI 基礎結構的必要元件。
重新命名 VNN
如果您有現有的虛擬網路名稱,而您想要讓用戶端繼續使用此值連線 SQL Server FCI,請將目前的 VNN 重新命名為預留位置值。 重新命名目前的 VNN 後,您可以將 DNN 的 DNS 名稱值設為 VNN。 如果您的企業不需要使用目前的 VNN,請略過本節。
適用於重新命名 VNN 的部分限制。 如需詳細資訊,請參閱重新命名 FCI。
重新命名 VNN 之後, 請設定叢集 DNN DNS 名稱。
設定 DNN 資源連線
適當命名 DNN 資源,並在叢集中設定 DNS 名稱值之後,請使用 PowerShell 在叢集中線上設定 DNN 資源:
Start-ClusterResource -Name <dnnResourceName>
例如,若要啟動 DNN 資源 dnn-demo,請使用下列 PowerShell 命令:
Start-ClusterResource -Name dnn-demo
設定可能的擁有者
根據預設,叢集會繫結 DNN DNS 名稱與叢集所有的節點。 不過,叢集中不屬於 SQL Server FCI 的節點應該從 DNN 可能擁有者清單中排除。
若要更新可能的擁有者,請遵循下列步驟:
移至容錯移轉叢集管理員中的 DNN 資源。
以滑鼠右鍵按一下 DNN 資源,並選取 [屬性]。
針對任何未參與容錯移轉叢集執行個體的節點,清除核取方塊。 DNN 資源可能的擁有者清單應符合 SQL Server 執行個體資源可能的擁有者清單。 例如,假設 Data3 未參與 FCI,下圖是從 DNN 資源的可能擁有者清單中移除 Data3 的範例:
選取 [確定] 儲存設定。
重新啟動 SQL Server 執行個體
使用容錯移轉叢集管理員重新啟動 SQL Server 執行個體。 請遵循下列步驟:
- 移至容錯移轉叢集管理員的 SQL Server 資源。
- 以滑鼠右鍵按一下 SQL Server 資源並離線。
- 等到所有相關聯的資源離線。 然後以滑鼠右鍵按一下 SQL Server 資源,並再次將其上線。
更新連接字串
針對連線 SQL Server FCI DNN 的任何應用程式,更新連接字串,並在連接字串中包含 MultiSubnetFailover=True。 如果您的用戶端不支援 MultiSubnetFailover 參數,則它與 DNN 不相容。
以下 SQL FCI DNN 的範例連接字串,包含FCIDNN 的 DNS 名稱:
Data Source=FCIDNN, MultiSubnetFailover=True
此外,如果 DNN 未使用原始 VNN,則連線到 SQL Server FCI 的 SQL 用戶端必須將其連接字串更新為 DNN DNS 名稱。 若要避免此需求,您可以將 DNS 名稱值更新為 VNN 的名稱。 但您需要先 將現有的 VNN 替換為占位符。
測試容錯移轉
測試叢集資源的容錯移轉,驗證叢集功能。
若要測試容錯移轉,請遵循下列步驟:
- 使用 Bastion 連線到其中一個 SQL Server 叢集節點。
- 開啟 [容錯移轉叢集管理員]。 選取 [角色]。 請注意哪個節點擁有 SQL Server FCI 角色。
- 以滑鼠右鍵按一下 SQL Server FCI 角色。
- 選取 [移動],然後選取 [最佳可行節點]。
[容錯移轉叢集管理員] 會顯示角色,其資源則會變成離線狀態。 接著資源會移動,並在另一個節點上線。
測試連線能力
若要測試連線能力,請登入相同虛擬網路中的另一部虛擬機器。 開啟 [SQL Server Management Studio],並使用 DNN DNS 名稱連線 SQL Server FCI。
安裝最新版本的 SQL Server Management Studio(SSMS)。
避免 IP 衝突
您可以採取此選擇性步驟,以防止將 FCI 資源所使用的虛擬 IP (VIP) 位址指派給 Azure 中的另一個資源。
雖然您的客戶現在使用 DNN 連線到 SQL Server FCI,但您無法刪除虛擬網路名稱 (VNN) 和虛擬 IP,因為它們是 FCI 基礎結構的必要元件。 不過,不再有負載平衡器在 Azure 中保留虛擬 IP 位址。 因此,虛擬網路上的另一個資源可能會被指派與 FCI 所使用的虛擬 IP 位址相同的 IP 位址。 這種情況可能會導致重複的 IP 衝突問題。
為保留 IP 位址,請設定 APIPA 位址或專用的網路介面卡。
APIPA 位址
若要避免使用重複的 IP 位址,請設定 APIPA 位址 (也稱為連結-本機位址)。 若要這樣做,請執行下列命令:
Get-ClusterResource "virtual IP address" | Set-ClusterParameter
–Multiple @{"Address"="169.254.1.1";"SubnetMask"="255.255.0.0";"OverrideAddressMatch"=1;"EnableDhcp"=0}
在此命令中,「虛擬 IP 位址」是叢集 VIP 位址資源的名稱,而「169.254.1.1」是為 VIP 位址選擇的 APIPA 位址。 選擇最適合貴企業的位址。 設定 OverrideAddressMatch=1 允許 IP 位址連線任何網路,包括 APIPA 位址空間。
專用的網路介面卡
或者,您可以在 Azure 中設定網路介面卡,以保留虛擬 IP 位址資源所使用的 IP 位址。 不過,此設定會取用子網路位址空間中的位址,而且需要額外的額外負荷,以確保網路介面卡不會用於任何其他用途。
限制
- 連線 DNN 接聽程式的用戶端必須支援連接字串的
MultiSubnetFailover=True參數。 - 使用其他 SQL Server 功能和包含 DNN 的 FCI 時,您要考量可能更多。 如需詳細資訊,請參閱 FCI 與 DNN 的互通性。