Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
本文介绍了使用 Always On 可用性组创建 Active Directory 域独立群集所需的步骤;这也称为工作组群集。 本文重点介绍与准备和配置工作组和可用性组相关的步骤,略过了其他文章中已介绍的步骤,例如如何创建群集或部署可用性组。
先决条件
若要配置工作组可用性组,需要以下内容:
- 至少两台运行 SQL Server 2016(或更高版本)的 Windows Server 2016(或更高版本)虚拟机,并使用静态 IP 地址将其部署到相同的可用性集或不同的可用性区域。
- 在子网上具有至少 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 后缀,请执行以下步骤:
通过 Bastion 访问第一个节点,然后打开服务器管理器。
选择“本地服务器”,然后在“计算机名称”下选择虚拟机的名称 。
选择“重命名此计算机…”下的“更改…” 。
将工作组名称的名称更改为有意义的名称,例如
AGWORKGROUP:
选择“更多…”以打开“DNS 后缀和 NetBIOS 计算机名”对话框 。
在“此计算机的主 DNS 后缀”下键入 DNS 后缀的名称,例如 ,然后选择“确定” :
确认“完整计算机名”现在已显示 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
创建故障转移群集
在此步骤中,将创建故障转移群集。 如果尚不熟悉这些步骤,可参阅故障转移群集教程执行这些步骤。
教程与应为工作组群集执行的操作之间存在明显差异:
- 运行群集验证时,取消选中“存储”和“存储空间直通” 。
- 将节点添加到群集时,添加完全限定的名称,例如:
AGNode1.ag.wgcluster.example.comAGNode2.ag.wgcluster.example.com
- 取消选中“将所有符合条件的存储添加到群集”。
创建群集后,请分配静态群集 IP 地址。 为此,请执行下列步骤:
在其中一个节点上,打开“故障转移群集管理器”,选择群集,右键单击“群集核心资源”下的“名称: ClusterNam<”,然后选择“属性”。
选择“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 = '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使用文件资源管理器以转到证书所在的文件位置,如 。
从第二个节点手动生成证书副本(如
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 负载均衡器支持虚拟网络名称(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 脚本:
- 每个运行状况探测端口
- 在每台虚拟机上
[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
相关内容
部署可用性组后,请考虑优化 Azure VM 上 SQL Server 的 HADR 设置。
若要了解更多信息,请参阅以下文章: