使用 Cloud Volumes Service 在 Google Cloud Platform 上配置 SQL Server


本教程概述了如何使用适用于 Google Cloud 的 NetApp Cloud Volumes Service (CVS),为安装在服务器消息块 (SMB) 文件共享存储上的 SQL Server 配置高弹性 Google Cloud 环境。

通过 Microsoft SQL Server Always On 可用性组 (AG),您可以跨多个 SQL Server Enterprise 实例复制数据库。传统的 SQL Server Always On 实例通常要求每个节点都维护一个数据副本,而随着数据库的增长,这可能会很快变得费用高昂。例如,在传统的 SQL Server Always On 部署中,如果数据库大小为 10 TB,则每个副本必须至少预配 10 TB 的存储空间。为 SQL Server 部署 Windows Server 故障切换集群 (WSFC) 的好处之一是,您只需要有一个数据副本,该副本会在集群的节点之间共享。因此,在 WSFC 上的故障切换集群实例 (FCI) 中运行 SQL Server Always On 可以立即减少所需的存储空间量,从而节省费用。

NetApp Cloud Volumes Service 是一个云端存储空间解决方案,用于结合 Compute Engine 实例来运行高性能 SQL Server 工作负载。Cloud Volumes Service 上基于 SMB 的 SQL Server 数据库可在 Google Cloud 实例和存储服务之间提供极高的弹性。SMB 透明故障切换可让您在 Cloud Volumes Service 上执行维护操作,而不会与在 SMB 卷上存储和访问数据的服务器应用中断连接。为了支持 SMB 透明故障切换,Cloud Volumes Service 支持与 SQL Server 工作负载搭配使用的 SMB 持续可用性 (CA) 共享选项。这可以为单个实例、Always On 故障切换集群 (AOFC) 实例和 Always On 可用性组部署提供性能改进、可伸缩性和成本效益。

本页面适用于负责在 Google Cloud 上部署 Microsoft SQL Server 的 NetApp Cloud Volumes Service 和 SQL Server 数据库管理员。它假定:

  • 您熟悉解决方案的各个组件
  • 您已在 Google Cloud 上部署了 Active Directory

目标

本教程旨在实现以下目标:

  • 创建适用于 SQL Server 的 Cloud Volumes Service 卷
  • 在 Cloud Volumes Service 上部署基于 SMB 的 Always On 故障切换集群

费用

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

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

准备工作

在本教程中,您需要一个 Google Cloud 项目。您可创建一个新项目,也可选择已创建的项目:

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

    Go to project selector

  2. 确保您的 Google Cloud 项目已启用结算功能

  3. 至少具有一台网域控制器的 Active Directory 域。您可以使用代管式 Microsoft AD 创建 Active Directory 域。或者,您也可以在 Compute Engine 上部署自定义 Active Directory 环境,并设置专用 DNS 转发可用区,用于将 DNS 查询转发到您的网域控制器。
  4. 有权将计算机加入网域并且能够使用 RDP 登录的 Active Directory 用户。如果您使用的是代管式 Microsoft AD,则可以使用 setupadmin 用户。
  5. 连接到您的 Active Directory 域控制器的 Google Cloud 项目和 VPC。
  6. 确保已为您的 Google Cloud 项目启用 NetApp Cloud Volumes API
  7. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

准备项目和网络

如需准备 Google Cloud 项目和虚拟私有云 (VPC) 以部署 SQL Server Always On 可用性组,请执行以下操作:

  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。

  5. 设置默认可用区:

    gcloud config set compute/zone ZONE
    

    ZONE 替换为要在其中部署的可用区的 ID。

在适用于 SQL Server 的 Cloud Volumes Service 上创建 SMB

如需创建 Cloud Volumes Service 卷,您必须创建 Active Directory 政策、专用服务访问通道、存储池和存储卷。

  1. 如需创建新的专用服务访问通道,请执行以下操作:

    1. 在 Google Cloud 控制台中,转到 VPC 网络页面。

      前往 VPC 网络

    2. 点击您将使用的 VPC 网络名称。

    3. 点击专用服务访问通道标签页,然后点击分配 IP 范围

      1. 输入内部 IP 范围的名称。
      2. 选择“自动”,然后输入值 24 作为前缀长度
      3. 点击分配按钮。
    4. 点击连到服务的专用连接标签页,然后执行以下操作:

      1. 点击创建连接按钮。
      2. 对于“指定的分配范围”下拉菜单,选择之前分配的 IP 范围。
      3. 点击连接按钮。
  2. 如需创建新的 Active Directory 政策,请执行以下操作:

    1. 在 Google Cloud 控制台中,转到 NetApp Volumes 页面。

      转到“NetApp Volumes”

    2. 在导航窗格中,点击政策部分下的 Active Directory 政策

    3. 点击创建按钮。

    4. 指定 Active Directory 政策的名称。

    5. 区域下,选择最靠近 SQL Server 实例的托管位置的可用区域。

    6. Active Directory connection details(Active Directory 连接详细信息)部分,提供以下信息:

      1. 域的名称
      2. Active Directory DNS 服务器地址
      3. Active Directory 站点名称
      4. 组织部门的名称
      5. NetBIOS 名称前缀
    7. Active Directory credentials(Active Directory 凭据)部分,提供允许将计算机加入指定域的用户的凭据。

    8. SMB settings(SMB 设置)部分,提供 Backup Operators(备份操作员)和 Security privilege users(安全权限用户)(如果适用)。

    9. 点击创建以完成创建新的 Active Directory 政策的过程。

  3. 如需创建新的存储池,请执行以下操作:

    1. 在导航窗格中,点击存储部分下的存储池
    2. 点击创建按钮。
    3. 输入存储池的名称。
    4. 位置下,选择最靠近 SQL Server 实例的托管位置的可用区域。
    5. 选择满足预期存储性能的服务等级
    6. 输入存储池的容量。存储池容量定义可以为池中的所有卷分配的总存储容量。
    7. 网络列表中,选择要在其中托管 SQL Server 实例的 VPC,如下所示:
      1. 点击设置连接按钮。
      2. 选择前面步骤中预留的 IP 地址范围,然后点击继续
      3. 点击创建连接按钮。
    8. Active Directory 政策部分,选择 Assign an Active Directory policy to the storage pool(将 Active Directory 政策分配给存储池),然后选择在上一步中创建的 Active Directory 政策。
    9. 点击创建按钮以完成创建新的存储池的过程。
  4. 如需创建新的存储卷,请执行以下操作:

    1. 在导航窗格中,点击存储部分下的
    2. 点击创建按钮。
    3. 指定存储卷的名称。
    4. Storage pool details(存储池详细信息)下,点击选择存储池以选择上一步中创建的存储池。
    5. 卷详情部分,提供以下信息:
      1. 共享名称
      2. 卷容量
    6. Large capacity configuration(大容量配置)部分,选择 SMB 协议。
    7. Configuration for selected protocol(s)(所选协议的配置)部分,选择 Enable CA share support for SQL Server, FSLogix(为 SQL Server FSLogix 启用 CA 共享支持)。
    8. 点击创建按钮以完成创建新的存储卷的过程。

创建防火墙规则

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

  • 您使用的 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
    

创建虚拟机实例

现在,您将为故障切换集群部署三个虚拟机实例。

Node-1 将托管 SQL Server 数据库的主副本,node-2 将托管辅助副本。这两个虚拟机实例必须:

  • 位于同一区域,以便内部直通式网络负载均衡器可以访问它们
  • 使用 SQL Server 高级映像安装了 WSFC 和 SQL Server 2022

  • 已启用 Compute Engine WSFC 支持

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

  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
    
    # Open firewall for SQL Server replication
    netsh advfirewall firewall add rule name="Allow SQL Server replication" dir=in action=allow protocol=TCP localport=5022
    
    EOF
    
  3. 创建虚拟机实例。在充当 WSFC 节点的两个虚拟机上,通过将元数据键 enable-wsfc 设置为 true,再挂接一个数据磁盘并启用 Windows Server 故障切换集群:

    REGION=$(gcloud config get-value compute/region)
    PD_SIZE=200
    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-2022-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" \
      --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-2022-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" \
      --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 名称。

      等待虚拟机实例重启。

分配存储权限

如需分配针对 Cloud Volume 存储的权限,请完成以下步骤:

  1. 在 Google Cloud 控制台中,选择“Cloud Volumes”,然后选择刚创建的卷。

    Cloud Volume

  2. 使用远程桌面连接到 node-1。 使用您的网域用户账号登录。

  3. 打开 Windows 资源管理器,然后右键点击这台电脑

  4. 选择映射网络驱动器

  5. 将复制的 SMB 路径粘贴到文件夹中。

    Cloud Volume

  6. 登录时,停用“重新连接”选项。

  7. 点击完成

  8. 右键点击已映射的网络驱动器,然后选择属性

    Cloud Volume

  9. 安全标签页中,点击编辑

  10. 移除 Everyone,并添加 SQL Server 安装程序以及具有完全控制权限的 SQL Server 服务账号。

    Cloud Volume

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

预留集群 IP 地址

在 VPC 中预留两个静态 IP 地址,一个用于 WSFC 集群 IP 地址,另一个用于内部负载均衡器。

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

    gcloud compute addresses create wsfc \
      --region $(gcloud config get-value compute/zone | rev | cut -c 3- | rev) \
      --subnet $SUBNET_NAME
    
    LOADBALANCER_ADDRESS=$(gcloud compute addresses describe wsfc \
      --region $(gcloud config get-value compute/zone | rev | cut -c 3- | rev) \
      --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/zone | rev | cut -c 3- | rev) && \
    CLUSTER_ADDRESS=$(gcloud compute addresses describe wsfc-cluster \
      --region $(gcloud config get-value compute/zone | rev | cut -c 3- | rev) \
      --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 地址。

  5. 返回 witness 上的 PowerShell 会话,并授予集群的虚拟机对象访问文件共享的权限:

    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 服务网域加入账号组,以便它可以将虚拟机实例加入网域:

    Add-ADGroupMember `
      -Identity "Cloud Service Domain Join Accounts" `
      -Members windows-fci$
    

移除默认的 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. 等待虚拟机实例重启。

安装 SQL Server FCI

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

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

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

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

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

  1. 右键点击开始按钮(或者按 Win+X),然后点击 Windows PowerShell(管理员)
  2. 点击以确认提升权限提示。

  3. 启动 SQL Server 设置:

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

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

  6. 版本页面上,输入产品密钥,选择软件许可类型,然后点击下一步

  7. 许可条款页面上,查看条款;如果接受条款,请点击下一步

  8. Microsoft Update 页面上,点击下一步开始安装。

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

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

  11. 实例配置页面上,输入 sql 作为网络名称,然后点击下一步

  12. 集群资源组页面上,您可以忽略资格警告,然后点击下一步

  13. 集群磁盘选择页面上,点击下一步

  14. 集群网络配置页面上,配置以下设置,然后点击下一步

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

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

  17. 数据库引擎配置页面上,选择添加当前用户以将当前用户指定为 SQL Server 管理员。在数据目录标签页的数据根目录字段中输入 SMB 路径,然后选择下一步。系统会显示一个消息窗口,通知您验证 SQL Server 服务账号是否拥有完全控制共享权限。选择以继续操作。

    Cloud Volume

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

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

现在,将 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. 创建非代管式实例组,并将两个节点添加到该组:

    REGION=$(gcloud config get-value compute/region)
    
    gcloud compute instance-groups unmanaged create wsfc-group-a \
      --zone $REGION-a
    gcloud compute instance-groups unmanaged add-instances wsfc-group-a \ 
      --zone $REGION-a --instances node-1
    
    gcloud compute instance-groups unmanaged create wsfc-group-b \
      --zone $REGION-b
    gcloud compute instance-groups unmanaged add-instances wsfc-group-b \ 
    --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,即您之前为 WSFC 集群 IP 地址配置为 ProbePort 的端口。

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

    gcloud compute backend-services create wsfc-backend \
      --load-balancing-scheme internal \
      --region $REGION \
      --health-checks wsfc-healthcheck \
      --protocol tcp
    
    gcloud compute backend-services add-backend wsfc-backend \
      --instance-group wsfc-group-a \
      --instance-group-zone $REGION-a \
      --region $REGION
    gcloud compute backend-services add-backend wsfc-backend \
      --instance-group wsfc-group-b \
      --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 \
      --machine-type n2-standard-2 \
      --subnet $SUBNET_NAME \
      --image-family sql-ent-2022-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
    

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

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

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

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

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

  8. 将虚拟机实例加入您的 Active Directory 域:

    Add-Computer -Domain DOMAIN
    

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

  9. 重启虚拟机实例:

    Restart-Computer
    

    等待虚拟机实例重启。

运行测试

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

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

    & "$env:ProgramFiles\Microsoft SQL Server\Client SDK\ODBC\170\Tools\Binn\SQLCMD.EXE" `
       -S 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
    
  5. 重复查询:

    & "$env:ProgramFiles\Microsoft SQL Server\Client SDK\ODBC\170\Tools\Binn\SQLCMD.EXE" `
       -S 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 现在是故障切换集群的当前所有者。

清理

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

删除项目

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

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

  1. 在 Google Cloud 控制台中,进入管理资源页面。

    转到“管理资源”

  2. 在项目列表中,选择要删除的项目,然后点击删除
  3. 在对话框中输入项目 ID,然后点击关闭以删除项目。