配置 SQL Server 可用性组

如果您在 Compute Engine 上运行多个 SQL Server Enterprise 实例,则可以将这些实例配置为使用 Windows Server 故障转移集群和 SQL Server AlwaysOn 可用性组,以支持高可用性和灾难恢复。

本教程将向您介绍如何使用 SQL Server Enterprise 创建具有必要网络设置的实例集群,并将这些实例配置为使用 Windows Server 故障转移集群和 SQL Server AlwaysOn 可用性组。您可以使用通过 SQL Server 公开映像Microsoft 许可移动性创建的 SQL Server Enterprise 实例。

前提条件

本教程假定您熟悉以下内容和操作:

设置 VPC 网络

创建一个具有三个子网的自定义模式 VPC 网络。然后设置防火墙规则,允许内部虚拟机之间传递流量。如有必要,您可以使用现有网络完成此任务,但最佳做法是将系统隔离为不同的网络和子网。本教程建议您创建以下 VPC 网络和子网配置:

  1. 创建一个自定义模式 VPC 网络。

    gcloud compute networks create wsfcnet --subnet-mode custom
    
  2. 向该 VPC 网络添加三个子网。

    gcloud compute networks subnets create wsfcsubnet1 --network wsfcnet \
    --region us-central1 --range 10.0.0.0/24
    
    gcloud compute networks subnets create wsfcsubnet2 --network wsfcnet \
    --region us-central1 --range 10.1.0.0/24
    
    gcloud compute networks subnets create wsfcsubnet3 --network wsfcnet \
    --region us-central1 --range 10.2.0.0/24
    
  3. 创建防火墙规则,以允许新 VPC 网络中使用内部 IP 地址的实例之间传递流量。

    gcloud compute firewall-rules create allow-internal-ports \
    --network wsfcnet --allow tcp:1-65535,udp:1-65535,icmp \
    --source-ranges 10.0.0.0/24,10.1.0.0/24,10.2.0.0/24
    
  4. 创建防火墙规则,允许在 VPC 网络的端口 3389 上使用 RDP。

    gcloud compute firewall-rules create allow-rdp --network wsfcnet \
    --allow tcp:3389 --source-ranges 0.0.0.0/0
    

创建 Windows 网域控制器

创建一个 Windows 网域控制器。在本教程中,网域为 dbeng.com,网域控制器的名称为 dc-windows,IP 地址为 10.2.0.100。网域控制器使用 wsfcsubnet3 子网。

  1. 创建一个实例,将其用作网域控制器。您可以指定所需的任意机器类型和 Windows Server 版本。对于网域控制器,请指定一个小型 n1-standard-1 机器类型和 windows-2016 映像系列中的最新映像。

    gcloud compute instances create dc-windows --machine-type n1-standard-1 \
    --boot-disk-type pd-ssd --image-project windows-cloud \
    --image-family windows-2016 --boot-disk-size 200GB \
    --zone us-central1-f --subnet wsfcsubnet3 --private-network-ip=10.2.0.100
    
  2. 使用 RDP 连接网域控制器实例

  3. 在该实例上,以管理员身份运行 PowerShell 以打开 PowerShell 终端。

  4. 设置以下变量:

    PS C:\> $DomainName = "dbeng.com";
    
    PS C:\> $DomainMode = "Win2012R2";
    
    PS C:\> $ForestMode = "Win2012R2";
    
    PS C:\> $DatabasePath = "C:\Windows\NTDS";
    
    PS C:\> $LogPath = "C:\Windows\NTDS";
    
    PS C:\> $SysvolPath = "C:\Windows\SYSVOL";
    
  5. 安装以下 Active Directory 工具:

    PS C:\> Install-WindowsFeature -Name AD-Domain-Services -IncludeManagementTools
    
    PS C:\> Install-ADDSForest -CreateDnsDelegation:$false -DatabasePath $DatabasePath -LogPath $LogPath -SysvolPath $SysvolPath -DomainName $DomainName -DomainMode $DomainMode -ForestMode $ForestMode -InstallDNS:$true -NoRebootOnCompletion:$false -SafeModeAdministratorPassword ((Get-Credential).Password) -Force:$true
    
  6. 如果实例在创建网域后没有自动重启,请手动重启该实例。

  7. 实例重启后,使用 RDP 重新连接该实例。使用与您的原始凭据相匹配的网域凭据。

  8. 运行“Active Directory 用户和计算机”并重置“管理员”密码。请务必取消选中“用户下次登录时必须更改密码”选项。

  9. 断开与实例的连接并使用 Administrator 帐号重新连接。

  10. 创建一个名为“sql.service”的网域帐号,该帐号将用于运行 SQL Server。取消选中“用户下次登录时必须更改密码”选项以及“密码永不过期”选项。

网域控制器已完成配置,您可以断开与 dc-windows 实例的连接了。接下来为可用性组创建实例

为可用性组创建实例

为可用性组创建 SQL Server 实例。这些实例使用以下 IP 地址配置和别名 IP

  • 实例名称:cluster-sql1
    • 内部 IP 地址:10.0.0.4
    • Windows 故障转移集群名称:cluster-ag
    • 故障转移集群 IP 地址:10.0.0.5(别名 IP)
    • 可用性组名称:cluster-listener
    • 可用性组侦听器地址:10.0.0.6(别名 IP)
  • 实例名称:cluster-sql2
    • 内部 IP 地址:10.1.0.4
    • Windows 故障转移集群名称:cluster-ag
    • 故障转移集群 IP 地址:10.1.0.5(别名 IP)
    • 可用性组名称:cluster-listener
    • 可用性组侦听器地址:10.1.0.6(别名 IP)

使用以下某种方法创建 SQL Server 实例:

SQL Server 公开映像

使用 SQL Server 公开映像创建两个实例。在本例中,将实例命名为 cluster-sql1cluster-sql2。指定启动磁盘大小 (200GB) 和机器类型 (n1-highmem-4)。与网域控制器实例相比,SQL Server 实例通常需要更多的计算资源。如果您日后需要额外的计算资源,可以更改这些实例的机器类型。如果您需要额外的存储空间,请添加一个磁盘或调整永久性启动磁盘的大小。在较大的可用性组中,您可以创建多个实例。

另外,添加 --metadata sysprep-specialize-script-ps1 标志,以在创建实例的过程中运行可安装 Failover-Clustering 功能的 PowerShell 命令。

在本例中,使用以下命令创建两个实例:

gcloud compute instances create cluster-sql1 --machine-type n1-highmem-4 \
--boot-disk-type pd-ssd --boot-disk-size 200GB \
--image-project windows-sql-cloud --image-family sql-ent-2016-win-2016 \
--zone us-central1-f \
--network-interface "subnet=wsfcsubnet1,private-network-ip=10.0.0.4,aliases=10.0.0.5;10.0.0.6" \
--can-ip-forward --metadata sysprep-specialize-script-ps1="Install-WindowsFeature Failover-Clustering -IncludeManagementTools;"
gcloud compute instances create cluster-sql2 --machine-type n1-highmem-4 \
--boot-disk-type pd-ssd --boot-disk-size 200GB \
--image-project windows-sql-cloud --image-family sql-ent-2016-win-2016 \
--zone us-central1-f \
--network-interface "subnet=wsfcsubnet2,private-network-ip=10.1.0.4,aliases=10.1.0.5;10.1.0.6" \
--can-ip-forward --metadata sysprep-specialize-script-ps1="Install-WindowsFeature Failover-Clustering -IncludeManagementTools;"

对于较大的可用性组,您可以使用合适的 IP 地址创建更多实例。

现有许可

如果您希望利用“通过软件保障实现的 Microsoft 许可移动性”计划让 SQL Server Enterprise 能使用您自己的许可,请创建一个启用了 --guestOSFeatures 的 Windows 映像。然后,在晚些时候手动安装 SQL Server Enterprise。

  1. 创建一个 Windows Server 实例
  2. 在该实例中,将所有组件更新为最新版本。
  3. 对于该实例的启动磁盘,将自动删除状态设置为 false
  4. 删除实例
  5. 创建一个具有标准 Windows Server 映像的临时磁盘。

    gcloud compute disks create windows-2012-disk-new --size 200 \
    --zone us-central1-f --type pd-ssd --image-family windows-2012-r2 \
    --image-project windows-cloud
    
  6. 在新磁盘中,通过在 guestOSFeatures 参数中启用 MULTI_IP_SUBNET 来创建自定义 Windows Server 映像。

    gcloud beta compute images create windows-server-2012-r2-dc-new \
    --source-disk windows-2012-disk-new --source-disk-zone us-central1-f \
    --guest-os-features MULTI_IP_SUBNET
    
  7. 创建映像后,删除临时磁盘。

    gcloud compute disks delete windows-2012-disk-new --zone us-central1-f
    
  8. 使用自定义映像为可用性组创建新的 SQL Server 实例。与网域控制器实例相比,SQL Server 实例通常需要更多的计算资源,因此请至少指定一个 n1-highmem-4 机器类型。如果您日后需要额外的计算资源,可以更改这些实例的机器类型。如果您需要额外的存储空间,请添加一个磁盘或调整永久性启动磁盘的大小。在较大的可用性组中,您可以创建多个实例。对于此示例,请创建两个实例。

    gcloud compute instances create cluster-sql1 --machine-type n1-highmem-4 \
    --boot-disk-type pd-ssd --boot-disk-size 200GB \
    --image windows-server-2012-r2-dc-new --zone us-central1-f \
    --subnet wsfcsubnet1 --private-network-ip=10.0.0.4 --can-ip-forward \
    --metadata sysprep-specialize-script-ps1="Install-WindowsFeature Failover-Clustering -IncludeManagementTools;"
    
    gcloud compute instances create cluster-sql2 --machine-type n1-highmem-4 \
    --boot-disk-type pd-ssd --boot-disk-size 200GB \
    --image windows-server-2012-r2-dc-new --zone us-central1-f \
    --subnet wsfcsubnet2 --private-network-ip=10.1.0.4 --can-ip-forward \
    --metadata sysprep-specialize-script-ps1="Install-WindowsFeature Failover-Clustering -IncludeManagementTools;"
    
  9. 在每个实例上,手动安装 SQL Server Enterprise。

创建实例后,请对其进行配置,以便将其用作可用性组。

  1. 使用 RDP 连接连接两个实例
  2. 将两个实例都更改为使用静态 IP 地址,并将网络掩码设置为 255.255.0.0。以管理员身份打开 PowerShell 终端,并将静态 IP 地址设置为“静态”。以下命令可能会终止您的远程桌面连接:

    • 实例 1:

      PS C:\> netsh interface ip set address name=Ethernet static 10.0.0.4 255.255.0.0 10.0.0.1 1
      
      PS C:\> netsh interface ip set dns Ethernet static 10.2.0.100
      
      PS C:\> netsh advfirewall firewall add rule name="Open Port 5022 for Availability Groups" dir=in action=allow protocol=TCP localport=5022
      
      PS C:\> netsh advfirewall firewall add rule name="Open Port 1433 for SQL Server" dir=in action=allow protocol=TCP localport=1433
      
    • 实例 2:

      PS C:\> netsh interface ip set address name=Ethernet static 10.1.0.4 255.255.0.0 10.1.0.1 1
      
      PS C:\> netsh interface ip set dns Ethernet static 10.2.0.100
      
      PS C:\> netsh advfirewall firewall add rule name="Open Port 5022 for Availability Groups" dir=in action=allow protocol=TCP localport=5022
      
      PS C:\> netsh advfirewall firewall add rule name="Open Port 1433 for SQL Server" dir=in action=allow protocol=TCP localport=1433
      
  3. 将这两个实例添加到 Windows 网域。以管理员身份打开 PowerShell 并针对这两个实例运行以下 Add-Computer 命令:

    PS C:\> Add-Computer -DomainName "dbeng.com" -Credential "dbeng.com\Administrator" -Restart -Force
    

    该命令会提示您输入凭据。当命令运行完毕后,实例会重启。

现已为可用性组创建了实例。接下来,配置故障转移集群管理器

配置故障转移集群管理器

对可用性组中的实例启用故障转移集群,然后对一个实例进行配置,使其充当故障转移集群管理器。为组中的所有实例启用 AlwaysOn 高可用性。

  1. 使用 RDP 重新连接您的实例,不过要使用网域管理员凭据。在本例中,网域为 dbeng,管理员帐号为 Administrator。如果您使用的是 Chrome RDP for Google Cloud Platform,请在“选项”菜单的“证书”列表下删除这些地址的现有 RDP 证书。

  2. 选择一个实例,然后对其进行配置,使其作为故障转移集群管理器运行。

    1. 以管理员身份打开 PowerShell,并设置反映您的集群环境的变量。对于此示例,请设置以下变量:

      PS C:\> $node1 = "cluster-sql1"
      
      PS C:\> $node2 = "cluster-sql2"
      
      PS C:\> $nameWSFC = "cluster-dbclus" #Name of cluster
      
      PS C:\> $ipWSFC1 = "10.0.0.5" #IP address of cluster in subnet 1
      
      PS C:\> $ipWSFC2 = "10.1.0.5" #IP address of cluster in subnet 2
      
    2. 创建故障转移集群:

      PS C:\> New-Cluster -Name $nameWSFC -Node $node1, $node2 -NoStorage -StaticAddress $ipWSFC1, $ipWSFC2
      
    3. 为该集群中的两个节点启用 AlwaysOn 高可用性:

      PS C:\> Enable-SqlAlwaysOn -ServerInstance $node1 -Force
      
      PS C:\> Enable-SqlAlwaysOn -ServerInstance $node2 -Force
      
  3. 在没有集群管理器的辅助实例上,在 C:\SQLBackup 处创建一个备份文件夹,并以 \\cluster-sql2\SQLBackup 形式共享该文件夹。只要两个实例都可以访问共享文件夹,您就可以为共享文件夹选择其他位置。

  4. 在这两个实例上,在 C:\SQLDataC:\SQLLog 处分别创建两个文件夹。将这些文件夹用于数据库数据和日志文件。

故障转移集群管理器已配置完毕。接下来,创建可用性组

创建可用性组

创建一个测试数据库,并将其配置为使用新的可用性组。或者,您也可以为可用性组指定现有数据库。

  1. 如果您尚未配置数据库,请创建一个测试数据库。在集群管理器实例上,运行 SQL Server Management Studio 并使用以下 SQL 命令创建测试数据库:

    CREATE DATABASE TestDB
    ON PRIMARY (NAME = 'TestDB_Data', FILENAME='C:\SQLData\TestDB_Data.mdf', SIZE = 256MB, MAXSIZE = UNLIMITED, FILEGROWTH = 256MB )
    LOG ON (NAME = 'TestDB_Log', FILENAME='C:\SQLLog\TestDB_Log.ldf', SIZE = 256MB, MAXSIZE = UNLIMITED, FILEGROWTH = 256MB )
    GO
    USE [TestDB]
    Exec dbo.sp_changedbowner @loginame = 'sa', @map = false;
      ALTER DATABASE [TestDB] SET RECOVERY FULL;
      GO
      BACKUP DATABASE TestDB to disk = '\\\\cluster-sql2\SQLBackup\TestDB.bak' WITH INIT
    GO
    
  2. 在集群管理器实例上运行 SQL Server Management Studio。

  3. 右键点击 AlwaysOn 高可用性并选择新建可用性组向导

  4. 指定名称页面上,设置可用性组的名称。对于此示例,请指定 cluster-ag

  5. 选择数据库页面上,指定要复制的数据库。对于此示例,请指定 TestDB 数据库。

  6. 指定副本页面上,将这两个实例设置为具有自动故障转移功能和同步提交功能的副本。

  7. 选择数据同步页面上,指定网络共享以保留数据库的备份,以便执行初始同步。对于此示例,请指定 \\cluster-sql2\SQLBackup

  8. 由于没有侦听器,验证页面会生成警告,但您可以忽略此警告。

  9. 向导完成后,右键点击新的可用性组,然后选择添加侦听器

  10. 为此侦听器指定以下参数:

    • 侦听器 DNS 名称cluster-listener
    • 网络端口1433
    • 网络模式Static IP
  11. 添加两个子网和 IP 地址字段。对于此示例,使用以下子网和 IP 地址对:

    • 10.0.0.0/1610.0.0.6
    • 10.1.0.0/1610.1.0.6

现在,您可以连接将 cluster-listener 用作 SQL Server 数据库名称(而不是实例名称)的 SQL Server。该连接指向当前处于有效状态的实例。

后续步骤

此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页
Compute Engine 文档