教程:在多个子网中配置可用性组(Azure VM 上的 SQL Server)

适用于:Azure 上的 SQL Server

提示

通过在同一 Azure 虚拟网络中的多个子网中创建 SQL Server 虚拟机 (VM),可以简化部署,使 Always On 可用性组不再需要 Azure 负载均衡器或分布式网络名称 (DNN)。 如果已在单个子网中创建可用性组,可以将其迁移到多子网环境

本教程说明如何在多个子网内的 Azure 虚拟机 (VM) 上为 SQL Server 创建 Always On 可用性组。 完成本教程,将创建一个 Windows Server 故障转移群集,以及一个带有两个 SQL Server 副本和一个侦听器的可用性组。

估计所需时间:在已满足先决条件的情况下,完成此教程大约需要 30 分钟时间。

先决条件

下表列出了开始本教程之前需要完成的先决条件

要求 说明
两个 SQL Server 实例 - 两个位于不同的 Azure 可用性区域或同一可用性集的 VM
- 在 Azure 虚拟网络中的单独子网中
- 为每个 VM 各分配两个辅助 IP
- 在单个域中
SQL Server 服务帐户 由每台计算机的 SQL Server 服务使用的域帐户
打开防火墙端口 - SQL Server:对于默认实例,为“1433”
- 数据库镜像终结点:“5022”或任何可用端口
域安装帐户 - 每个 SQL Server 上的本地管理员帐户
- 每个 SQL Server 实例的 SQL Server sysadmin 固定服务器角色的成员

本教程假设你已基本了解 SQL Server Always On 可用性组

创建群集

Always On 可用性组位于 Windows Server 故障转移群集基础结构的顶层,因此在部署可用性组之前,必须先配置 Windows Server 故障转移群集,其中包括添加功能、创建群集以及设置群集 IP 地址。

添加故障转移群集功能

将故障转移群集功能添加到这两个 SQL Server VM。 为此,请执行下列步骤:

  1. 使用有权在 AD 中创建对象的域帐户(例如在先决条件一文中创建的“CORP\Install”域帐户)通过远程桌面协议 (RDP) 连接到 SQL Server 虚拟机。

  2. 打开“服务器管理器仪表板”。

  3. 选择仪表板上的“添加角色和功能”链接。

    Select the Add roles and features link on the dashboard.

  4. 选择“下一步”,直到看到“服务器功能”部分。

  5. 在“功能”中,选择“故障转移群集”。

  6. 添加其他所有必备功能。

  7. 选择“安装”以添加功能。

  8. 在另一个 SQL Server VM 上重复上述步骤。

创建群集

将群集功能添加到每个 SQL Server VM 后,即可创建 Windows Server 故障转移群集。

要创建群集,请执行以下步骤:

  1. 使用有权在 AD 中创建对象的域帐户(例如在先决条件一文中创建的“CORP\Install”域帐户)通过远程桌面协议 (RDP) 连接到第一个 SQL Server VM(如 SQL-VM-1) 。

  2. 在“服务器管理器”仪表板中,选择“工具”,然后选择“故障转移群集管理器” 。

  3. 在左窗格中,右键单击“故障转移群集管理器”,然后选择“创建群集” 。

    Create Cluster

  4. 在“创建群集向导”中,逐页完成下表提供的设置来创建一个双节点群集:

    设置
    开始之前 使用默认值。
    选择服务器 在“输入服务器名称”中键入第一个 SQL Server 的名称(如 SQL-VM-1),并选择“添加” 。
    在“输入服务器名称”中键入第二个 SQL Server 的名称(如 SQL-VM-2),并选择“添加” 。
    验证警告 选择“是。在单击‘下一步’时运行配置验证测试,然后返回创建群集的过程”。
    开始之前 选择“下一步”。
    “测试选项” 选择“仅运行选择的测试”。
    测试选择 取消选中“存储”。 请确保选择“清单”、“网络”和“系统配置” 。
    确认 选择“下一步”。
    等待验证完成。
    选择“查看报表”,可以查看报表。 可以放心地忽略有关 VM 只能在一个网络接口上访问的警告。 Azure 基础结构具有物理冗余,因此无需添加其他网络接口。
    选择“完成”。
    用于管理群集的访问点 在“群集名称”中键入群集名称,例如“SQLAGCluster1”。
    确认 取消选中“将所有符合条件的存储添加到群集”并选择“下一步”。
    总结 选择“完成”。

    警告

    如果选中了“将所有符合条件的存储添加到群集”,Windows 会在群集进程中分离虚拟磁盘。 这样一来,这些虚拟磁盘将不会出现在磁盘管理器或资源管理器之中,除非从群集中删除存储,并使用 PowerShell 将其重新附加。

设置故障转移群集的 IP 地址

通常,分配给群集的 IP 地址与分配给 VM 的 IP 地址相同,这意味着在 Azure 中,群集 IP 地址将处于失败状态,并且无法联机。 更改群集 IP 地址,使 IP 资源联机。

在配置先决条件时,应该为每个 SQL Server VM 分配辅助 IP 地址,如下面的示例表所示(自己特定的 IP 地址可能会有所不同):

VM 名称 子网名称 子网地址范围 次要 IP 名称 次要 IP 地址
SQL-VM-1 SQL-subnet-1 10.38.1.0/24 windows-cluster-ip 10.38.1.10
SQL-VM-2 SQL-subnet-2 10.38.2.0/24 windows-cluster-ip 10.38.2.10

将这些 IP 地址分配为每个相关子网的群集 IP 地址。

注意

在 Windows Server 2019 上,群集创建分布式服务器名称而不是群集网络名称,群集名称对象 (CNO) 会自动注册群集中所有节点的 IP 地址,因此无需使用专用的 Windows 群集 IP 地址 。 如果使用的是 Windows Server 2019,请跳过此部分以及所有其他引用群集核心资源或者使用 PowerShell 创建基于虚拟网络名称 (VNN) 的群集的步骤。 请参阅博客故障转移群集:群集网络对象以获取详细信息。

若要更改群集 IP 地址,请执行以下步骤:

  1. 在“故障转移群集管理器”中,向下滚动到“群集核心资源”,并展开群集详细信息。 应会看到“名称”以及来自各个子网的两个“IP 地址”资源处于失败状态 。

  2. 右键单击第一个失败的“IP 地址”资源,并选择“属性”。

    Cluster Properties

  3. 选择“静态 IP 地址”,并将 IP 地址更新为分配给第一个 SQL Server VM(如 SQL-VM-1)的子网中的专用 Windows 群集 IP 地址 。 选择“确定”。

     Select **Static IP Address** and update the IP address to the dedicated windows cluster IP address in the same subnet you assigned to the SQL Server VM in the prerequisites article

  4. 对第二个失败的“IP 地址”资源重复这些步骤,为第二个 SQL Server VM(如 SQL-VM-2)的子网使用专用 Windows 群集 IP 地址

    Repeat the steps for the second failed **IP Address** resource, using the dedicated windows cluster IP address for the subnet of the other SQL Server VM.

  5. 在“群集核心资源”部分中,右键单击群集名称,并选择“联机” 。 等待名称和其中一个 IP 地址资源联机。

由于 SQL Server VM 位于不同的子网中,因此群集将在两个专用 Windows 群集 IP 地址上有 OR 依赖项。 当该群集名称资源联机时,它会用新的 Active Directory (AD) 计算机帐户更新域控制器 (DC) 服务器。 如果群集核心资源移动节点,则一个 IP 地址将脱机,而另一个 IP 地址会进入联机状态,使用新的 IP 地址关联更新 DC 服务器。

提示

在生产环境中,在 Azure VM 上运行群集时,将群集设置更改为较宽松的监视状态,能提高云环境中群集的稳定性和可靠性。 有关详细信息,请参阅 SQL Server VM - HADR 配置最佳做法

配置仲裁

在双节点群集上,仲裁设备对于实现群集可靠性和稳定性是必需的。 在 Azure VM 上,建议使用云见证仲裁配置,不过还有其他可用选项。 本部分中的步骤是配置云见证以进行仲裁。 确定存储帐户的访问密钥,然后配置云见证。

获取存储帐户的访问密钥

创建 Azure 存储帐户时,它会与自动生成的两个访问密钥关联 - 主访问密钥和辅助访问密钥。 首次创建云见证时,请使用主访问密钥,但之后对用于云见证的密钥没有限制。

使用 Azure 门户查看并复制在先决条一文中创建的 Azure 存储帐户的存储访问密钥。

要查看并复制存储访问密钥,请执行以下步骤:

  1. Azure 门户中转到资源组,并选择自己创建的存储帐户。

  2. 在“安全性 + 网络”下,选择“访问密钥” 。

  3. 选择“显示密钥”并复制密钥。

    Select **Show Keys** and copy the key

配置云见证

复制访问密钥后,为群集仲裁创建云见证。

要创建云见证,请执行以下步骤:

  1. 通过远程桌面连接第一个 SQL Server VM“SQL-VM-1”。

  2. 在管理员模式下打开 Windows PowerShell。

  3. 运行 PowerShell 脚本,将连接的 TLS(传输层安全性)值设置为 1.2:

    [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
    
  4. 使用 PowerShell 配置云见证。 将存储帐户名称和访问密钥的值替换为自己的特定信息:

    Set-ClusterQuorum -CloudWitness -AccountName "Storage_Account_Name" -AccessKey "Storage_Account_Access_Key" -Endpoint "core.chinacloudapi.cn"
    
  5. 以下示例输出说明该操作已成功:

    Your output should display the Cloud Witness as this example

群集核心资源配置了云见证。

启用 AG 功能

Always On 可用性组功能在默认情况下是禁用的。 使用 SQL Server 配置管理器在两个 SQL Server 实例上启用该功能。

要启用可用性组功能,请执行以下步骤:

  1. 使用属于 sysadmin 固定服务器角色成员的域帐户(例如在先决条件文档中创建的“CORP\Install”域帐户)启动对第一个 SQL Server VM(如 SQL-VM-1)的 RDP 文件

  2. 从其中一个 SQL Server VM 的“开始”菜单启动“SQL Server 配置管理器”。

  3. 在浏览器树中,突出显示“SQL Server 服务”,右键单击“SQL Server (MSSQLSERVER)”服务,并选择“属性”。

  4. 选择“Always On 高可用性组”选项卡,然后勾选“启用 Always On 可用性组”框:

    Enable Always On availability groups

  5. 选择“应用”。 在弹出对话框中选择“确定”。

  6. 重新启动 SQL Server 服务。

  7. 为其他 SQL Server 实例重复这些步骤。

启用 FILESTREAM 功能

如果不对可用性组中的数据库使用 FILESTREAM,请跳过此步骤并转到下一步“创建数据库”。

如果计划将数据库添加到使用 FILESTREAM 的可用性组,则需要启用 FILESTREAM,因为该功能默认处于禁用状态。 使用 SQL Server 配置管理器在两个 SQL Server 实例上启用该功能。

若要启用 FILESTREAM 功能,请执行以下步骤:

  1. 使用属于 sysadmin 固定服务器角色成员的域帐户(例如在先决条件文档中创建的“CORP\Install”域帐户)启动对第一个 SQL Server VM(如 SQL-VM-1)的 RDP 文件

  2. 从其中一个 SQL Server VM 的“开始”菜单启动“SQL Server 配置管理器”。

  3. 在浏览器树中,突出显示“SQL Server 服务”,右键单击“SQL Server (MSSQLSERVER)”服务,并选择“属性”。

  4. 选中“FILESTREAM”选项卡,然后选中复选框“针对 Transact-SQL 访问启用 FILESTREAM”:

  5. 选择“应用”。 在弹出对话框中选择“确定”。

  6. 在 SQL Server Management Studio 中,单击“新建查询”以显示查询编辑器。

  7. 在查询编辑器中,输入以下 Transact-SQL 代码:

    EXEC sp_configure filestream_access_level, 2  
    RECONFIGURE
    
  8. 单击执行

  9. 重新启动 SQL Server 服务。

  10. 为其他 SQL Server 实例重复这些步骤。

创建数据库

对于数据库,可以按照本部分中的步骤创建新数据库,或还原 AdventureWorks 数据库。 还需要备份数据库以便初始化日志链。 尚未备份的数据库不符合可用性组的先决条件。

若要创建数据库,请执行以下步骤:

  1. 使用属于 sysadmin 固定服务器角色成员的域帐户(例如在先决条件文档中创建的“CORP\Install”域帐户)启动对第一个 SQL Server VM(如 SQL-VM-1)的 RDP 文件 。
  2. 打开 SQL Server Management Studio 并连接到 SQL Server 实例。
  3. 在“对象资源管理器”中,右键单击“数据库”,然后选择“新建数据库” 。
  4. 在“数据库名称”中,键入“MyDB1” 。
  5. 选择“选项”页,并在“恢复模式”下拉列表中选择“完整”(如果完整模式不是默认值) 。 数据库必须处于完整恢复模式,以满足参与可用性组的先决条件。
  6. 选择“确定”以关闭“新建数据库”页面并创建自己的新数据库 。

若要备份数据库,请完成以下步骤:

  1. 在“对象资源管理器”中右键单击数据库,突出显示“任务”,然后选择“备份...” 。

  2. 选择“确定”,以将数据库完整备份到默认备份位置。

创建文件共享

创建备份文件共享,SQL Server VM 及其服务帐户都有权访问该共享。

要创建备份文件共享,请执行以下步骤:

  1. 在“服务器管理器”中的第一个 SQL Server VM 上,选择“工具”。 打开“计算机管理”。

  2. 选择“共享文件夹”。

  3. 右键单击“共享”,选择“新建共享...”,然后使用“创建共享文件夹向导”创建共享。

    Select New Share

  4. 在“文件夹路径”处选择“浏览”并找到或创建数据库备份共享文件夹路径,如 C:\Backup。 选择“下一步”。

  5. 在“名称、说明和设置”中核对共享名称和路径。 选择“下一步”。

  6. 在“共享文件夹权限”上设置“自定义权限”。 选择“自定义”。

  7. 在“自定义权限”上选择“添加”。

  8. 选中“完全控制”以授予对 SQL Server 服务帐户 (Corp\SQLSvc) 共享的完全访问权限:

    Make sure that the SQL Server service accounts for both servers have full control.

  9. 选择“确定”。

  10. 在“共享文件夹权限”中选择“完成” 。 再一次选择“完成”。

创建可用性组

备份数据库后,即可创建可用性组,该可用性组自动从主 SQL Server 副本进行完整备份和事务日志备份,然后使用 NORECOVERY 选项将其还原到辅助 SQL Server 实例上。

要创建可用性组,请执行以下步骤。

  1. 在第一个 SQL Server VM(如 SQL-VM-1)上的 SQL Server Management Studio (SSMS) 中的“对象资源管理器”中,右键单击“Always On 高可用性”,并选择“新建可用性组向导” 。

    Launch New availability group Wizard

  2. 在“简介” 页上,选择“下一步”。 在“指定可用性组名称”页面的“可用性组名称”中,键入可用性组的名称 ,如 AG1。 选择下一步

    New availability group Wizard, Specify availability group Name

  3. 在“选择数据库”页上,选择数据库,并选择“下一步”。 如果数据库不满足先决条件,请确保它以完整恢复模式运行,并进行备份

    New availability group Wizard, Select Databases

  4. 在“指定副本”页上,选择“添加副本”。

    New availability group Wizard, Specify Replicas

  5. 此时会弹出“连接到服务器”对话框。 在“服务器名称”中键入第二个服务器的名称,如 SQL-VM-2。 选择“连接” 。

  6. 在“指定副本”页上,选中“自动故障转移”复选框,然后在下拉列表中选择“同步提交”作为可用性模式:

     On the **Specify Replicas** page, check the boxes for Automatic Failover and choose Synchronous commit for the availability mode

  7. 选择“终结点”选项卡,确认用于数据库镜像终结点的端口是防火墙中打开的端口

    New availability group Wizard, Select Initial Data Synchronization

  8. 选择“侦听器”选项卡,然后选择“创建可用性组侦听器”并对该侦听器使用以下值:

    字段
    侦听器 DNS 名称: AG1-Listener
    端口 使用默认的 SQL Server 端口。 1433
    网络模式: 静态 IP
  9. 选择“添加”,为两个 SQL Server VM 的侦听器提供辅助专用 IP 地址。

    下表显示的是先决条件文档中为侦听器创建的示例 IP 地址(但自己特定的 IP 地址可能会有所不同):

    VM 名称 子网名称 子网地址范围 次要 IP 名称 次要 IP 地址
    SQL-VM-1 SQL-subnet-1 10.38.1.0/24 availability-group-listener 10.38.1.11
    SQL-VM-2 SQL-subnet-2 10.38.2.0/24 availability-group-listener 10.38.2.11
  10. 从“添加 IP 地址”对话框的下拉列表中选择第一个子网(如 10.38.1.0/24),然后提供辅助专用侦听器 IPv4 地址,例如 10.38.1.11 。 选择“确定”。

    Choose the first subnet (such as 10.38.1.0/24) from the drop-down on the Add IP address dialog box and, and then provide the secondary dedicated listener IPv4 address, such as 10.38.1.11

  11. 重复此步骤,但这次从下拉列表中选择另一个子网(如 10.38.2.0/24),并提供另一个 SQL Server VM 的辅助专用侦听器 IPv4 地址,如 10.38.2.11。 选择“确定”。

    Screenshot of Add IP Address for Listener.

  12. 查看“侦听器”页上的值后,选择“下一步” :

    After reviewing the values on the Listener page, select Next:

  13. 在“选择初始数据同步”页上,选择“完整数据库和日志备份”,并提供之前创建的网络共享位置,例如 \\SQL-VM-1\Backup

    Choose full data synchronization.

    注意

    完全同步对 SQL Server 第一个实例上的数据库进行完整备份,并将其还原到第二个实例。 对于大型数据库,不建议使用完全同步,因为这可能需要花费很长时间。 可以通过使用 NO RECOVERY 对数据库进行手动备份和还原来降低该时间。 如果配置可用性组之前,已在 SQL Server 上使用 NO RECOVERY 对数据库进行还原,请选择“仅联接”。 若想在配置可用性组之后进行备份,请选择“跳过初始数据同步”。

  14. 在“验证”页上,确认所有验证检查都已通过,然后选择“下一步” :

    New availability group Wizard, Validation.

  15. 在“摘要”页面上,选择“完成”,然后等待向导配置新的可用性组 。 选择“进度”页上的“更多详细信息”以查看详细进度 。 当在“结果”页上看到向导已成功完成时,请检查摘要以验证可用性组和侦听器是否成功创建 。

    New availability group Wizard, Results.

  16. 选择“关闭”退出该向导。

检查可用性组

可以使用 SQL Server Management Studio 和故障转移群集管理器检查可用性组的运行状况 。

要检查可用性组的状态,请执行以下步骤:

  1. 在“对象资源管理器”中,展开“Always On 高可用性”,并展开“可用性组”。 此时,应在此容器中看到新的可用性组。 右键单击可用性组,然后选择“显示面板”。

    Show availability group Dashboard

    可用性组仪表板显示副本、每个副本的故障转移模式和同步状态,如以下示例所示:

    availability group Dashboard

  2. 打开故障转移群集管理器,选择自己的群集,然后选择“角色”以查看在群集中创建的可用性组角色 。 选择角色“AG1”,然后选择“资源”选项卡以查看侦听器和关联的 IP 地址,如以下示例所示 :

    availability group in Failover Cluster Manager

此时,你有一个可用性组,该可用性组在两个 SQL Server 实例上具有副本,还有一个相应的可用性组侦听程序。 可以使用此侦听器进行连接,并且可以使用 SQL Server Management Studio 在实例之间移动可用性组。

警告

请勿尝试通过使用故障转移群集管理器对可用性组进行故障转移。 所有故障转移操作都应在 SQL Server Management Studio 中执行,例如通过使用 Always On 仪表板或 Transact-SQL (T-SQL) 。 有关详细信息,请参阅将故障转移群集管理器用于可用性组的限制

测试侦听器连接

在可用性组准备就绪且侦听器已配置适当的辅助 IP 地址后,请测试与侦听器的连接。

要测试连接,请执行以下步骤:

  1. 使用 RDP 连接到位于同一虚拟网络中但没有副本的 SQL Server,例如群集内的其他 SQL Server 实例,或任一安装了 SQL Server Management Studio 的其他 VM。

  2. 打开 SQL Server Management Studio,在“连接到服务器”对话框中的“服务器名称:”处键入侦听器的名称(如 AG1-Listener),然后选择“选项”:

    Open SQL Server Management Studio and in Server name: type the name of the listener, such as AG1-Listener

  3. 在“其他连接参数”窗口中输入 MultiSubnetFailover=True,然后选择“连接”以自动连接到托管主 SQL Server 副本的实例 :

    SSMS connection

注意

后续步骤

配置多子网可用性组后,如果需要,可以将其扩展到多个区域

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