設定工作群組可用性群組
此文章說明建立具有 Always On 可用性群組之 Active Directory 網域獨立叢集的必要步驟;這也稱為工作群組叢集。 此文章著重於準備並設定工作群組與可用性群組的相關步驟,並避免涉及其他文章中涵蓋的步驟,例如如何建立叢集,或如何部署可用性群組。
必要條件
若要設定工作群組可用性群組,您需要下列項目:
- 至少兩部執行 SQL Server 2016 (或更新版本)、部署至相同的可用性設定組或不同的可用性區域,且使用靜態 IP 位址的 Windows Server 2016 (或更新版本) 虛擬機器。
- 子網路中至少有 4 個可用 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 尾碼,請遵循下列步驟:
透過 RDP 連線到您的第一個節點,並開啟伺服器管理員。
選取 [本機伺服器],然後在 [電腦名稱] 下選取虛擬機器的名稱。
在 [如果您要重新命名這台電腦...] 底下,選取 [變更]。
將工作群組名稱的變更為有意義的名稱,例如
AGWORKGROUP
:選取 [其他] 以開啟 [DNS 尾碼和 NetBIOS 電腦名稱] 對話方塊。
在 [這部電腦的主要 DNS 尾碼] 下輸入 DNS 尾碼的名稱 (例如
ag.wgcluster.example.com
),然後選取 [確定]:確認 [完整電腦名稱] 現在已顯示 DNS 尾碼,然後選取 [確定] 以儲存變更:
請在系統提示時,重新啟動伺服器。
在要用於可用性群組的任何其他節點上重複這些步驟。
編輯主機檔案
因為沒有 Active Directory,所以沒有任何方法可以驗證 Windows 連線。 因此,透過使用文字編輯器編輯主機檔案來指派信任。
若要編輯主機檔案,請遵循下列步驟:
RDP 登入至您的虛擬機器。
使用 [檔案總管] 移至
c:\windows\system32\drivers\etc
。以滑鼠右鍵按一下 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
建立容錯移轉叢集
在此步驟中,您將會建立容錯移轉叢集。 如果您不熟悉這些步驟,可以遵循容錯移轉叢集教學課程中的步驟。
教學課程與工作群組叢集應執行的事項之間有顯著的差異:
- 在執行叢集驗證時,請取消選取 [儲存體] 與 [儲存空間直接存取]。
- 將節點新增至叢集時,請新增完整名稱,例如:
AGNode1.ag.wgcluster.example.com
AGNode2.ag.wgcluster.example.com
- 取消選取 [新增適合的儲存裝置到叢集]。
建立叢集之後,請指派靜態叢集 IP 位址。 若要這樣做,請依照下列步驟執行:
在其中一個節點上,開啟 [容錯移轉叢集管理員],選取叢集,以滑鼠右鍵按一下 [叢集核心資源]< 下的 [名稱:]>[ClusterNam],然後選取 [屬性]。
選取 [IP 位址] 下的 IP 位址,然後選取 [編輯]。
選取 [使用靜態]、提供叢集的 IP 位址,然後選取 [確定]:
確認您的設定正確無誤,然後選取 [確定] 加以儲存:
建立雲端見證
在此步驟中,設定雲端共用見證。 如果您不熟悉這些步驟,請參閱為容錯移轉叢集部署雲端見證。
啟用可用性群組功能
在此步驟中,啟用可用性群組功能。 如果您不熟悉這些步驟,請參閱可用性群組教學課程。
建立金鑰與憑證
在此步驟中,建立 SQL 登入在加密端點上使用的憑證。 在每個節點上建立資料夾以保存憑證備份,例如 c:\certs
。
注意
如果您未指定憑證的期間屆滿日,其有效性會是建立日起一年。 如果憑證過期,端點之間的連線會失敗。
若要設定第一個節點,請遵循下列步驟:
開啟 [SQL Server Management Studio] 並連線到您的第一個節點,例如
AGNode1
。在更新為複雜且安全的密碼之後,開啟 [新增查詢] 視窗,然後執行下列 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
使用 [檔案總管] 移至您憑證所在的檔案位置,例如
c:\certs
。手動從第一個節點複製憑證 (例如
AGNode1Cert.crt
),然後將其傳輸到第二個節點上的相同位置。
若要設定第二個節點,請遵循下列步驟:
使用 [SQL Server Management Studio] 連線到第二個節點,例如
AGNode2
。在更新為複雜且安全的密碼之後,於 [新增查詢] 視窗中執行下列 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 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
使用 [檔案總管] 移至您憑證所在的檔案位置,例如
c:\certs
。手動從第二個節點複製憑證 (例如
AGNode2Cert.crt
),然後將其傳輸到第一個節點上的相同位置。
如果叢集中有任何其他節點,請同時在那些節點上重複這些步驟,並修改個別的憑證名稱。
建立登入
憑證驗證是用來跨節點同步處理資料的。 若要能夠跨節點同步處理資料,請建立另一個節點的登入、建立登入的使用者、建立用於登入的憑證以使用已備份的憑證,然後在鏡像端點上授與連線。
若要這樣做,請先在第一個節點 (例如 AGNode1
) 上執行下列 Transact-SQL (T-SQL) 查詢:
--create a login for the AGNode2
USE master;
CREATE LOGIN AGNode2_Login WITH PASSWORD = 'PassWord123!';
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 = 'PassWord123!';
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 Cluster 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 VM 上 SQL Server 的 HADR 設定。
若要深入了解,請參閱: