本文說明使用 Always On 可用性群組建立 Active Directory 網域獨立叢集所需的步驟;也稱為工作群組叢集。 本文著重於與準備和設定工作群組和可用性群組相關的步驟。 它會忽略其他文章中涵蓋的步驟,例如如何建立叢集或部署可用性群組。
必要條件
若要設定工作群組可用性群組,您需要下列必要條件:
- 至少兩部執行 SQL Server 2016 (或更新版本)、部署至相同的可用性設定組或不同的可用性區域,且使用靜態 IP 位址的 Windows Server 2016 (或更新版本) 虛擬機器。
- 區域網路具有子網路上至少四個可用 IP 位址。
- 系統管理員群組中的每部機器上有一個在 SQL Server 內也具有 sysadmin 權限的帳戶。
- 開啟連接埠:TCP 1433、TCP 5022、TCP 59999。
作為參考,本文使用下列參數,但可以視需要進行修改:
| 名稱 | 參數 |
|---|---|
| Node1 | AGNode1 (10.0.0.4) |
| Node2 | AGNode2 (10.0.0.5) |
| 叢集名稱 | AGWGAG (10.0.0.6) |
| 接聽程式 | AGListener (10.0.0.7) |
| DNS 尾碼 | ag.wgcluster.example.com |
| 工作群組名稱 | AGWorkgroup |
設定 DNS 尾碼
在此步驟中,設定這兩部伺服器的 DNS 尾碼。 例如: ag.wgcluster.example.com 。 此設定可讓您使用要連線的物件名稱作為網路內的完整位址,例如 AGNode1.ag.wgcluster.example.com。
若要設定 DNS 尾碼,請遵循下列步驟:
使用 Bastion 連線到您的第一個節點,然後開啟伺服器管理員。
選取 [本機伺服器],然後在 [電腦名稱] 下選取虛擬機器的名稱。
在 [如果您要重新命名這台電腦...] 底下,選取 [變更]。
將 工作群組 名稱變更為有意義的名稱,例如
AGWORKGROUP:
選取 [其他] 以開啟 [DNS 尾碼和 NetBIOS 電腦名稱] 對話方塊。
在此 電腦的主要 DNS 尾碼下輸入 DNS 尾碼的名稱,例如
ag.wgcluster.example.com,然後選取 [確定]:
確認 [完整電腦名稱] 現在已顯示 DNS 尾碼,然後選取 [確定] 以儲存變更:
當系統提示您重新啟動伺服器時,請重新啟動伺服器。
在要用於可用性群組的任何其他節點上重複這些步驟。
編輯主機檔案
由於此配置中沒有 Active Directory,因此無法驗證 Windows 連線。 因此,透過使用文字編輯器編輯主機檔案來指派信任。
若要編輯主機檔案,請遵循下列步驟:
使用 Bastion 連線到您的虛擬機器。
使用 [檔案總管] 移至 。
以滑鼠右鍵按一下 hosts 檔案,並使用 [記事本] \(或任何其他文字編輯器\) 開啟該檔案。
在檔案結尾,以
IP Address, DNS Suffix #comment的形式為每個節點、可用性群組與接聽程式新增項目,如下所示:10.0.0.4 AGNode1.ag.wgcluster.example.com #Availability group node 10.0.0.5 AGNode2.ag.wgcluster.example.com #Availability group node 10.0.0.6 AGWGAG.ag.wgcluster.example.com #Cluster IP 10.0.0.7 AGListener.ag.wgcluster.example.com #Listener IP
設定權限
由於沒有 Active Directory 來管理權限,因此您必須手動允許非內建本機系統管理員帳戶建立叢集。
若要這樣做,請在每個節點上的系統管理 PowerShell 工作階段中執行下列 PowerShell Cmdlet:
new-itemproperty -path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System -Name LocalAccountTokenFilterPolicy -Value 1
建立容錯移轉叢集
在此步驟中,您會建立容錯移轉叢集。 如果您不熟悉這些步驟,請參閱容錯移轉叢集教學課程中的「建立 Windows 容錯移轉叢集」。
故障轉移叢集教學課程與工作群組叢集需要執行的步驟之間的顯著差異:
在執行叢集驗證時,請取消選取 [儲存體] 與 [儲存空間直接存取]。
將節點新增至叢集時,請新增完整名稱,例如:
AGNode1.ag.wgcluster.example.comAGNode2.ag.wgcluster.example.com
取消選取 [新增適合的儲存裝置到叢集]。
建立叢集之後,請指派靜態叢集 IP 位址。 若要這樣做,請依照下列步驟執行:
在其中一個節點上,開啟容錯移轉叢集管理員,選取叢集,右鍵按一下叢集核心資源下的名稱:<叢集名稱>,然後選取屬性。
選取 [IP 位址] 下的 IP 位址,然後選取 [編輯]。
選取 [使用靜態]、提供叢集的 IP 位址,然後選取 [確定]:
確認您的設定正確無誤,然後選取 [確定] 加以儲存:
建立雲端見證
在此步驟中,設定雲端共用見證。 如果您不熟悉這些步驟,請參閱為容錯移轉叢集部署雲端見證。
啟用可用性群組功能
在此步驟中,啟用可用性群組功能。 如果您不熟悉這些步驟,請參閱可用性群組教學課程。
建立金鑰與憑證
在此步驟中,建立 SQL 登入在加密端點上使用的憑證。 在每個節點上建立資料夾以保存憑證備份,例如 c:\certs。
注意
如果您未指定憑證的到期日,則憑證的有效期為自建立之日起一年。 如果憑證過期,端點之間的連線會失敗。
若要設定第一個節點,請遵循下列步驟:
開啟 [SQL Server Management Studio] 並連線到您的第一個節點,例如 。
在更新為複雜且安全的密碼之後,開啟 [新增查詢] 視窗,然後執行下列 Transact-SQL (T-SQL) 陳述式:
USE master; CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'PassWOrd123!'; GO --create a cert from the master key USE master; CREATE CERTIFICATE AGNode1Cert WITH SUBJECT = 'AGNode1 Certificate'; GO --Backup the cert and transfer it to AGNode2 BACKUP CERTIFICATE AGNode1Cert TO FILE = 'C:\certs\AGNode1Cert.crt'; GO接下來,建立 HADR 端點,並透過執行以下 Transact-SQL (T-SQL) 陳述式來使用憑證進行驗證:
--CREATE or ALTER the mirroring endpoint CREATE ENDPOINT hadr_endpoint STATE = STARTED AS TCP ( LISTENER_PORT=5022 , LISTENER_IP = ALL ) FOR DATABASE_MIRRORING ( AUTHENTICATION = CERTIFICATE AGNode1Cert , ENCRYPTION = REQUIRED ALGORITHM AES , ROLE = ALL ); GO使用 [檔案總管] 移至您憑證所在的檔案位置,例如 。
手動從第一個節點複製憑證 (例如
AGNode1Cert.crt),然後將其傳輸到第二個節點上的相同位置。
若要設定第二個節點,請遵循下列步驟:
使用 [SQL Server Management Studio] 連線到第二個節點,例如 。
在更新為複雜且安全的密碼之後,於 [新增查詢] 視窗中執行下列 Transact-SQL (T-SQL) 陳述式:
USE master; CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<complex password>'; GO --create a cert from the master key USE master; CREATE CERTIFICATE AGNode2Cert WITH SUBJECT = 'AGNode2 Certificate'; GO --Backup the cert and transfer it to AGNode1 BACKUP CERTIFICATE AGNode2Cert TO FILE = 'C:\certs\AGNode2Cert.crt'; GO接下來,建立 HADR 端點,並透過執行以下 Transact-SQL (T-SQL) 陳述式來使用憑證進行驗證:
--CREATE or ALTER the mirroring endpoint CREATE ENDPOINT hadr_endpoint STATE = STARTED AS TCP ( LISTENER_PORT=5022 , LISTENER_IP = ALL ) FOR DATABASE_MIRRORING ( AUTHENTICATION = CERTIFICATE AGNode2Cert , ENCRYPTION = REQUIRED ALGORITHM AES , ROLE = ALL ); GO使用 [檔案總管] 移至您憑證所在的檔案位置,例如 。
手動從第二個節點複製憑證 (例如
AGNode2Cert.crt),然後將其傳輸到第一個節點上的相同位置。
如果叢集中有任何其他節點,請同時在那些節點上重複這些步驟,並修改個別的憑證名稱。
建立登入
憑證驗證是用來跨節點同步處理資料的。 若要允許同步處理,請建立其他節點的登入、建立登入的使用者、建立登入的憑證以使用備份的憑證,然後在鏡像端點上授與連線。
若要這樣做,請先在第一個節點 (例如 AGNode1) 上執行下列 Transact-SQL (T-SQL) 查詢:
--create a login for the AGNode2
USE master;
CREATE LOGIN AGNode2_Login WITH PASSWORD = '<complex password>';
GO
--create a user from the login
CREATE USER AGNode2_User FOR LOGIN AGNode2_Login;
GO
--create a certificate that the login uses for authentication
CREATE CERTIFICATE AGNode2Cert
AUTHORIZATION AGNode2_User
FROM FILE = 'C:\certs\AGNode2Cert.crt'
GO
--grant connect for login
GRANT CONNECT ON ENDPOINT::hadr_endpoint TO [AGNode2_login];
GO
接下來,在第二個節點 (例如 AGNode2) 上執行下列 Transact-SQL (T-SQL) 查詢:
--create a login for the AGNode1
USE master;
CREATE LOGIN AGNode1_Login WITH PASSWORD = '<complex password>';
GO
--create a user from the login
CREATE USER AGNode1_User FOR LOGIN AGNode1_Login;
GO
--create a certificate that the login uses for authentication
CREATE CERTIFICATE AGNode1Cert
AUTHORIZATION AGNode1_User
FROM FILE = 'C:\certs\AGNode1Cert.crt'
GO
--grant connect for login
GRANT CONNECT ON ENDPOINT::hadr_endpoint TO [AGNode1_login];
GO
如果叢集中有任何其他節點,請同時在那些節點上重複這些步驟,並修改個別的憑證與使用者名稱。
設定可用性群組
在此步驟中,設定您的可用性群組,並在群組中新增您的資料庫。 此時請勿建立接聽程式。 如果您不熟悉這些步驟,請參閱可用性群組教學課程。 若要驗證一切是否正常運作,請務必進行故障切換和故障回復。
注意
如果同步處理程序期間發生失敗,您可能需要暫時授與 NT AUTHORITY\SYSTEM 帳戶 sysadmin 權限,以在第一個節點上建立叢集資源,例如 AGNode1。
設定負載平衡器
在此最後一個步驟中,使用 Azure 入口網站或 PowerShell 設定負載平衡器。
不過,使用 Windows 叢集 GUI 時可能會有一些 限制 。 因此,您應該使用 PowerShell 來建立用戶端存取點或接聽程式的網路名稱,並使用下列範例腳本:
Add-ClusterResource -Name "IPAddress1" -ResourceType "IP Address" -Group "WGAG"
Get-ClusterResource -Name IPAddress1 | Set-ClusterParameter -Multiple @{"Network" = "Cluster Network 1";"Address" = "10.0.0.4";"SubnetMask" = "255.0.0.0";"EnableDHCP" = 0}
Add-ClusterResource -Name "IPAddress2" -ResourceType "IP Address" -Group "WGAG"
Get-ClusterResource -Name IPAddress2 | Set-ClusterParameter -Multiple @{"Network" = "Cluster Network 2";"Address" = "10.0.0.5";"SubnetMask" = "255.0.0.0";"EnableDHCP" = 0}
Add-ClusterResource -Name "TestName" -Group "WGAG" -ResourceType "Network Name"
Get-ClusterResource -Name "TestName" | Set-ClusterParameter -Multiple @{"DnsName" = "TestName";"RegisterAllProvidersIP" = 1}
Set-ClusterResourceDependency -Resource TestName -Dependency "[IPAddress1] or [IPAddress2]"
Start-ClusterResource -Name TestName -Verbose
設定探查埠
使用 Azure Load Balancer 來支援虛擬網路名稱(VNN)資源時,您必須設定叢集以響應健康檢查要求。 如果健康情況探查無法從後端實例取得回應,則直到健康情況探查再次成功之前,不會傳送任何新的連線到該後端實例。
若要在 PowerShell 中設定探查埠參數,請針對每個適用的 IP 位址資源使用下列腳本一次:
$ClusterNetworkName = "<MyClusterNetworkName>" # The cluster network name. Use Get-ClusterNetwork on Windows Server 2012 or later to find the name.
$IPResourceName = "<IPResourceName>" # The IP address resource name.
[int]$ProbePort = <nnnnn> # The probe port that you configured in the health probe of the load balancer for a given Frontend IP Address. Any unused TCP port is valid.
Import-Module FailoverClusters
Get-ClusterResource $IPResourceName | Set-ClusterParameter -Multiple @{"Address"="$IPResourceName";"ProbePort"=$ProbePort;"SubnetMask"="255.255.255.255";"Network"="$ClusterNetworkName";"EnableDhcp"=0}
在IP位址資源離線並再次上線之前,您所做的變更不會生效。 執行資源的故障轉移,讓此變更生效。
設定叢集探查之後,請使用下列 PowerShell 腳本來檢查叢集參數:
Get-ClusterResource $IPResourceName | Get-ClusterParameter
將埠排除於動態埠範圍之外
使用介於 49,152 到 65,536 之間的健康情況探查埠時( TCP/IP 的預設動態埠範圍),請在每個 VM 上新增每個健康情況探查埠的排除專案。
設定埠排除可防止其他系統進程在 VM 上動態指派相同的埠
若要設定埠排除,請使用下列 PowerShell 腳本:
- 每個健康探測端口
- 在每個 VM 上
[int]$ProbePort = <nnnnn> # The probe port that you configured in the health probe of the load balancer. Any unused TCP port is valid.
netsh int ipv4 add excludedportrange tcp startport=$ProbePort numberofports=1 store=persistent
若要確認已正確設定排除項目,請使用下列命令:
netsh int ipv4 show excludedportrange tcp