你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

配置工作组可用性组

适用于: Azure VM 上的 SQL Server

本文介绍了使用 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 后缀,请执行以下步骤:

  1. 通过 RDP 访问第一个节点,然后打开服务器管理器。

  2. 选择“本地服务器”,然后在“计算机名称”下选择虚拟机的名称 。

  3. 选择“重命名此计算机…”下的“更改…” 。

  4. 将工作组名称的名称更改为有意义的名称,例如 AGWORKGROUP

    更改工作组名称

  5. 选择“更多…”以打开“DNS 后缀和 NetBIOS 计算机名”对话框 。

  6. 在“此计算机的主 DNS 后缀”下键入 DNS 后缀的名称,例如 ag.wgcluster.example.com,然后选择“确定” :

    该屏幕截图显示你可在其中输入值的“DNS 后缀和 NetBIOS 计算机名称”对话框。

  7. 确认“完整计算机名”现在已显示 DNS 后缀,然后选择“确定”保存更改 :

    该屏幕截图显示了在何处查看完整的计算机名称。

  8. 当系统提示重启服务器时,请进行重启。

  9. 在要用于可用性组的任何其他节点上重复这些步骤。

编辑主机文件

由于没有 Active Directory,因此无法对 Windows 连接进行身份验证。 因此,请通过使用文本编辑器编辑主机文件来分配信任。

若要编辑主机文件,请执行以下步骤:

  1. 通过 RDP 访问虚拟机。

  2. 使用文件资源管理器以转到 c:\windows\system32\drivers\etc

  3. 右键单击 hosts 文件,然后使用记事本(或任何其他文本编辑器)打开该文件 。

  4. 在该文件末尾,以 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
    

    将 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 地址。 为此,请执行下列步骤:

  1. 在其中一个节点上,打开“故障转移群集管理器”,选择群集,右键单击“群集核心资源”下的“名称: <ClusterNam>”,然后选择“属性”。

    启动群集名称的属性

  2. 选择“IP 地址”下的 IP 地址,然后选择“编辑” 。

  3. 选择“使用静态”,提供群集的 IP 地址,然后选择“确定” :

    提供群集的静态 IP 地址

  4. 验证是否已正确进行设置,然后选择“确定”以保存设置:

    验证群集属性

创建云见证

在此步骤中,配置云共享见证。 如果不熟悉这些步骤,请参阅为故障转移群集部署云见证

启用可用性组功能

在此步骤中,启用可用性组功能。 如果尚不熟悉这些步骤,请参阅可用性组教程

创建密钥和证书

在此步骤中,创建 SQL 登录在加密的终结点上使用的证书。 在每个节点上创建一个文件夹来保存证书备份,如 c:\certs

注意

如果未指定证书的期满日,则证书的有效期为自创建之日起一年。 如果证书过期,则终结点之间的连接将失败。

若要配置第一个节点,请执行以下步骤:

  1. 打开 SQL Server Management Studio 并连接到第一个节点,例如 AGNode1

  2. 更新为复杂且安全的密码后,打开“新建查询”窗口并运行以下 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  
    
  3. 接下来,创建 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  
    
  4. 使用文件资源管理器以转到证书所在的文件位置,如 c:\certs

  5. 从第一个节点手动生成证书副本(如 AGNode1Cert.crt),并将其传输到第二个节点上的同一位置。

若要配置第二个节点,请执行以下步骤:

  1. 使用 SQL Server Management Studio 连接到第二个节点,例如 AGNode2

  2. 更新为复杂且安全的密码后,在“新建查询”窗口中运行以下 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
    
  3. 接下来,创建 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  
    
  4. 使用文件资源管理器以转到证书所在的文件位置,如 c:\certs

  5. 从第二个节点手动生成证书副本(如 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 设置

若要了解更多信息,请参阅以下文章: