配置工作组可用性组
本文介绍了使用 Always On 可用性组创建 Active Directory 域独立群集所需的步骤;这也称为工作组群集。 本文重点介绍与准备和配置工作组和可用性组相关的步骤,略过了其他文章中已介绍的步骤,例如如何创建群集或部署可用性组。
先决条件
若要配置工作组可用性组,需要以下内容:
- 至少两台运行 SQL Server 2016(或更高版本)的 Windows Server 2016(或更高版本)虚拟机,并使用静态 IP 地址将其部署到相同的可用性集或不同的可用性区域。
- 在子网上具有至少 4 个可用 IP 地址的本地网络。
- 在管理员组中的每台计算机上都有一个帐户,该帐户在 SQL Server 内也拥有 sysadmin 权限。
- 打开端口:TCP 1433、TCP 5022、TCP 59999。
作为参考,本文中使用了以下参数,但可以根据需要对参数进行修改:
名称 | Parameter |
---|---|
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 群集 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 设置。
若要了解更多信息,请参阅以下文章: