配置使用存储空间直通的 SQL Server 故障切换集群实例


通过 Microsoft SQL Server Always On 故障切换集群实例 (FCI),您可以跨多个 Windows Server 故障切换集群 (WSFC) 节点运行单个 SQL Server 实例。任何时候,其中一个集群节点都会主动托管该 SQL 实例。如果发生故障,WSFC 会自动将该实例资源的所有权转移到另一个节点。

SQL Server FCI 要求将数据置于共享存储空间中,以便跨所有 WSFC 节点访问数据。本指南介绍如何部署使用存储空间直通 (S2D) 作为共享存储空间的 SQL Server 2019 故障切换集群实例。S2D 提供了基于软件的虚拟 SAN,可以使用 Compute Engine 虚拟机数据磁盘来存储 SQL 数据库。

下图演示了该部署:

架构

通过实现超融合架构,虚拟机实例 node-1node-2 将充当 WSFC 节点并托管共享存储空间。第三个虚拟机实例 witness 用于在故障切换情景中实现仲裁。三个虚拟机实例分布在三个可用区,并且共享一个子网。

客户端通过内部 TCP 负载均衡器与 SQL Server 实例进行通信。此负载均衡器使用自定义健康检查来确定当前托管 SQL 实例的 WSFC 节点,并将流量路由到该实例。

本文假定您已在 Google Cloud 上部署了 Active Directory,而且您已基本掌握 SQL Server、Active Directory 和 Compute Engine。

目标

  • 部署由两个 SQL Server 虚拟机实例和第三个虚拟机实例(充当文件共享见证者)组成的 WSFC。
  • 在 WSFC 上部署 SQL Server FCI。
  • 通过模拟故障切换来验证集群是否正常运行。

费用

本教程使用 Google Cloud 的计费组件,包括:

您可使用价格计算器根据您的预计使用情况来估算费用。

准备工作

如需完成本指南,您需要以下各项:

为完成本指南,您还需要一个 Google Cloud 项目:

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Make sure that billing is enabled for your Google Cloud project.

完成本教程后,您可以删除所创建的资源以避免继续计费。如需了解详情,请参阅清理

准备项目和网络

如需准备 Google Cloud 项目和 VPC 以便部署 SQL Server FCI,请执行以下操作:

  1. 在 Google Cloud 控制台中,点击激活 Cloud Shell 激活 Cloud Shell。 按钮,以打开 Cloud Shell

    转到 Google Cloud 控制台

  2. 初始化以下变量:

    VPC_NAME=VPC_NAME
    SUBNET_NAME=SUBNET_NAME
    

    其中:

    • VPC_NAME:您的 VPC 的名称
    • SUBNET_NAME:您的子网的名称
  3. 设置默认项目 ID

    gcloud config set project PROJECT_ID
    

    PROJECT_ID 替换为您的 Google Cloud 项目的 ID。

  4. 设置默认区域:

    gcloud config set compute/region REGION
    

    REGION 替换为要在其中部署的区域的 ID。

创建防火墙规则

如需允许客户端连接到 SQL Server,允许在 WSFC 节点之间进行通信,并使负载均衡器能够执行健康检查,您需要创建多个防火墙规则。如需简化这些防火墙规则的创建操作,您可以使用网络标记

  • 2 个 WSFC 节点由 wsfc-node 标记注释。
  • 所有服务器(包括见证者)均由 wsfc 标记注释。

创建使用这些网络标记的防火墙规则:

  1. 返回到现有的 Cloud Shell 会话。
  2. 为 WSFC 节点创建防火墙规则:

    SUBNET_CIDR=$(gcloud compute networks subnets describe $SUBNET_NAME --format=value\('ipCidrRange'\))
    
    gcloud compute firewall-rules create allow-all-between-wsfc-nodes \
      --direction=INGRESS \
      --action=allow \
      --rules=tcp,udp,icmp \
      --enable-logging \
      --source-tags=wsfc \
      --target-tags=wsfc \
      --network=$VPC_NAME \
      --priority 10000
    
    gcloud compute firewall-rules create allow-sql-to-wsfc-nodes \
      --direction=INGRESS \
      --action=allow \
      --rules=tcp:1433 \
      --enable-logging \
      --source-ranges=$SUBNET_CIDR \
      --target-tags=wsfc-node \
      --network=$VPC_NAME \
      --priority 10000
    
  3. 创建允许来自 Google Cloud 探测器的 IP 地址范围的健康检查的防火墙规则:

    gcloud compute firewall-rules create allow-health-check-to-wsfc-nodes \
      --direction=INGRESS \
      --action=allow \
      --rules=tcp \
      --source-ranges=130.211.0.0/22,35.191.0.0/16 \
      --target-tags=wsfc-node \
      --network=$VPC_NAME \
      --priority 10000
    

创建虚拟机实例

您现在为故障切换集群部署两个虚拟机实例。在任何时间点,只有其中一个虚拟机充当活跃 FCI 节点,而另一个节点充当故障切换节点。这两个虚拟机实例必须满足以下要求:

  • 位于同一区域,以便内部 TCP 负载均衡器可以访问它们。
  • 其访客代理配置为使用 WSFC 模式。在此模式下,客机代理在配置本地网络接口时会忽略内部负载均衡器的 IP 地址。这是在 WSFC 故障切换事件发生期间防止 IP 地址冲突所必需的行为。

使用预安装了 SQL Server 2019 的 SQL Server 高级映像

为了在故障切换情景中提供决定性投票权,实现仲裁,您需要部署第三个虚拟机作为文件共享见证者

  1. 返回到现有的 Cloud Shell 会话。
  2. 为 WSFC 节点创建专用脚本。该脚本会安装必要的 Windows 功能,并为 WSFC 和 SQL Server 创建防火墙规则:

    cat << "EOF" > specialize-node.ps1
    
    $ErrorActionPreference = "stop"
    
    # Install required Windows features
    Install-WindowsFeature Failover-Clustering -IncludeManagementTools
    Install-WindowsFeature RSAT-AD-PowerShell
    
    # Open firewall for WSFC
    netsh advfirewall firewall add rule name="Allow SQL Server health check" dir=in action=allow protocol=TCP localport=59997
    
    # Open firewall for SQL Server
    netsh advfirewall firewall add rule name="Allow SQL Server" dir=in action=allow protocol=TCP localport=1433
    
    EOF
    
  3. 创建虚拟机实例。在充当 S2D 和 WSFC 节点的两个虚拟机上,通过将元数据键 enable-wsfc 设置为 true,挂接其他数据磁盘并启用 WSFC 模式:

    REGION=$(gcloud config get-value compute/region)
    PD_SIZE=50
    MACHINE_TYPE=n2-standard-8
    
    gcloud compute instances create node-1 \
      --zone $REGION-a \
      --machine-type $MACHINE_TYPE \
      --subnet $SUBNET_NAME \
      --image-family sql-ent-2019-win-2022 \
      --image-project windows-sql-cloud \
      --tags wsfc,wsfc-node \
      --boot-disk-size 50 \
      --boot-disk-type pd-ssd \
      --boot-disk-device-name "node-1" \
      --create-disk=name=node-1-datadisk-1,size=$PD_SIZE,type=pd-ssd,auto-delete=no \
      --create-disk=name=node-1-datadisk-2,size=$PD_SIZE,type=pd-ssd,auto-delete=no \
      --create-disk=name=node-1-datadisk-3,size=$PD_SIZE,type=pd-ssd,auto-delete=no \
      --create-disk=name=node-1-datadisk-4,size=$PD_SIZE,type=pd-ssd,auto-delete=no \
      --metadata enable-wsfc=true \
      --metadata-from-file=sysprep-specialize-script-ps1=specialize-node.ps1
    
    gcloud compute instances create node-2 \
      --zone $REGION-b \
      --machine-type $MACHINE_TYPE \
      --subnet $SUBNET_NAME \
      --image-family sql-ent-2019-win-2022 \
      --image-project windows-sql-cloud \
      --tags wsfc,wsfc-node \
      --boot-disk-size 50 \
      --boot-disk-type pd-ssd \
      --boot-disk-device-name "node-2" \
      --create-disk=name=node-2-datadisk-1,size=$PD_SIZE,type=pd-ssd,auto-delete=no \
      --create-disk=name=node-2-datadisk-2,size=$PD_SIZE,type=pd-ssd,auto-delete=no \
      --create-disk=name=node-2-datadisk-3,size=$PD_SIZE,type=pd-ssd,auto-delete=no \
      --create-disk=name=node-2-datadisk-4,size=$PD_SIZE,type=pd-ssd,auto-delete=no \
      --metadata enable-wsfc=true \
      --metadata-from-file=sysprep-specialize-script-ps1=specialize-node.ps1
    
    gcloud compute instances create "witness" \
      --zone $REGION-c \
      --machine-type n2-standard-2 \
      --subnet $SUBNET_NAME \
      --image-family=windows-2022 \
      --image-project=windows-cloud \
      --tags wsfc \
      --boot-disk-size 50 \
      --boot-disk-type pd-ssd \
      --metadata sysprep-specialize-script-ps1="add-windowsfeature FS-FileServer"
    
  4. 要将 3 个虚拟机实例加入 Active Directory,请对 3 个虚拟机实例中的每个实例执行以下操作:

    1. 通过查看虚拟机的串行端口输出来监控其初始化过程:

      gcloud compute instances tail-serial-port-output NAME
      

      NAME 替换为虚拟机实例的名称。

      等待几分钟,直到您看到输出 Instance setup finished,然后按 Ctrl+C。此时,该虚拟机实例已准备就绪,可以使用了。

    2. 为虚拟机实例创建用户名和密码

    3. 使用远程桌面连接到虚拟机,然后使用上一步中创建的用户名和密码登录。

    4. 右键点击开始按钮(或者按 Win+X),然后点击 Windows PowerShell(管理员)

    5. 点击以确认提升权限提示。

    6. 将该计算机加入您的 Active Directory 域,然后重启:

      Add-Computer -Domain DOMAIN -Restart
      

      DOMAIN 替换为您的 Active Directory 域的 DNS 名称。

      等待重启过程完成,大约需要 1 分钟。

预留集群 IP 地址

现在,您需要在 VPC 网络中预留两个静态 IP 地址。这两个地址的用途不同:

  • 负载均衡器 IP:客户端使用此 IP 地址连接到 SQL Server。
  • 集群 IP:此 IP 地址仅供 WSFC 在内部使用。

如需预留静态 IP 地址,请执行以下操作:

  1. 为内部负载均衡器预留静态 IP 地址并在名为 LOADBALANCER_ADDRESS 的新环境变量中捕获该地址:

    gcloud compute addresses create wsfc \
      --subnet $SUBNET_NAME \
      --region $(gcloud config get-value compute/region)
    
    LOADBALANCER_ADDRESS=$(gcloud compute addresses describe wsfc \
      --region $(gcloud config get-value compute/region) \
      --format=value\(address\)) && \
    echo "Load Balancer IP: $LOADBALANCER_ADDRESS"
    

    请记下该 IP 地址,稍后您将用到它。

  2. 预留另一个用作集群 IP 地址的静态 IP 地址:

    gcloud compute addresses create wsfc-cluster \
      --subnet $SUBNET_NAME \
      --region $(gcloud config get-value compute/region) && \
    CLUSTER_ADDRESS=$(gcloud compute addresses describe wsfc-cluster \
        --region $(gcloud config get-value compute/region) \
        --format=value\(address\)) && \
    echo "Cluster IP: $CLUSTER_ADDRESS"
    

    请记下该 IP 地址,稍后您将用到它。

您的项目和 VPC 现在已准备好部署 WSFC 和 SQL Server。

创建见证者文件共享

如需准备 witness 以充当文件共享见证者,请创建文件共享并授予自己和两个 WSFC 节点对文件共享的访问权限:

  1. 使用远程桌面连接到 witness。 使用您的网域用户账号登录。
  2. 右键点击开始按钮(或者按 Win+X),然后点击 Windows PowerShell(管理员)
  3. 点击以确认提升权限提示。
  4. 创建见证者文件夹并共享该文件夹:

    New-Item "C:\QWitness" -Type directory
    
    icacls C:\QWitness\ /grant 'node-1$:(OI)(CI)(M)'
    icacls C:\QWitness\ /grant 'node-2$:(OI)(CI)(M)'
    
    New-SmbShare `
      -Name QWitness `
      -Path "C:\QWitness" `
      -Description "SQL File Share Witness" `
      -FullAccess  $env:username,node-1$,node-2$
    

部署故障切换集群

您现在可以使用虚拟机实例部署 WSFC 和 SQL Server。

部署 WSFC

您现在即可创建故障切换集群。

  1. 使用远程桌面连接到 node-1。 使用您的网域用户账号登录。
  2. 右键点击开始按钮(或者按 Win+X),然后点击 Windows PowerShell(管理员)
  3. 点击以确认提升权限提示。
  4. 创建新集群:

    New-Cluster `
      -Name windows-fci `
      -Node node-1,node-2 `
      -NoStorage `
      -StaticAddress CLUSTER_ADDRESS
    

    CLUSTER_ADDRESS 替换为您之前创建的集群 IP 地址。

    该命令会在您的 Active Directory 域中创建一个计算机账号 windows-fci

  5. 返回 witness 上的 PowerShell 会话,并授予算机账号访问文件共享的 windows-fci 权限:

    icacls C:\QWitness\ /grant 'windows-fci$:(OI)(CI)(M)'
    Grant-SmbShareAccess `
      -Name QWitness `
      -AccountName 'windows-fci$' `
      -AccessRight Full `
      -Force
    
  6. 返回 node-1 上的 PowerShell 会话,并将集群配置为使用 witness 上的文件共享作为集群仲裁:

    Set-ClusterQuorum -FileShareWitness \\witness\QWitness
    
  7. 验证是否已成功创建集群:

    Test-Cluster
    

    您可能会看到一些可以放心地忽略的警告:

    WARNING: System Configuration - Validate All Drivers Signed: The test reported some warnings..
    WARNING: Network - Validate Network Communication: The test reported some warnings..
    WARNING:
    Test Result:
    HadUnselectedTests, ClusterConditionallyApproved
    Testing has completed for the tests you selected. You should review the warnings in the Report.  A cluster solution is
    supported by Microsoft only if you run all cluster validation tests, and all tests succeed (with or without warnings).
    

    您还可以通过运行 cluadmin.msc 来启动故障切换集群管理器 MMC 管理单元以查看集群的健康状况。

  8. 如果您使用的是代管式 AD,请将 WSFC 使用的计算机账号添加到 Cloud 服务网域加入账号组,以便它可以将计算机加入网域:

    Install-WindowsFeature RSAT-ADDS
    Add-ADGroupMember `
      -Identity "Cloud Service Domain Join Accounts" `
      -Members windows-fci$
    

启用存储空间直通

现在,您可以启用 S2D 并创建集群共享卷,该卷将您之前创建的三个永久性磁盘组合在一起:

  1. 返回 node-1 上的 PowerShell 会话。
  2. 启用 S2D:

    Enable-ClusterStorageSpacesDirect
    

    (可选)如果您希望提升磁盘性能,则除了标准 SSD 永久性磁盘外,还可以在 S2D 节点中添加 SCSI 本地 SSD。本地 SSD 可以充当 S2D 缓存层。使容量驱动器(本例中使用的是 SSD 永久性磁盘)的数量是本地 SSD 数量的倍数。运行以下命令以使用缓存启用 S2D:

    Enable-ClusterStorageSpacesDirect -CacheDeviceModel "EphemeralDisk"
    

    在系统提示您确认时,接受默认值。您可能会看到一些可以放心地忽略的警告:

    WARNING: 2021/04/08-13:12:26.159 Node node-1: No disks found to be used for cache
    WARNING: 2021/04/08-13:12:26.159 Node node-2: No disks found to be used for cache
    
  3. (可选)将集群共享卷 (CSV) 内存缓存设置为 2048 MB,以提高读取吞吐量:

    (Get-Cluster).BlockCacheSize = 2048
    
  4. 创建一个使用 ReFS 集群共享卷版本和 64 KB 集群大小的新卷:

    New-Volume `
      -StoragePoolFriendlyName S2D* `
      -FriendlyName FciVolume `
      -FileSystem CSVFS_ReFS `
      -UseMaximumSize `
      -AllocationUnitSize 65536
    

测试存储池故障切换

(可选)您现在可以测试存储空间池故障切换功能是否正常运行:

  1. 使用远程桌面连接到 node-2。 使用您的网域用户账号登录。
  2. 右键点击开始按钮(或者按 Win+X),然后选择运行
  3. 输入 cluadmin.msc 并选择确定
  4. 在左侧窗口窗格中,导航到故障切换集群管理器 > window-fci > 存储 > 池

    您应该会看到一个名称为集群池 1 的池,所有者节点设置为 node-1

  5. 返回 Cloud Shell 并重置 node-1 虚拟机以模拟故障切换:

    gcloud compute instances reset node-1 --zone $REGION-a
    
  6. 返回 node-2 上的故障切换集群管理器

  7. 反复按 F5 刷新视图以观察存储空间池的状态。

    大约 30 秒后,所有者节点应自动切换到 node-2

移除默认的 SQL Server 安装

现在,您可以从两个节点中移除默认的 SQL Server 安装,并将其替换为新的 FCI 配置。

对于 node-1node-2 这两个 WSFC 节点中的每一个节点,执行以下步骤:

  1. 右键点击开始按钮(或者按 Win+X),然后点击 Windows PowerShell(管理员)
  2. 点击以确认提升权限提示。
  3. 移除默认的 SQL Server 实例:

    C:\sql_server_install\Setup.exe /Action=Uninstall /FEATURES=SQL,AS,IS,RS /INSTANCENAME=MSSQLSERVER /Q
    
  4. 移除 Microsoft OLE 驱动程序:

    Get-Package -Name "Microsoft OLE*" | Uninstall-Package -Force
    
  5. 移除 Microsoft ODBC 驱动程序:

    Get-Package -Name "Microsoft ODBC*" | Uninstall-Package -Force
    
  6. 重启该计算机:

    Restart-Computer
    
  7. 等待重启过程完成,大约需要 1 分钟。

安装 SQL Server FCI

在安装新的 FCI 配置之前,请验证 node-1 是否为集群中的活跃节点:

  1. 使用远程桌面重新连接到 node-1,然后使用您的网域用户登录。
  2. 右键点击开始按钮(或者按 Win+X),然后选择运行
  3. 输入 cluadmin.msc 并选择确定
  4. 在左侧窗格中,导航到故障切换集群管理器 > windows-fci

    验证当前宿主机服务器是否设置为 node-1

    如果当前主机服务器设为 node-2,请右键点击左侧窗口窗格中的 windows-fci,然后选择更多操作 > 移动核心集群资源 > 选择节点… > 节点-1,然后点击确定

  5. 在左侧窗口窗格中,导航到故障切换集群管理器 > window-fci > 存储 > 池

    验证集群 1所有者节点是否已设置为 node-1

    如果所有者节点设为 node-2,请右键点击该池,依次选择移动 > 选择节点 > 节点-1,然后点击确定

现在,您可以在 node-1 上创建一个新的 SQL Server 故障切换集群安装:

  1. 右键点击开始按钮(或者按 Win+X),然后点击 Windows PowerShell(管理员)
  2. 点击以确认提升权限提示。
  3. 为 SQL 服务器和 SQL 代理创建网域用户账号并分配密码:

    Active Directory

    $Credential = Get-Credential -UserName sql_server -Message 'Enter password'
    New-ADUser `
      -Name "sql_server" `
      -Description "SQL Agent and SQL Admin account." `
      -AccountPassword $Credential.Password `
      -Enabled $true -PasswordNeverExpires $true
    

    托管式 Microsoft AD

    $Credential = Get-Credential -UserName sql_server -Message 'Enter password'
    New-ADUser `
      -Name "sql_server" `
      -Description "SQL Agent and SQL Admin account." `
      -AccountPassword $Credential.Password `
      -Enabled $true -PasswordNeverExpires $true `
      -Path "OU=Cloud,DOMAIN"
    

    DOMAIN 替换为您的网域的标识名,例如 DC=example,DC=org

  4. 启动 SQL Server 设置:

    & c:\sql_server_install\setup.exe
    
  5. 在左侧菜单中,选择安装

  6. 选择新建 SQL Server 故障切换集群安装

  7. Microsoft Update 页面上,选择下一步开始安装。

  8. 安装故障切换集群规则页面上,您会看到警告 MSCS 集群验证警告Windows 防火墙。您可以忽略这些警告,然后选择下一步

  9. 产品密钥页面上,保留默认值,然后选择下一步

  10. 许可条款页面上,查看条款;如果接受条款,请选择下一步

  11. 功能选择页面上,选择数据库引擎服务,然后选择下一步

  12. 实例配置页面上,输入 sql 作为网络名称并输入已命名实例,然后选择下一步

  13. 集群资源组页面上,保留默认设置,然后选择下一步

  14. 集群磁盘选择页面上,启用集群虚拟磁盘 (FciVolume),并停用所有其他磁盘。选择下一步

  15. 集群网络配置页面上,配置以下设置,然后选择下一步

    • DHCP:清除。
    • IP 地址:输入内部负载均衡器的 IP 地址。
  16. 服务器配置页面上,为 SQL Server 代理SQL Server 数据库引擎配置以下设置:

    • 账号名称DOMAIN\sql_server,其中 DOMAIN 是 Active Directory 域的 NetBIOS 名称
    • 密码:输入您之前创建的密码
  17. 选择排序标签页并选择要使用的排序规则。然后点击下一步

  18. 数据库引擎配置页面上,选择添加当前用户以将当前用户指定为 SQL Server 管理员。然后,选择下一步

  19. 准备好安装页面上,查看设置,然后选择安装

  20. 安装完成后,选择关闭

现在,您的 Active Directory 域包含一个计算机账号 sql(代表 SQL Server 实例)以及一个指向内部负载均衡器 IP 地址的相应 DNS 条目。

现在,将 node-2 添加到 SQL Server 故障切换集群:

  1. 使用远程桌面连接到 node-2,然后使用您的网域用户登录。
  2. 右键点击开始按钮(或者按 Win+X),然后点击 Windows PowerShell(管理员)
  3. 点击以确认提升权限提示。
  4. 启动 SQL Server 设置:

    & c:\sql_server_install\setup.exe
    
  5. 在左侧菜单中,选择安装

  6. 选择向 SQL Server 故障切换集群添加节点

  7. 按照安装向导的说明操作并接受默认设置,直到您到达服务账号页面。

  8. 服务账号页面上,输入您之前为 SQL Server 代理SQL Server 数据库引擎创建的密码。然后,选择下一步

  9. 准备好安装页面上,查看设置,然后选择安装

  10. 安装完成后,选择关闭

配置健康检查

在最后一步中,配置集群以公开可供内部负载均衡器使用的健康检查端点:

  1. 返回 node-2 上的 PowerShell 会话
  2. 使用负载均衡器的 IP 地址初始化变量。

    $LoadBalancerIP = 'IP_ADDRESS'
    

    IP_ADDRESS 替换为您之前预留的 wsfc 地址的 IP 地址。

  3. 配置故障切换集群以响应健康检查服务:

    $SqlGroup = Get-ClusterGroup |
      Where-Object {$_.Name.StartsWith("SQL Server")}
    $SqlIpAddress = Get-ClusterResource |
      Where-Object {$_.Name.StartsWith("SQL IP Address")}
    
    $SqlIpAddress | Set-ClusterParameter -Multiple @{
     'Address'=$LoadBalancerIP;
     'ProbePort'= 59997;
     'SubnetMask'='255.255.255.255';
     'Network'= (Get-ClusterNetwork).Name;
     'EnableDhcp'=0; }
    
  4. 重启集群资源:

    $SqlIpAddress | Stop-ClusterResource
    $SqlIpAddress | Start-ClusterResource
    
  5. 重启集群组:

    $SqlGroup | Stop-ClusterGroup
    $SqlGroup | Start-ClusterGroup
    

创建内部负载均衡器

如需为 SQL Server 客户端提供单个端点,您现在需要部署内部负载均衡器,该负载均衡器会使用健康检查来确保流量定向到 WSFC 的活跃节点。

  1. 返回到现有的 Cloud Shell 会话。
  2. 创建两个非代管式实例组(每个可用区一个),并将这两个节点添加到组中:

    gcloud compute instance-groups unmanaged create wsfc-group-1 --zone $REGION-a
    gcloud compute instance-groups unmanaged add-instances wsfc-group-1 --zone $REGION-a \
      --instances node-1
    
    gcloud compute instance-groups unmanaged create wsfc-group-2 --zone $REGION-b
    gcloud compute instance-groups unmanaged add-instances wsfc-group-2 --zone $REGION-b \
      --instances node-2
    
  3. 创建健康检查,负载均衡器用其确定哪一个是活动节点。

    gcloud compute health-checks create tcp wsfc-healthcheck \
      --check-interval="2s" \
      --healthy-threshold=1 \
      --unhealthy-threshold=2 \
      --port=59997 \
      --timeout="1s"
    

    健康检查探测端口 59997,该端口先前已配置为 SQL Server IP 地址资源的 ProbePort

  4. 创建后端服务并添加两个实例组:

    gcloud compute backend-services create wsfc-backend \
      --load-balancing-scheme internal \
      --region $(gcloud config get-value compute/region) \
      --health-checks wsfc-healthcheck \
      --protocol tcp
    
    gcloud compute backend-services add-backend wsfc-backend \
      --instance-group wsfc-group-1 \
      --instance-group-zone $REGION-a \
      --region $REGION
    
    gcloud compute backend-services add-backend wsfc-backend \
      --instance-group wsfc-group-2 \
      --instance-group-zone $REGION-b \
      --region $REGION
    
  5. 创建内部负载均衡器:

    gcloud compute forwarding-rules create wsfc-sql \
      --load-balancing-scheme internal \
      --address $LOADBALANCER_ADDRESS \
      --ports 1433 \
      --network $VPC_NAME \
      --subnet $SUBNET_NAME \
      --region $REGION \
      --backend-service wsfc-backend
    

测试故障切换集群

您已完成故障切换集群的安装,但仍需测试集群能否正常工作。

准备客户端

创建一个新的虚拟机实例,用于连接到故障切换集群:

  1. 返回到现有的 Cloud Shell 会话。
  2. 创建一个新的虚拟机实例:

    gcloud compute instances create sqlclient \
      --zone $REGION-a \
      --machine-type n2-standard-2 \
      --subnet $SUBNET_NAME \
      --image-family sql-ent-2019-win-2022 \
      --image-project windows-sql-cloud \
      --boot-disk-size 50 \
      --boot-disk-type pd-ssd
    
  3. 通过查看虚拟机的串行端口输出来监控其初始化过程:

    gcloud compute instances tail-serial-port-output sqlclient
    

    等待几分钟,直到您看到输出 Instance setup finished,然后按 Ctrl+C。此时,该虚拟机实例已准备就绪,可以使用了。

  4. 为虚拟机实例创建用户名和密码

  5. 使用远程桌面连接到虚拟机,然后使用上一步中创建的用户名和密码登录。

  6. 右键点击开始按钮(或者按 Win+X),然后点击 Windows PowerShell(管理员)

  7. 点击以确认提升权限提示。

  8. 将该计算机加入您的 Active Directory 域:

    Add-Computer -Domain DOMAIN
    

    DOMAIN 替换为您的 Active Directory 域的 DNS 名称。

  9. 重启该计算机:

    Restart-Computer
    

    等待重启过程完成,大约需要 1 分钟。

运行测试

使用 sqlclient 虚拟机测试是否可以连接到故障切换集群,并验证故障切换是否正常运行:

  1. 使用远程桌面连接到 sqlclient,然后使用您的网域用户登录。
  2. 右键点击开始按钮(或者按 Win+X),然后点击 Windows PowerShell
  3. 使用 TCP/IP 和 DNS 名称 sql 连接到 SQL Server 集群,并查询 dm_os_cluster_nodes 表:

    & "$env:ProgramFiles\Microsoft SQL Server\Client SDK\ODBC\170\Tools\Binn\SQLCMD.EXE" `
       -S tcp:sql -E -Q "SELECT * FROM sys.dm_os_cluster_nodes"
    

    输出应如下所示:

    NodeName                       status      status_description is_current_owner
    ------------------------------ ----------- ------------------ ----------------
    NODE-1                                   0 up                                1
    NODE-2                                   0 up                                0
    
    (2 rows affected)
    

    请注意,node-1 是 SQL Server 故障切换集群资源的当前所有者。

  4. 返回到 Cloud Shell 并关闭节点-1 虚拟机以测试故障切换情景。

    gcloud compute instances stop node-1 --zone $REGION-a
    
  5. 重复查询:

    & "$env:ProgramFiles\Microsoft SQL Server\Client SDK\ODBC\170\Tools\Binn\SQLCMD.EXE" `
       -S tcp:sql -E -Q "SELECT * FROM sys.dm_os_cluster_nodes"
    

    现在,输出的内容应如下所示:

    NodeName                       status      status_description is_current_owner
    ------------------------------ ----------- ------------------ ----------------
    NODE-1                                   1 down                              0
    NODE-2                                   0 up                                1
    
    (2 rows affected)
    

    请注意,尽管 node-1 已丢失,但查询仍然成功执行,系统显示 node-2 现在是故障切换集群的当前所有者。

限制

  • 仅 Windows Server 2016 及更高版本支持 S2D。
  • 借助 S2D,每个磁盘仅包含整体数据的一部分。因此,截取永久性磁盘的快照不足以备份您的数据。请改为使用原生 SQL 备份

清理

完成本教程后,您可以清理您创建的资源,让它们停止使用配额,以免产生费用。以下部分介绍如何删除或关闭这些资源。

删除项目

为了避免产生费用,最简单的方法是删除您为本教程创建的项目。

如需删除项目,请执行以下操作:

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

后续步骤