扩展集群
本部分将逐步完成扩展 Windows Server Failover Cluster (WSFC) 和可用性组以在双区域部署中使用所需的构建任务。
本指南假定您:
- 已部署双 AZ 部署,现在正在将其扩展为灾难恢复用例。
- 已在另一个区域 (称为恢复区域) 中供应第二个 VPC ,并将 VPC 与运输网关连接在一起。
- 已配置安全组以允许服务器之间所需的流量。
- 已在恢复区域中供应虚拟服务器,并将其配置为堡垒和 Active Directory 服务器。
- Active Directory 服务器是现在跨两个区域的域的一部分。
- 已在恢复区域中供应虚拟服务器,并将其配置为 SQL Server。
安装故障转移集群功能部件
-
RDP 到恢复 MZR 中的 SQL 服务器,使用 SQL Admins 组帐户中的用户并打开 PowerShell 会话。
-
将 SQL Admins 组添加到本地远程管理用户组,以便此组中的用户可以执行远程命令。
-
允许入站 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 始终开启
-
RDP 到恢复 MZR 中的 SQL 服务器,使用 SQL Admins 组帐户中的用户并打开 PowerShell 会话。
-
将
<hostname3>
添加到名称为<clustername>
的 WSFC 集群中,例如wsfc01
,然后在新节点上启用 "始终开启" 可用性组。$sqldb03 = "<hostname3>" $cluster = "<clustername>" Get-Cluster -Name $cluster | Add-ClusterNode -Name $sqldb03 Enable-SqlAlwaysOn -ServerInstance $sqldb03 -Force
创建端点
-
RDP 到恢复 MZR 中的 SQL 服务器,使用 SQL Admins 组帐户中的用户并打开 PowerShell 会话。
-
要参与 "始终开启" 可用性组,服务器实例需要自己的端点,这些端点使用 TCP 端口 5022 在托管可用性副本的服务器实例之间发送和接收流量。
-
以下 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
列表中:
- 在主副本主机上启动 SQL Server Management Studio (SSMS) 并连接到主副本。
- 展开 安全性,然后右键单击 登录 并选择 新建登录。
- 单击 搜索 并输入用户帐户
\sqlserver\sqlsvc
,然后单击 确定。 - 右键单击已创建的登录,然后选择 属性。
- 单击 安全对象,然后单击 搜索。
- 在 "添加对象" 对话框中,选择 特定对象 ,然后单击 确定。
- 在 "选择对象" 对话框中,单击 对象类型 ,然后选择 端点。
- 单击 浏览 以选择对象名。
- 选择 Hadr_endpoint ,然后单击 确定。
- 在 Hadr_endpoint 的许可权中,显式授予对此对象的连接许可权。
传输测试数据库
-
RDP 到恢复 MZR 中的 SQL 服务器,使用 SQL Admins 组帐户中的用户并打开 PowerShell 会话。
-
使用
Backup-SqlDatabase
和Restore-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 中托管主副本的服务器实例上。 添加后,数据库将作为主数据库加入可用性组,并保持可供客户机使用。 在将主数据库的备份复原到将成为辅助副本的服务器实例之前,不存在辅助数据库。 新的辅助数据库处于 "正在复原" 状态,直到它连接到可用性组为止。 如果未使用备份和复原方法,请参阅 使用自动种子植入来初始化 "始终开启" 可用性组的辅助副本 。
-
RDP 到恢复 MZR 中的 SQL 服务器,使用 SQL Admins 组帐户中的用户并打开 PowerShell 会话。
-
要确保不会发生路径错误,请使用
Invoke-SQLCmd
来强制装入 SQL PowerShell 库,然后可通过 PowerShell 驱动器树进行访问。 PowerShell 处理 SQL Server 中的对象,类似于目录中的文件。 将<hostname3>
替换为 SQL Server 的主机名:invoke-sqlcmd cd SQLSERVER:\SQL\<hostname3>
-
要创建可用性组副本,
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
-
使用以下命令将辅助副本连接到可用性组。 连接将辅助数据库置于 ONLINE 状态,并启动与相应主数据库的数据同步。 数据同步是在辅助数据库上重现对主数据库的更改的过程。 数据同步涉及主数据库将事务日志记录发送到辅助数据库。
$sqldb03 = "<hostname3>" $ag = "<availability_group>" $sqldb03 = "sqldb03" $ag = "AG01" $pathsqldb03 = "SQLSERVER:\SQL\" + $sqldb03 + " \DEFAULT" Join-SqlAvailabilityGroup -Path $pathsqldb03 -Name $ag -ClusterType WSFC
-
通过将每个辅助数据库连接到可用性组来启动数据同步:
$sqldb03 = "<hostname3>" $ag = "<availability_group>" $agpathsqldb03 = "SQLSERVER:\SQL\" + $sqldb03 + " \DEFAULT\AvailabilityGroups\" + $ag Add-SqlAvailabilityDatabase -Path $agpathsqldb03 -Database "TestDatabase"
-
使用 dir 命令来验证新可用性组的内容 (例如,
dir SQLSERVER:\SQL\sqldb01\DEFAULT\AvailabilityGroups\AG01
)。 -
使用以下命令通过 Windows 防火墙允许 TCP 6789:
New-NetFirewallRule -DisplayName 'SQL-dnnlsnr-6789-Inbound' -Profile Domain -Direction Inbound -Action Allow -Protocol TCP -LocalPort 6789