通过 Microsoft SQL Server Always On 故障切换集群实例 (FCI),您可以跨多个 Windows Server 故障切换集群 (WSFC) 节点运行单个 SQL Server 实例。任何时候,其中一个集群节点都会主动托管该 SQL 实例。如果发生故障,WSFC 会自动将该实例资源的所有权转移到另一个节点。
SQL Server FCI 要求将数据置于共享存储空间中,以便跨所有 WSFC 节点访问数据。本指南介绍如何部署 SQL Server 2022 故障切换集群实例,并将处于多写入者模式的永久性磁盘用作共享存储空间。
在本地环境中,如果发生故障切换,您可以让 WSFC 执行 ARP 通知,以通知网络设备某个 IP 地址发生了变化。但是,Google Cloud 会忽略 ARP 通知。因此,您必须实现以下两个选项之一:
- 内部负载均衡器(请参阅运行 Windows Server 故障切换集群)
- 分布式网络名称 (DNN)(请参阅为故障切换集群实例配置 DNN)
本文假定您已在 Google Cloud 上部署了 Active Directory,而且您已基本掌握 SQL Server、Active Directory 和 Compute Engine。
目标
- 部署由两个 SQL Server 虚拟机实例和第三个虚拟机实例(充当文件共享见证者)组成的 WSFC。
- 在 WSFC 上部署 SQL Server FCI。
- 配置负载均衡器或分布式网络名称 (DNN),以便使用 SQL Server 将流量路由到可用性组。
- 通过模拟故障切换来验证集群是否正常运行。
费用
本教程使用 Google Cloud 的计费组件,包括:
- Compute Engine
- Cloud Load Balancing(使用 DNN 配置时不需要)
您可以使用价格计算器根据您的预计用量来估算费用。
准备工作
如需完成本指南,您需要以下各项:
- 至少具有一台网域控制器的 Active Directory 网域。您可以使用代管式 Microsoft AD 创建 Active Directory 网域。或者,您也可以在 Compute Engine 上部署自定义 Active Directory 环境,并设置专用 DNS 转发可用区,用于将 DNS 查询转发到您的网域控制器。
- 有权将计算机加入网域并且能够使用 RDP 登录的 Active Directory 用户。如果您使用的是代管式 Microsoft AD,则可以使用
setupadmin
用户。 - 连接到您的 Active Directory 网域控制器的 Google Cloud 项目和 VPC。
- 用于 WSFC 虚拟机实例的子网。
确保您已查看多写入器模式下的永久性磁盘的当前限制,然后选择一个磁盘在多写入器模式下可用的可用区。
为完成本指南,您还需要一个 Google Cloud 项目:
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
完成本教程后,您可以删除所创建的资源以避免继续计费。如需了解详情,请参阅清理。
准备项目和网络
如需准备 Google Cloud 项目和 VPC 以便部署 SQL Server FCI,请执行以下操作:
在 Google Cloud 控制台中,点击激活 Cloud Shell 按钮,以打开 Cloud Shell。
初始化以下变量:
VPC_NAME=
VPC_NAME
SUBNET_NAME=SUBNET_NAME
其中:
VPC_NAME
:您的 VPC 的名称SUBNET_NAME
:您的子网的名称
设置默认项目 ID:
gcloud config set project
PROJECT_ID
将
PROJECT_ID
替换为您的 Google Cloud 项目的 ID。设置默认可用区:
gcloud config set compute/zone
ZONE
将
ZONE
替换为要在其中部署的可用区的 ID。
创建防火墙规则
如需允许客户端连接到 SQL Server,允许在 WSFC 节点之间进行通信,并使负载均衡器能够执行健康检查,您需要创建多个防火墙规则。如需简化这些防火墙规则的创建操作,您可以使用网络标记:
- 2 个 WSFC 节点由
wsfc-node
标记注释。 - 所有服务器(包括见证者)均由
wsfc
标记注释。
创建使用这些网络标记的防火墙规则:
- 返回到现有的 Cloud Shell 会话。
为 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
创建允许从 Google Cloud 探测器的 IP 地址范围进行健康检查的防火墙规则:(使用 DNN 配置时不需要)
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 节点,而另一个节点充当故障切换节点。这两个虚拟机实例必须:
- 位于同一可用区,以便它们可以使用相同的永久性磁盘。
- 安装了 Windows Server 故障切换集群和 SQL Server。
- 已启用 Compute Engine WSFC 支持。
使用预安装了 SQL Server 2022 的 SQL Server 高级映像。
为了在故障切换情景中提供决定性投票权,实现仲裁,您需要部署第三个虚拟机作为文件共享见证者。
- 返回到现有的 Cloud Shell 会话。
创建将 WSFC 节点分布在底层数据中心基础架构中的分散放置政策,以使其不共享同一宿主机或电源系统:
ZONE=$(gcloud config get-value compute/zone) gcloud compute resource-policies create group-placement spread-placement \ --availability-domain-count 2 \ --region ${ZONE::-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
通过将元数据键
enable-wsfc
设置为true
,创建虚拟机实例并在 WSFC 节点上启用 Windows Server 故障切换集群代理:MACHINE_TYPE=n2-standard-8 gcloud compute instances create node-1 \ --resource-policies spread-placement \ --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 \ --resource-policies spread-placement \ --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" \ --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"
要将 3 个虚拟机实例加入 Active Directory,请对 3 个虚拟机实例中的每个实例执行以下操作:
通过查看虚拟机的串行端口输出来监控其初始化过程:
gcloud compute instances tail-serial-port-output
NAME
将
NAME
替换为虚拟机实例的名称。等待大约 3 分钟,直到您看到输出
Instance setup finished
,然后按 Ctrl+C。此时,该虚拟机实例已准备就绪,可以使用了。为虚拟机实例创建用户名和密码
使用远程桌面连接到虚拟机,然后使用上一步中创建的用户名和密码登录。
右键点击开始按钮(或者按 Win+X),然后点击 Windows PowerShell(管理员)。
点击是以确认提升权限提示。
将该计算机加入您的 Active Directory 网域,然后重启:
Add-Computer -Domain
DOMAIN -Restart
将
DOMAIN
替换为您的 Active Directory 网域的 DNS 名称。等待重启过程完成,大约需要 1 分钟。
以多写入者模式创建永久性磁盘
现在,您将以多写入者模式创建 3 个永久性磁盘,并将每个永久性磁盘挂接到两个 WSFC 节点。
- 返回到现有的 Cloud Shell 会话。
创建 3 个共享永久性磁盘:
PD_SIZE=50 gcloud beta compute disks create datadisk-1 \ --size $PD_SIZE \ --type pd-ssd \ --multi-writer \ --zone $(gcloud config get-value compute/zone) gcloud beta compute disks create datadisk-2 \ --size $PD_SIZE \ --type pd-ssd \ --multi-writer \ --zone $(gcloud config get-value compute/zone) gcloud beta compute disks create datadisk-3 \ --size $PD_SIZE \ --type pd-ssd \ --multi-writer \ --zone $(gcloud config get-value compute/zone)
将磁盘挂接到
node-1
:gcloud compute instances attach-disk node-1 --disk datadisk-1 gcloud compute instances attach-disk node-1 --disk datadisk-2 gcloud compute instances attach-disk node-1 --disk datadisk-3
将磁盘挂接到
node-2
:gcloud compute instances attach-disk node-2 --disk datadisk-1 gcloud compute instances attach-disk node-2 --disk datadisk-2 gcloud compute instances attach-disk node-2 --disk datadisk-3
预留集群 IP 地址
现在,您需要在 VPC 中预留两个静态 IP 地址。一个 IP 地址用作 WSFC 集群 IP 地址,另一个地址由内部负载均衡器使用。
为内部负载均衡器预留静态 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 地址,稍后您将用到它。
预留另一个用作集群 IP 地址的静态 IP 地址:(使用 DNN 配置时不需要)
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 节点对文件共享的访问权限:
- 使用远程桌面连接到
witness
。 使用您的网域用户账号登录。 - 右键点击开始按钮(或者按 Win+X),然后点击 Windows PowerShell(管理员)。
- 点击是以确认提升权限提示。
创建见证者文件夹并共享该文件夹:
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
您现在即可创建故障切换集群。
- 使用远程桌面连接到
node-1
。 使用您的网域用户账号登录。 - 右键点击开始按钮(或者按 Win+X),然后点击 Windows PowerShell(管理员)。
- 点击是以确认提升权限提示。
创建新集群:
- 对于负载均衡器配置
New-Cluster ` -Name sql-cluster ` -Node node-1,node-2 ` -NoStorage ` -StaticAddress
CLUSTER_ADDRESS
将
CLUSTER_ADDRESS
替换为您之前创建的集群 IP 地址。- 对于 DNN 配置
New-Cluster ` -Name sql-cluster ` -Node node-1,node-2 ` -NoStorage ` -ManagementPointNetworkType Distributed
返回
witness
上的 PowerShell 会话,并授予集群的虚拟机对象访问文件共享的权限:icacls C:\QWitness\ /grant 'sql-cluster$:(OI)(CI)(M)' Grant-SmbShareAccess ` -Name QWitness ` -AccountName 'sql-cluster$' ` -AccessRight Full ` -Force
返回
node-1
上的 PowerShell 会话,并将集群配置为使用witness
上的文件共享作为集群仲裁:Set-ClusterQuorum -FileShareWitness \\witness\QWitness
验证是否已成功创建集群:
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 管理单元以查看集群的健康状况。如果您使用的是代管式 AD,请将 WSFC 使用的计算机账号添加到 Cloud 服务网域加入账号组,以便它可以将计算机加入网域:
Add-ADGroupMember ` -Identity "Cloud Service Domain Join Accounts" ` -Members sql-cluster$
创建存储空间池
现在,您可以创建一个存储空间池(用于将您之前创建的三个永久性磁盘组合在一起),并使用该存储空间池创建集群共享卷:
- 返回
node-1
上的 PowerShell 会话。 创建使用 3 个永久性磁盘的新存储空间池:
$NodeName = [System.Net.Dns]::GetHostName() $ClusterDisks = Get-PhysicalDisk -CanPool $True | Where-Object { ($_ | Get-PhysicalDiskStorageNodeView | Select-Object -Property StorageNodeObjectId) -like ('*' + $NodeName + '*') } $Pool = New-StoragePool ` -StorageSubsystemFriendlyName 'Clustered*' ` -FriendlyName FciPool ` -PhysicalDisks $ClusterDisks ` -ResiliencySettingNameDefault Simple ` -Verbose
在存储空间池上,创建一个使用 ReFS 集群共享卷版本和 64 KB 集群大小的新卷:
$Pool | New-Volume ` -FriendlyName FciVolume ` -FileSystem CSVFS_ReFS ` -Size 100GB ` -AllocationUnitSize 65536
由于底层永久性磁盘挂接到这两个虚拟机实例,因此该卷会自动显示在
node-2
上。打开故障切换集群管理器 MMC 管理单元:
cluadmin.msc
在左侧窗口窗格中,导航到故障切换集群管理器 > sql-cluster > 存储 > 磁盘。
右键点击集群虚拟磁盘 (FciVolume),然后选择从集群共享卷中移除。
选择集群虚拟磁盘 (FciVolume)。
在底部的卷标签页中,右键点击卷并选择更改驱动器盘符。
选择盘符 D,然后点击确定。
测试存储池故障切换
(可选)您现在可以测试存储空间池故障切换功能是否正常运行:
- 使用远程桌面连接到
node-2
。 使用您的网域用户账号登录。 - 右键点击开始按钮(或者按 Win+X),然后选择运行
- 输入
cluadmin.msc
并选择确定。 在左侧窗口窗格中,导航到故障切换集群管理器 > sql-cluster > 存储 > 池。
您应该会看到一个名称为集群池 1 的池,所有者节点设置为
node-1
。返回 Cloud Shell 并重置
node-1
虚拟机以模拟故障切换:gcloud compute instances reset node-1
返回
node-2
上的故障切换集群管理器。反复按 F5 刷新视图以观察存储空间池的状态。
大约 30 秒后,所有者节点应自动切换到
node-2
。
移除默认的 SQL Server 安装
现在,您可以从两个节点中移除默认的 SQL Server 安装,并将其替换为新的 FCI 配置。
对于 node-1
和 node-2
这两个 WSFC 节点中的每一个节点,执行以下步骤:
- 右键点击开始按钮(或者按 Win+X),然后点击 Windows PowerShell(管理员)。
- 点击是以确认提升权限提示。
移除默认的 SQL Server 实例:
C:\sql_server_install\Setup.exe /Action=Uninstall /FEATURES=SQL,AS,IS,RS /INSTANCENAME=MSSQLSERVER /Q
移除 Microsoft OLE 驱动程序:
Get-Package -Name "Microsoft OLE*" | Uninstall-Package -Force
移除 Microsoft ODBC 驱动程序:
Get-Package -Name "Microsoft ODBC*" | Uninstall-Package -Force
重启该计算机:
Restart-Computer
等待重启过程完成,大约需要 1 分钟。
安装 SQL Server FCI
在安装新的 FCI 配置之前,请验证 node-1
是否为集群中的活跃节点:
- 使用远程桌面重新连接到
node-1
,然后使用您的网域用户登录。 - 右键点击开始按钮(或者按 Win+X),然后选择运行
- 输入
cluadmin.msc
并选择确定。 在左侧窗口窗格中,导航到故障切换集群管理器 > sql-cluster。
验证当前宿主机服务器是否设置为
node-1
。如果当前主机服务器设为
node-2
,请右键点击左侧窗口窗格中的 sql-cluster,然后选择更多操作 > 移动核心集群资源 > 选择节点… > 节点-1,然后点击确定。在左侧窗口窗格中,导航到故障切换集群管理器 > sql-cluster > 存储 > 池。
验证集群 1 的所有者节点是否已设置为
node-1
。如果所有者节点设为
node-2
,请右键点击该池,依次选择移动 > 选择节点 > 节点-1,然后点击确定。
现在,您可以在 node-1
上创建一个新的 SQL Server 故障切换集群安装:
- 右键点击开始按钮(或者按 Win+X),然后点击 Windows PowerShell(管理员)。
- 点击是以确认提升权限提示。
为 SQL 服务器和 SQL 代理创建网域用户账号并分配密码:
$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
启动 SQL Server 设置:
& c:\sql_server_install\setup.exe
在左侧菜单中,选择安装。
选择新建 SQL Server 故障切换集群安装。
在版本页面上,选中我只有 SQL Server 许可,然后选择下一步。
在许可条款页面上,查看条款;如果接受条款,请选择下一步。
在 Microsoft Update 页面上,选择下一步开始安装。
在安装故障切换集群规则页面上,您会看到警告 MSCS 集群验证警告和 Windows 防火墙。您可以忽略这些警告,然后选择下一步。
在功能选择页面上,选择数据库引擎服务,然后选择下一步。
在实例配置页面上,输入
sql
作为网络名称,然后选择下一步。在集群资源组页面上,保留默认设置,然后选择下一步。
在集群磁盘选择页面上,选择集群虚拟磁盘 (FciVolume),然后选择下一步。
在集群网络配置页面上,配置以下设置,然后选择下一步:
- DHCP:清除。
- IP 地址:输入内部负载均衡器的 IP 地址。
在服务器配置页面上,为 SQL Server 代理和 SQL Server 数据库引擎配置以下设置:
- 账号名称:
DOMAIN\sql_server
,其中DOMAIN
是 Active Directory 网域的 NetBIOS 名称 - 密码:输入您之前创建的密码
- 账号名称:
选择排序标签页并选择要使用的排序规则。然后点击下一步。
在数据库引擎配置页面上,选择添加当前用户以将当前用户指定为 SQL Server 管理员。然后,选择下一步。
在准备好安装页面上,查看设置,然后选择安装。
安装完成后,选择关闭。
现在,将 node-2
添加到 SQL Server 故障切换集群:
- 使用远程桌面连接到
node-2
,然后使用您的网域用户登录。 - 右键点击开始按钮(或者按 Win+X),然后点击 Windows PowerShell(管理员)。
- 点击是以确认提升权限提示。
启动 SQL Server 设置:
& c:\sql_server_install\setup.exe
在左侧菜单中,选择安装。
选择向 SQL Server 故障切换集群添加节点。
按照安装向导的说明操作并接受默认设置,直到您到达服务账号页面。
在服务账号页面上,输入您之前为 SQL Server 代理和 SQL Server 数据库引擎创建的密码。然后,选择下一步。
在准备好安装页面上,查看设置,然后选择安装。
安装完成后,选择关闭。
配置健康检查
在最后一步中,配置集群以公开可供内部负载均衡器使用的健康检查端点:
- 返回
node-2
上的 PowerShell 会话 使用负载均衡器的 IP 地址初始化变量。
$LoadBalancerIP = '
IP_ADDRESS
'将
IP_ADDRESS
替换为您之前预留的wsfc
地址的 IP 地址。配置故障切换集群以响应健康检查服务:
$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; }
重启集群资源:
$SqlIpAddress | Stop-ClusterResource $SqlIpAddress | Start-ClusterResource
重启集群组:
$SqlGroup | Stop-ClusterGroup $SqlGroup | Start-ClusterGroup
创建内部负载均衡器
如需为 SQL Server 客户端提供单个端点,您现在需要部署内部负载均衡器,该负载均衡器会使用健康检查来确保流量定向到 WSFC 的活跃节点。
- 返回到现有的 Cloud Shell 会话。
创建非代管式实例组,并将两个节点添加到该组:
gcloud compute instance-groups unmanaged create wsfc-group gcloud compute instance-groups unmanaged add-instances wsfc-group --instances node-1,node-2
创建健康检查,负载均衡器用其确定哪一个是活动节点。
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
的端口。创建后端服务并添加实例组:
gcloud compute backend-services create wsfc-backend \ --load-balancing-scheme internal \ --region $(gcloud config get-value compute/zone | rev | cut -c 3- | rev) \ --health-checks wsfc-healthcheck \ --protocol tcp gcloud compute backend-services add-backend wsfc-backend \ --instance-group wsfc-group \ --instance-group-zone $(gcloud config get-value compute/zone) \ --region $(gcloud config get-value compute/zone | rev | cut -c 3- | rev)
创建内部负载均衡器:
gcloud compute forwarding-rules create wsfc-sql \ --load-balancing-scheme internal \ --address $LOADBALANCER_ADDRESS \ --ports 1433 \ --network $VPC_NAME \ --subnet $SUBNET_NAME \ --region $(gcloud config get-value compute/zone | rev | cut -c 3- | rev) \ --backend-service wsfc-backend
配置 DNN 资源和 DNN DNS 名称
与内部负载均衡器类似,DNN 资源充当 SQL Server 客户端的单个网关。在故障切换期间,集群会将流量无缝路由到处于活动状态的 SQL Server FCI 节点。客户端使用 DNS 名称连接到 SQL Server FCI。
- 返回
node-1
上的 PowerShell 会话。 执行脚本以创建 DNN 资源
$DNNResourceName='fci-dnn' $DNN_DNSName='fcidnn' # create the DNN resource Add-ClusterResource -Name $DNNResourceName -ResourceType 'Distributed Network Name' -Group 'SQL Server (MSSQLSERVER)' # set the DNS name of the DNN resource Get-ClusterResource -Name $DNNResourceName | Set-ClusterParameter -Name DnsName -Value $DNN_DNSName # start the DNN resource Start-ClusterResource -Name $DNNResourceName
重启
node-1
和node-2
测试故障转移集群
您已完成故障切换集群的安装,但仍需测试集群能否正常工作。
准备客户端
创建一个新的虚拟机实例,用于连接到故障切换集群:
- 返回到现有的 Cloud Shell 会话。
创建一个新的虚拟机实例:
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
通过查看虚拟机的串行端口输出来监控其初始化过程:
gcloud compute instances tail-serial-port-output sqlclient
等待 3 分钟直到您看到输出实例设置完成,然后按 Ctrl+C。此时,该虚拟机实例已准备就绪,可以使用了。
为虚拟机实例创建用户名和密码
使用远程桌面连接到虚拟机,然后使用上一步中创建的用户名和密码登录。
右键点击开始按钮(或者按 Win+X),然后点击 Windows PowerShell(管理员)。
点击是以确认提升权限提示。
将该计算机加入您的 Active Directory 网域:
Add-Computer -Domain
DOMAIN
将
DOMAIN
替换为您的 Active Directory 网域的 DNS 名称。重启该计算机:
Restart-Computer
等待重启过程完成,大约需要 1 分钟。
运行测试
使用 sqlclient
虚拟机测试是否可以连接到故障切换集群,并验证故障切换是否正常运行:
- 使用远程桌面连接到
sqlclient
,然后使用您的网域用户登录。 - 右键点击开始按钮(或者按 Win+X),然后点击 Windows PowerShell。
使用 SQL Server 集群的网络名称
sql
连接到该集群,并查询dm_os_cluster_nodes
表:& "$env:ProgramFiles\Microsoft SQL Server\Client SDK\ODBC\170\Tools\Binn\SQLCMD.EXE" ` -S
SQL_SERVER_NAME
-E -Q "SELECT * FROM sys.dm_os_cluster_nodes"将
SQL_SERVER_NAME
替换为sql
(适用于负载均衡器配置)或fcidnn
(适用于 DNN 配置)。输出应如下所示:
NodeName status status_description is_current_owner ------------------------------ ----------- ------------------ ---------------- NODE-1 0 up 1 NODE-2 0 up 0 (2 rows affected)
请注意,
node-1
是 SQL Server 故障切换集群资源的当前所有者。返回到 Cloud Shell 并关闭节点-1 虚拟机以测试故障切换情景。
gcloud compute instances stop node-1
重复查询:
& "$env:ProgramFiles\Microsoft SQL Server\Client SDK\ODBC\170\Tools\Binn\SQLCMD.EXE" ` -S
SQL_SERVER_NAME
-E -Q "SELECT * FROM sys.dm_os_cluster_nodes"将
SQL_SERVER_NAME
替换为sql
(适用于负载均衡器配置)或fcidnn
(适用于 DNN 配置)。现在,输出的内容应如下所示:
NodeName status status_description is_current_owner ------------------------------ ----------- ------------------ ---------------- NODE-1 1 down 0 NODE-2 0 up 1 (2 rows affected)
请注意,尽管
node-1
已丢失,但查询仍然成功执行,系统显示node-2
现在是故障切换集群的当前所有者。
清除数据
完成本教程后,您可以清理您创建的资源,让它们停止使用配额,以免产生费用。以下部分介绍如何删除或关闭这些资源。
删除项目
为了避免产生费用,最简单的方法是删除您为本教程创建的项目。
如需删除项目,请执行以下操作:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
后续步骤
- 详细了解多写入者模式下的永久性磁盘。
- 了解如何配置使用存储空间直通的 SQL Server 故障切换集群实例。