IBM Cloud Docs
扩展集群

扩展集群

本部分将逐步完成扩展 Windows Server Failover Cluster (WSFC) 和可用性组以在双区域部署中使用所需的构建任务。

本指南假定您:

  • 已部署双 AZ 部署,现在正在将其扩展为灾难恢复用例。
  • 已在另一个区域 (称为恢复区域) 中供应第二个 VPC ,并将 VPC 与运输网关连接在一起。
  • 已配置安全组以允许服务器之间所需的流量。
  • 已在恢复区域中供应虚拟服务器,并将其配置为堡垒和 Active Directory 服务器。
  • Active Directory 服务器是现在跨两个区域的域的一部分。
  • 已在恢复区域中供应虚拟服务器,并将其配置为 SQL Server。

安装故障转移集群功能部件

  1. RDP 到恢复 MZR 中的 SQL 服务器,使用 SQL Admins 组帐户中的用户并打开 PowerShell 会话。

  2. 将 SQL Admins 组添加到本地远程管理用户组,以便此组中的用户可以执行远程命令。

  3. 允许入站 TCP 端口 5022 进入服务器,因为此端口用于可用性组流量。 安装故障转移集群功能部件,然后重新启动服务器:

    $domainnb = "<NB_Domain>"
    $group = $domainnb + "\SQLAdmins"
    Add-LocalGroupMember -Group "Remote Management Users" -Member $group
    New-NetFirewallRule -DisplayName 'SQL-AG-Inbound' -Profile Domain -Direction Inbound -Action Allow -Protocol TCP -LocalPort 5022
    Install-WindowsFeature –Name Failover-Clustering –IncludeManagementTools
    Restart-Computer -Force
    

加入 WSFC 并启用 SQL 始终开启

  1. RDP 到恢复 MZR 中的 SQL 服务器,使用 SQL Admins 组帐户中的用户并打开 PowerShell 会话。

  2. <hostname3> 添加到名称为 <clustername> 的 WSFC 集群中,例如 wsfc01 ,然后在新节点上启用 "始终开启" 可用性组。

    $sqldb03 = "<hostname3>"
    $cluster = "<clustername>"
    Get-Cluster -Name $cluster | Add-ClusterNode -Name $sqldb03
    Enable-SqlAlwaysOn -ServerInstance $sqldb03 -Force
    

创建端点

  1. RDP 到恢复 MZR 中的 SQL 服务器,使用 SQL Admins 组帐户中的用户并打开 PowerShell 会话。

  2. 要参与 "始终开启" 可用性组,服务器实例需要自己的端点,这些端点使用 TCP 端口 5022 在托管可用性副本的服务器实例之间发送和接收流量。

  3. 以下 PowerShell 命令用于在 SQL Server 上的缺省 SQL 实例 (DEFAULT) 上配置端点 Hadr_endpoint ; <hostname3> 在端点之间启用加密:

    $sqldb03 = "<hostname3>"
    $domainnb = "<NB_Domain>"
    $user = $domainnb + "\sqlsvc"
    $pathsqldb03 = "SQLSERVER:\SQL\" + $sqldb03 + "\DEFAULT"
    $endpoint3 = New-SqlHadrEndpoint Hadr_endpoint -Port 5022 -Path $pathsqldb03 -Encryption Required -EncryptionAlgorithm Aes -Owner $user
    Set-SqlHadrEndpoint -InputObject $endpoint3 -State "Started"
    

要向端点使用的域服务授予连接许可权,需要执行以下步骤。 如果未完成此步骤,那么端点端口将不会启动,并且不会显示在 netstat -a 列表中:

  1. 在主副本主机上启动 SQL Server Management Studio (SSMS) 并连接到主副本。
  2. 展开 安全性,然后右键单击 登录 并选择 新建登录
  3. 单击 搜索 并输入用户帐户 \sqlserver\sqlsvc,然后单击 确定
  4. 右键单击已创建的登录,然后选择 属性
  5. 单击 安全对象,然后单击 搜索
  6. 在 "添加对象" 对话框中,选择 特定对象 ,然后单击 确定
  7. 在 "选择对象" 对话框中,单击 对象类型 ,然后选择 端点
  8. 单击 浏览 以选择对象名。
  9. 选择 Hadr_endpoint ,然后单击 确定
  10. 在 Hadr_endpoint 的许可权中,显式授予对此对象的连接许可权。

传输测试数据库

  1. RDP 到恢复 MZR 中的 SQL 服务器,使用 SQL Admins 组帐户中的用户并打开 PowerShell 会话。

  2. 使用 Backup-SqlDatabaseRestore-SqlDatabase 命令来准备辅助数据库,以在 TempShare on <file_share_host>(托管主副本的 SQL Server 实例) 上的 <hostname1> 上创建 TestDatabase 的备份。 将备份复原到将托管辅助副本的 <hostname3> 。 必须使用 NoRecovery 复原参数。

    $sqldb01 = "<hostname1>"
    $sqldb03 = "<hostname3>"
    $filesharehost = "<file_share_host>"
    $backupfiledata = "\\" + $filesharehost +"\TempShare\TestDatabase.bak"
    $backupfilelog = "\\" + $filesharehost +"\TempShare\TestDatabase.trn"
    Backup-SqlDatabase -Database "TestDatabase" -ServerInstance $sqldb01 -BackupFile $backupfiledata -CopyOnly
    Backup-SqlDatabase -Database "TestDatabase" -BackupFile $backupfilelog -ServerInstance $sqldb01 -BackupAction Log -CopyOnly
    Restore-SqlDatabase -Database "TestDatabase" -BackupFile $backupfiledata -ServerInstance $sqldb03 -NoRecovery  
    Restore-SqlDatabase -Database "TestDatabase" -BackupFile $backupfilelog -ServerInstance $sqldb03 -RestoreAction Log -NoRecovery
    

新的辅助数据库处于 "正在复原" 状态,直到将其连接到可用性组时才可访问。

创建可用性组副本

添加到可用性组的数据库称为可用性数据库。 添加数据库时,数据库必须是联机读写数据库,并且存在于将在 WSFC 中托管主副本的服务器实例上。 添加后,数据库将作为主数据库加入可用性组,并保持可供客户机使用。 在将主数据库的备份复原到将成为辅助副本的服务器实例之前,不存在辅助数据库。 新的辅助数据库处于 "正在复原" 状态,直到它连接到可用性组为止。 如果未使用备份和复原方法,请参阅 使用自动种子植入来初始化 "始终开启" 可用性组的辅助副本

  1. RDP 到恢复 MZR 中的 SQL 服务器,使用 SQL Admins 组帐户中的用户并打开 PowerShell 会话。

  2. 要确保不会发生路径错误,请使用 Invoke-SQLCmd 来强制装入 SQL PowerShell 库,然后可通过 PowerShell 驱动器树进行访问。 PowerShell 处理 SQL Server 中的对象,类似于目录中的文件。 将 <hostname3> 替换为 SQL Server 的主机名:

    invoke-sqlcmd
    cd SQLSERVER:\SQL\<hostname3>
    
  3. 要创建可用性组副本, New-SqlAvailabilityReplica 命令用于配置异步落实的可用性方式。 <hostname1> 是主副本的主机名,而 <hostname3> 是恢复 MZR 中服务器的主机名, <fqdn3> 是该服务器的标准域名。 <availability_group> 是先前配置的 "始终开启" 可用性组的名称。 请参阅 New-SqlAvailabilityGroup 文档以获取其他参数的描述。

    $sqldb03 = "<hostname3>"
    $sqldb03fqdn = "<fqdn3>"
    $ag = "<availability_group>"
    $endpointurl3 = "TCP://" + $sqldb03fqdn + ":5022"
    $pathsqldb01 = "SQLSERVER:\SQL\" + $sqldb01 +" \DEFAULT\AvailabilityGroups\" + $ag
    New-SqlAvailabilityReplica -Name $sqldb03 -EndpointUrl $endpointurl3 -FailoverMode Manual -AvailabilityMode AsynchronousCommit -ConnectionModeInSecondaryRole    AllowNoConnections -Path $pathsqldb01
    
  4. 使用以下命令将辅助副本连接到可用性组。 连接将辅助数据库置于 ONLINE 状态,并启动与相应主数据库的数据同步。 数据同步是在辅助数据库上重现对主数据库的更改的过程。 数据同步涉及主数据库将事务日志记录发送到辅助数据库。

    $sqldb03 = "<hostname3>"
    $ag = "<availability_group>"
    $sqldb03 = "sqldb03"
    $ag = "AG01"
    $pathsqldb03 = "SQLSERVER:\SQL\" + $sqldb03 + " \DEFAULT"
    Join-SqlAvailabilityGroup -Path $pathsqldb03 -Name $ag -ClusterType WSFC
    
  5. 通过将每个辅助数据库连接到可用性组来启动数据同步:

    $sqldb03 = "<hostname3>"
    $ag = "<availability_group>"
    $agpathsqldb03 = "SQLSERVER:\SQL\" + $sqldb03 + " \DEFAULT\AvailabilityGroups\" + $ag
    Add-SqlAvailabilityDatabase -Path $agpathsqldb03 -Database "TestDatabase"
    
  6. 使用 dir 命令来验证新可用性组的内容 (例如, dir SQLSERVER:\SQL\sqldb01\DEFAULT\AvailabilityGroups\AG01)。

  7. 使用以下命令通过 Windows 防火墙允许 TCP 6789:

    New-NetFirewallRule -DisplayName 'SQL-dnnlsnr-6789-Inbound' -Profile Domain -Direction Inbound -Action Allow -Protocol TCP -LocalPort 6789