运行 Windows Server 故障转移集群

您可以在 Google Cloud Platform (GCP) 上使用 Windows Server 来创建故障转移集群。利用一组服务器协同工作,为您的 Windows 应用提供更高的可用性 (HA)。如果一个集群节点发生故障,则另一个节点可以接管运行该软件。您可以将故障转移配置为自动运行(这是常见配置),也可以手动触发故障转移。

本教程假定您熟悉故障转移集群、Active Directory (AD) 以及 Windows Server 管理。

如需简要了解 GCP 中的网络,请参阅“面向数据中心专家的 GCP:网络”

架构

本教程将带您逐步了解如何在 Compute Engine 上创建故障转移集群示例。示例系统包含以下两个服务器:

  • 其一为在地区 a 中运行 Windows Server 2016 的 Compute Engine 虚拟机主实例。
  • 其二为根据地区 b 中的主实例配置的另一个相匹配实例。

此外,您还要部署一个 AD 网域控制器,在本教程中,该控制器具有以下用途:

  • 提供 Windows 网域。
  • 将主机名解析为 IP 地址。
  • 托管充当第三张“投票”的文件共享见证,用于实现集群要求的仲裁

您可以在任意地区中创建网域控制器。本教程使用地区 c。在生产系统中,您可以在其他位置托管文件共享见证,不需要只是为了支持故障转移集群就部署单独的 AD 系统。有关在 GCP 上使用 AD 的文章链接,请参阅后续步骤

用于部署故障转移集群的两个服务器位于不同的地区,以确保每个服务器位于不同的物理机器上,防止出现小概率地区性故障。

下图说明了您按照本教程部署的架构。

显示故障转移集群中两个 Compute Engine 虚拟机的架构图

共享存储空间选项

本教程未介绍如何为高可用性共享存储空间设置文件服务器。

Google Cloud 支持多种可用于 Windows Server 故障转移集群的共享存储空间解决方案,其中包括:

如需了解其他可能的共享存储空间解决方案,请参阅:

了解网络路由

集群进行故障转移时,请求必须转到新的活跃节点。集群技术一般使用将 IP 地址与 MAC 地址相关联的地址解析协议 (ARP) 来处理路由。在 GCP 中,Virtual Private Cloud (VPC) 系统使用软件定义网络,该网络不使用 MAC 地址。这意味着通过 ARP 广播的更改完全不影响路由。集群需要来自内部负载平衡器的一些软件层面的帮助,才能使路由正常工作。

通常,内部负载平衡功能会在 VPC 内部的多个后端实例之间分配传入的网络流量,以便分担负载。 而对于故障转移集群,则只会使用内部负载平衡功能将所有流量全部路由到一个实例:即,当前的活跃集群节点。内部负载平衡检测正确节点的方式如下:

  • 每个虚拟机实例均运行为 Windows 故障转移集群提供支持的 Compute Engine 代理实例。该代理可跟踪虚拟机实例的 IP 地址。
  • 负载平衡器的前端为应用提供传入流量的 IP 地址。
  • 负载平衡器的后端提供运行状况检查。运行状况检查流程定期使用虚拟机实例的固定 IP 地址,通过特定端口,对每个集群节点上的代理执行 ping 操作。默认端口为 59998。
  • 运行状况检查将应用的 IP 地址作为负载添加到请求中。
  • 代理将请求中的 IP 地址与主机虚拟机的 IP 地址列表相比较。如果代理发现匹配项,则会响应 1。如未发现,则会响应 0。
  • 负载平衡器会将任何通过运行状况检查的虚拟机标记为运行状况良好。 任何时候都只有一个虚拟机能通过运行状况检查,因为只有一个虚拟机具有该工作负载的 IP 地址。

故障转移期间会发生什么

集群中发生故障转移时,会发生以下更改:

  • Windows 故障转移集群会更改活跃节点的状态,以表明其发生故障。
  • 故障转移集群会按照仲裁的判定,将任何集群资源和角色从故障节点移动到最佳节点。此操作包括移动关联的 IP 地址。
  • 故障转移集群会广播 ARP 数据包,以通知基于硬件的网络路由器该 IP 地址已移动。在这种情况中,GCP 网络会忽略这些数据包。
  • 移动后,故障节点的虚拟机上的 Compute Engine 代理会将其对运行状况检查的响应从 1 更改为 0,这是因为虚拟机不再托管请求中指定的 IP 地址。
  • 新活跃节点的虚拟机上的 Compute Engine 代理也会将其对运行状况检查的响应从 0 更改为 1。
  • 内部负载平衡器会停止将流量路由到故障节点,而且改为将流量路由到新的活跃节点。

集成整合

现在,您已了解了一些概念,下面是需要注意的架构图中的一些细节:

  • 名为 wsfc-2 的虚拟机上的 Compute Engine 代理会对其运行状况检查响应 1,表明它是活跃集群节点。而对 wsfc-1 响应 0。
  • 负载平衡器会将请求路由至 wsfc-2,如箭头所示。
  • 负载平衡器和 wsfc-2 都具有 IP 地址 10.0.0.9。对于负载平衡器而言,这是指定的前端 IP 地址。对于虚拟机而言,这是应用的 IP 地址。故障转移集群会在当前活跃节点上设置此 IP 地址。
  • 故障转移集群和 wsfc-2 都具有 IP 地址 10.0.0.8。该虚拟机具有此 IP 地址,因为它当前托管了集群资源。

本教程的学习建议

本教程包含许多步骤。有时,教程会要求您按照 Microsoft 文档等外部文档中的步骤执行操作。请勿漏掉本文档中的备注,这些备注提供了有关按照外部步骤执行操作的详细信息。

本教程以 Google Cloud Console 中的 Cloud Shell 为例。虽然也可以使用 Cloud Console 界面或 Cloud SDK 来设置故障转移集群,但本教程主要使用的是 Cloud Shell,以方便您学习。此方法可以帮助您更快地学完本教程。有些步骤也会因为适用的原因而使用 Cloud Console。

Cloud Shell

建议您最好全程截取 Compute Engine 永久性磁盘的快照。如果出现问题,您就可以使用快照,以免从头开始。本教程也会对应在何时截取快照提供建议。

如果您发现进展不符合预期,或许可在您正在阅读的章节中找到相关说明。否则,请参阅问题排查部分。

目标

  • 创建网络。
  • 在两个 Compute Engine 虚拟机上安装 Windows Server 2016。
  • 在第三个 Windows Server 实例上安装和配置 Active Directory。
  • 设置故障转移集群,包括仲裁的文件共享见证和工作负载的角色。
  • 设置内部负载平衡器。
  • 测试故障转移操作,以验证集群是否正常工作。

费用

本教程使用的 Compute Engine 映像包含 Windows Server 许可。这意味着如果一直让虚拟机保持运行状态,则运行本教程的费用会相当可观。最好是在不用的时候关停虚拟机。

如需估算完成本教程的费用,请参阅价格计算器

准备工作

  1. 登录您的 Google 帐号。

    如果您还没有 Google 帐号,请注册一个新帐号

  2. 在 Cloud Console 的项目选择器页面上,选择或创建 Cloud 项目。

    转到项目选择器页面

  3. 确保您的 Google Cloud 项目已启用结算功能。 了解如何确认您的项目已启用结算功能

  4. 启用 Compute Engine API。

    启用 API

  5. 启动 Cloud Shell 实例。
    打开 Cloud Shell

创建网络

您的集群需要一个自定义网络。在 Cloud Shell 中运行 gcloud 命令,使用 VPC 创建自定义网络和一个子网。

  1. 创建网络:

    gcloud compute networks create wsfcnet --subnet-mode custom
    

    您所创建网络的名称是 wsfcnet

  2. 创建子网。将 [YOUR_REGION] 替换为附近的 GCP 区域:

    gcloud compute networks subnets create wsfcnetsub1 --network wsfcnet --region [YOUR_REGION] --range 10.0.0.0/16
    

    您所创建子网的名称是 wsfcnetsub1

请注意,此子网中 IP 地址的 CIDR 范围为 10.0.0.0/16。这是本教程使用的示例范围。在生产系统中,请与您的网络管理员协作,为系统分配适合的 IP 地址范围。

创建防火墙规则

默认情况下,您的网络不会开放外部流量。您必须在防火墙中打开端口,才能启用与服务器的远程连接。在 Cloud Shell 中使用 gcloud 命令来创建规则。

  1. 在本教程中,会打开主网络上的端口 3389 以启用 RDP 连接。在以下命令中,将 [YOUR_IPv4_ADDRESS] 替换为用于连接到虚拟机实例的计算机的 IP 地址。在生产系统中,您可以提供 IP 地址范围或一系列地址

    gcloud compute firewall-rules create allow-rdp --network wsfcnet --allow tcp:3389 --source-ranges [YOUR_IPv4_ADDRESS]
    
  2. 在子网上,允许所有端口上的所有协议,以使服务器能够相互通信。在生产系统中,请根据需要考虑仅打开特定端口。

    gcloud compute firewall-rules create allow-all-subnet --network wsfcnet --allow all --source-ranges 10.0.0.0/16
    

    请注意,source-ranges 值与您用于创建子网的 CIDR 范围匹配。

  3. 查看防火墙规则:

    gcloud compute firewall-rules list
    

    您看到的输出结果应该类似于以下内容:

    NAME              NETWORK  DIRECTION  PRIORITY  ALLOW            DENY  DISABLED
    allow-all-subnet  wsfcnet  INGRESS    1000      all                    False
    allow-rdp         wsfcnet  INGRESS    1000      tcp:3389               False

在 Compute Engine 中启用故障转移集群

如需在 Compute Engine 代理中启用故障转移集群,您需要通过以下方式之一在虚拟机定义中添加标志 enable-wsfc=true:将其指定为虚拟机的自定义元数据或在每个虚拟机上创建一个配置文件,如 Compute Engine 文档中所述。

在本教程中,我们将该标志定义为创建虚拟机时的自定义元数据,如下一部分所述。本教程还沿用 wsfc-addrswsfc-agent-port 的默认行为,因此您无需设置这些值。

创建服务器

接下来,请创建 3 个服务器。在 Cloud Shell 中使用 gcloud 命令。

创建第一个集群节点服务器

创建新的 Compute Engine 实例。按如下方式配置实例:

  • 将实例命名为 wsfc-1
  • --zone 标志设置为您附近较为便利的地区。例如 us-central1-a
  • --machine-type 标志设置为 n1-standard-2.
  • --image-project 标志设置为 windows-cloud
  • --image-family 标志设置为 windows-2016
  • --scopes 标志设置为 https://www.googleapis.com/auth/compute
  • 设置 --can-ip-forward 标志以启用 IP 转发。
  • --private-network-ip 标志设置为 10.0.0.4
  • 将网络设置为 wsfcnet 并将子网设置为 wsfcnetsub1
  • 使用 --metadata 参数设置 enable-wsfc=true

运行以下命令,将 [YOUR_ZONE_1] 替换为您第一个地区的名称:

gcloud compute instances create wsfc-1 --zone [YOUR_ZONE_1] --machine-type n1-standard-2 --image-project windows-cloud --image-family windows-2016 --scopes https://www.googleapis.com/auth/compute --can-ip-forward --private-network-ip 10.0.0.4 --network wsfcnet --subnet wsfcnetsub1 --metadata enable-wsfc=true

创建第二个集群节点服务器

请按照相同步骤创建第二个服务器,但注意以下几点不同:

  • 将实例名称设置为 wsfc-2
  • --zone 标志设置为用于第一个服务器的地区以外的其他地区。例如 us-central1-b
  • --private-network-ip 标志设置为 10.0.0.5

[YOUR_ZONE_2] 替换为您第二个地区的名称:

gcloud compute instances create wsfc-2 --zone [YOUR_ZONE_2] --machine-type n1-standard-2 --image-project windows-cloud --image-family windows-2016 --scopes https://www.googleapis.com/auth/compute --can-ip-forward --private-network-ip 10.0.0.5 --network wsfcnet --subnet wsfcnetsub1  --metadata enable-wsfc=true

为 Active Directory 创建第三个服务器

请按照相同步骤为网域控制器创建服务器,但注意以下几点不同:

  • 将实例名称设置为 wsfc-dc
  • --zone 标志设置为用于另两个服务器的地区以外的其他地区。例如 us-central1-c
  • --private-network-ip 标志设置为 10.0.0.6
  • 省略 --metadata enable-wsfc=true

[YOUR_ZONE_3] 替换为您的地区名称:

gcloud compute instances create wsfc-dc --zone [YOUR_ZONE_3] --machine-type n1-standard-2 --image-project windows-cloud --image-family windows-2016 --scopes https://www.googleapis.com/auth/compute --can-ip-forward --private-network-ip 10.0.0.6 --network wsfcnet --subnet wsfcnetsub1

查看您的实例

您可以查看有关您所创建实例的详细信息。

gcloud compute instances list

您将会看到类似于以下内容的输出:

NAME     ZONE           MACHINE_TYPE  PREEMPTIBLE INTERNAL_IP  EXTERNAL_IP     STATUS
wsfc-1   us-central1-a  n1-standard-2             10.0.0.4     35.203.131.133  RUNNING
wsfc-2   us-central1-b  n1-standard-2             10.0.0.5     35.203.130.194  RUNNING
wsfc-dc  us-central1-c  n1-standard-2             10.0.0.6     35.197.27.2     RUNNING

连接到您的虚拟机

如需连接到基于 Windows 的虚拟机,必须首先为虚拟机生成密码,然后使用 RDP 连接到虚拟机。

生成密码

  1. 转到虚拟机实例页面。

    打开虚拟机实例

  2. 点击需要新密码的虚拟机实例的名称。

  3. 在实例详情页面上,点击设置 Windows 密码按钮。系统会为您生成一个密码。复制密码并将其存储在安全的地方。

通过 RDP 建立连接

Compute Engine 文档详细介绍了如何使用 RDP 连接到 Windows 虚拟机实例。您可以执行以下任一操作:

  • 使用现有客户端。
  • 将 Chrome RDP 插件添加到您的浏览器,然后通过 Cloud Console 建立连接。

    了解如何使用 RDP

每当本教程要求您连接到 Windows 实例时,请使用您的首选 RDP 连接。

配置 Windows 网络

创建虚拟机时分配的内部 IP 地址是静态地址。为了确保 Windows 将这些 IP 地址视为静态地址,您需要将其与默认网关和 DNS 服务器的 IP 地址一起添加到 Windows Server 网络配置中。

使用 RDP 连接到 wsfc-1wsfc-2wsfc-dc,并对每个实例重复执行以下步骤:

  1. 在“服务器管理器”的左窗格中,选择本地服务器
  2. 属性窗格的以太网条目中,点击由支持 IPv6 的 DHCP 分配的 IPv4 地址
  3. 右键点击以太网,然后选择属性
  4. 双击 Internet 协议第四版 (TCP/IPv4)
  5. 选择使用以下 IP 地址
  6. 输入在创建虚拟机时为其分配的内部 IP 地址。

    • 对于 wsfc-1,输入“10.0.0.4”。
    • 对于 wsfc-2,输入“10.0.0.5”。
    • 对于 wsfc-dc,输入“10.0.0.6”。
  7. 对于子网掩码,输入“255.255.0.0”。

  8. 对于默认网关,输入在创建子网 wsfcnetsub1 时系统自动为默认网关预留的 IP 地址 10.0.0.1

    默认网关的 IP 地址始终是子网的主要 IP 地址范围内的第二个地址。请参阅虚拟私有云 (VPC) 网络概览中的“预留 IP 地址”。

  9. 仅针对 wsfc-1wsfc-2

    1. 点击使用以下 DNS 服务器地址

    2. 对于首选 DNS 服务器,输入“10.0.0.6”。

  10. 关闭所有对话框。

    这些更改会重置虚拟机实例的虚拟网络适配器,因此会断开 RDP 连接。

  11. 关闭 RDP 会话,然后重新连接到实例。 如果上一步中的对话框仍处于打开状态,请将其关闭。

  12. 在本地服务器的属性部分,验证以太网设置是否反映了本地服务器 IP 地址(10.0.0.410.0.0.510.0.0.6)。如果未反映,请重新打开 Internet 协议第四版 (TCP/IPv4) 对话框并更新设置。

建议您在此时截取 wsfc-1wsfc-2 的快照。

设置 Active Directory

现在,设置网域控制器。

  1. 使用 RDP 连接到名为 wsfc-dc 的服务器。
  2. 使用 Windows 计算机管理桌面应用,为本地管理员帐号设置密码。
  3. 启用本地管理员帐号。
  4. 按照以下 Microsoft 说明中的步骤来设置网域控制器,并遵循以下额外说明。大多数设置都可以使用默认值。

    • 选中“DNS 服务器角色”复选框。此步骤未在说明中详述。
    • 选中必要时自动重启目标服务器复选框。
    • 将文件服务器升级为网域控制器。
    • 添加新林步骤中,将您的域名命名为“WSFC.TEST”。
    • 将 NetBIOS 域名设置为“WSFC”(默认值)。

    Microsoft 说明

建议您在此时截取 wsfc-dc 的快照。

创建网域用户帐号

wsfc-dc 重启可能需要一些时间。将服务器加入网域之前,请使用 RDP 来登录 wsfc-dc,以验证网域控制器正在运行。

您需要一个具有集群服务器管理员权限的网域用户。请按照以下步骤操作:

  1. 在网域控制器 (wsfc-dc) 中,点击开始,然后输入 dsa 以查找并打开“Active Directory 用户和计算机”应用。
  2. 右键点击 WSFC.TEST,指向新建,然后点击用户
  3. 对于全名用户登录名,输入 cluster-admin
  4. 点击下一步
  5. 输入并确认用户的密码。选择对话框中的密码选项。例如,您可以将密码设置为永不过期。
  6. 确认设置,然后点击完成
  7. cluster-admin 设为 wsfc-dc 上的管理员:

    • 右键点击 cluster-admin,然后选择添加到组…
    • 输入 Administrators,然后点击确定

每当需要管理员帐号时,本教程均使用 WSFC.TEST\cluster-admin 帐号作为管理员帐号。在生产系统中,请按照常规安全做法分配帐号和权限。如需了解详情,请参阅故障转移集群所需的 Active Directory 帐号概览

将服务器加入网域

将两个集群节点服务器添加到 WSFC.TEST 网域。在每个集群节点服务器(wsfc-1wsfc-2)上执行以下步骤:

  1. 服务器管理器 > 本地服务器属性窗格中,点击工作组
  2. 点击更改
  3. 选择网域,然后输入“WSFC.TEST”。
  4. 点击确定
  5. 提供 WSFC.TEST\cluster-admin 的凭据,以加入网域。
  6. 点击确定
  7. 关闭对话框,并按照提示重启服务器。
  8. 服务器管理器中,将 cluster-admin 设为 wsfc-1wsfc-2 上的管理员。作为替代方式,您也可以使用组政策来管理管理员权限。

    • 工具菜单上,选择计算机管理 > 本地用户和组 > > 管理员,然后点击添加
    • 输入“cluster-admin”,然后点击检查名称
    • 点击确定

现在是为所有三个虚拟机截取快照的好时机。

设置故障转移集群

为 Compute Engine 中的集群预留 IP 地址

当您创建故障转移集群时,由您分配一个 IP 地址以创建管理接入点。在生产环境中,您可以使用单独的子网中的 IP 地址。 但是在本教程中,您将预留已创建的子网中的 IP 地址。预留 IP 地址可以防止与其他 IP 分配产生冲突。

  1. 在主机虚拟机上打开终端或打开 Cloud Shell。

    转到 Cloud Shell

  2. 预留 IP 地址。在本教程中,请使用 10.0.0.8

    gcloud compute addresses create cluster-access-point --region [YOUR_REGION] --subnet wsfcnetsub1 --addresses 10.0.0.8
  3. 如需确认预留 IP 地址,请使用以下命令:

    gcloud compute addresses list

创建集群

要创建并配置故障转移集群,请执行以下操作:

  1. 使用 RDP 连接 wsfc-1wsfc-2
  2. 按照下面 Microsoft 说明链接中的步骤操作,并遵循以下额外说明:

    • wsfc-1wsfc-2 上安装故障转移集群功能。请勿在 wsfc-dc 上安装故障转移集群功能。
    • 请以网域用户 WSFC.TEST\cluster-admin 身份运行“故障转移集群管理器”应用。否则,您可能会遇到权限问题。建议您始终使用此方式运行“故障转移集群管理器”或以 cluster-admin 身份连接到服务器,以确保您具有必要权限。
    • wsfc-1wsfc-2 添加为集群节点。
    • 验证配置时执行以下操作:

      • 测试选项​页面上,选择仅运行我选择的测试​,​然后点击下一步​
      • 测试选择​页面上,清除存储项,因为在 Compute Engine 上运行时存储​选项会失效(如同在分开的独立物理服务器上一样)。

        您在集群验证期间可能会遇到的常见问题包括:

        • 副本之间只有一个网络接口。您可以忽略此问题,因为它不适用于基于云的设置。
        • 两个副本上的 Windows 更新不同。如果您将 Windows 实例配置为自动应用更新,则其中一个节点可能已应用另一个 Windows 实例尚未下载的更新。您应该让两个服务器具有相同的配置。
        • 正在等待重新启动。您已对其中一个服务器进行了更改,需要重新启动才能应用更改。请勿忽略此问题。
        • 服务器并非都具有相同的网域角色。您可以忽略此问题。
        • 服务器并非都在同一个组织单元 (OU) 中。 本教程并不使用组织单元,但在生产系统中,不妨考虑将您的集群放在它自己的组织单元中。Microsoft 说明中含有此情况的最佳做法。
        • 发现未签名的驱动程序。您可以忽略此问题。
    • 摘要页面上,您可以选择立即使用已验证的节点来创建集群,以继续创建集群,而不是关闭并重新打开向导。

    • 在“创建集群向导”中的接入点页面上:

      • 将您的集群命名为“testcluster”。
      • 地址字段中,输入您之前预留的 IP 地址 10.0.0.8

    Microsoft 说明

添加集群管理员

将网域帐号添加为集群的管理员,这样您便可以从 Windows PowerShell 等工具针对集群执行操作。将 cluster-admin 网域帐号添加为集群管理员。

  1. 在托管集群资源的集群节点上,从“故障转移集群管理器”的左窗格中选择您的集群,然后点击右窗格中的属性
  2. 选择集群权限标签页。
  3. 点击添加,然后添加 cluster-admin
  4. 组或用户名列表中选择 cluster-admin 后,在权限窗格中选择完全控制
  5. 依次点击应用确定

现在是截取快照的好时机。

创建文件共享见证

您具有一个双节点故障转移集群,但该集群使用投票机制决定哪个节点应该处于活跃状态。为了实现仲裁,您可以添加文件共享见证。

本教程仅向网域控制器服务器添加共享文件夹。 如果此服务器在其中一个集群节点重启之际离线,则整个集群可能会停止工作,因为其余服务器无法自行投票。本教程假定实时迁移自动重启等 GCP 基础架构功能足够可靠,能让共享文件夹保持活跃状态。

如果您要创建可用性更高的文件共享见证,可以选择以下选项:

  • 使用 Windows Server 集群藉由存储空间直通提供此共享。 此 Windows Server 2016 功能可以为仲裁见证提供高可用性共享。例如,您可以为 Active Directory 网域控制器创建一个集群,同时提供高可用性网域服务和文件共享见证。
  • 使用文件服务器解决方案,如 Avere vFXT
  • 将 SIOS Datakeeper 等数据复制软件与 Windows 故障转移服务器集群配合使用,以进行同步或异步复制。

请按照以下步骤为见证创建文件共享:

  1. 连接到 wsfc-dc。此服务器托管该文件共享。
  2. 在“资源管理器”中,浏览到 C 盘。
  3. 在标题栏中,点击新建文件夹按钮。
  4. 将新文件夹命名为 shares
  5. 双击 shares 文件夹,以打开此文件夹。
  6. 添加新文件夹并将其命名为 clusterwitness-testcluster

为文件共享见证配置共享

您必须对文件共享见证文件夹设置权限,以允许集群使用此文件夹。

  1. 在“资源管理器”中,右键点击 clusterwitness-testcluster 文件夹,然后选择属性
  2. 共享标签页上,点击高级共享
  3. 选择共享此文件夹
  4. 点击权限,然后点击添加
  5. 点击对象类型,选择计算机,然后点击确定
  6. 添加机器帐号 testcluster$
  7. testcluster$ 授予完全控制权限。
  8. 点击应用,然后关闭所有对话框。

将文件共享见证添加到故障转移集群

现在,配置故障转移集群,以让文件共享见证充当仲裁投票。

  1. 在托管集群资源的计算机 (wsfc-1) 上,打开“故障转移集群管理器”。
  2. 在左侧窗格中,右键点击集群的名称 (testcluster.WSFC.TEST),接着指向更多操作,然后点击配置集群仲裁设置
  3. 选择仲裁配置选项面板上,选取选择仲裁见证
  4. 选择仲裁见证面板上,选择配置文件共享见证
  5. 对于文件共享路径,输入共享文件夹的路径,例如 \\wsfc-dc\clusterwitness-testcluster
  6. 确认设置,然后点击完成

测试故障转移集群

您的 Windows Server 故障转移集群现在应该正常工作。您可以在实例之间手动移动集群资源以进行测试。虽然尚未最终完成,但建议您在此时进行测试,以验证到目前为止所完成的所有操作是否有效。

  1. wsfc-1 上,请记下“故障转移集群管理器”中当前主机服务器的名称。
  2. cluster-admin 身份运行 Windows PowerShell。
  3. 在 PowerShell 中运行以下命令以更改当前主机服务器:

    Move-ClusterGroup -Name "Cluster Group"
    

您应该会看到当前主机服务器的名称已更改为另一个虚拟机的名称。

如果并未更改,请检查之前的步骤看看是否遗漏了任何操作。最常见的问题是遗漏了屏蔽网络访问的防火墙规则。请参阅问题排查部分,确定其他需要检查的问题。

如果发生更改,您现在可以继续设置内部负载平衡器。要将网络流量路由到集群中的当前主机服务器,需要使用内部负载平衡器。

建议您在此时截取快照。

将角色添加到故障转移集群

在 Windows 故障转移集群中,由角色托管集群工作负载。您可以使用角色在集群中指定您的应用所使用的 IP 地址。在本教程中,您将为测试工作负载添加一个角色(即 Internet Information Services (IIS) Web 服务器),并为该角色分配一个 IP 地址。

为 Compute Engine 中的角色预留 IP 地址

为了防止 IP 地址在 Compute Engine 中的子网内产生冲突,请为角色预留 IP 地址。

  1. 在主机虚拟机上打开终端或打开 Cloud Shell。

    转到 Cloud Shell

  2. 预留 IP 地址。在本教程中,请使用 10.0.0.9

    gcloud compute addresses create load-balancer-ip --region [YOUR_REGION] --subnet wsfcnetsub1 --addresses 10.0.0.9
  3. 如需确认预留 IP 地址,请使用以下命令:

    gcloud compute addresses list

添加角色

请按照以下步骤操作:

  1. 在“故障转移集群管理器”的操作窗格中,选择配置角色
  2. 选择角色页面中,选择其他服务器
  3. 客户端接入点页面中,输入名称 IIS
  4. 将地址设置为 10.0.0.9
  5. 跳过选择存储选择资源类型
  6. 确认设置,然后点击完成

显示角色设置的“确认”对话框。

创建内部负载平衡器

创建并配置内部负载平衡器。要将网络流量路由到集群的活跃主机节点,需要使用内部负载平衡器。您将使用 Cloud Console,因为其界面可让您更好地了解内部负载平衡的组织方式。

您还将为集群中的每个地区创建一个 Compute Engine 实例组,供负载平衡器用于管理集群节点。

创建实例组

为包含集群节点的每个地区创建一个实例组,然后将每个节点添加到其所在地区内的实例组中。 请勿将网域控制器 wsfc-dc 添加到实例组中。

  1. 为集群中的每个地区创建一个实例组,将 [ZONE_1] 替换为您第一个地区的名称,将 [ZONE_2] 替换为您第二个地区的名称:

    gcloud compute instance-groups unmanaged create wsfc-group-1 --zone=[ZONE_1]
    gcloud compute instance-groups unmanaged create wsfc-group-2 --zone=[ZONE_2]
  2. 将每个地区中的服务器添加到该地区的实例组中:

    gcloud compute instance-groups unmanaged add-instances wsfc-group-1 --instances wsfc-1 --zone [ZONE_1]
    gcloud compute instance-groups unmanaged add-instances wsfc-group-2 --instances wsfc-2 --zone [ZONE_2]
  3. 确认您的实例组已创建且每个组都包含一个实例:

    gcloud compute instance-groups unmanaged list
      NAME          ZONE           NETWORK  NETWORK_PROJECT   MANAGED  INSTANCES
      wsfc-group-1  us-central1-a  wsfcnet  exampleproject    No       1
      wsfc-group-2  us-central1-b  wsfcnet  exampleproject    No       1

创建负载平衡器

  1. 在 Cloud Console 中,转到负载平衡页面。

    打开负载平衡

    您将看到类似如下所示的输出:

  2. 点击创建负载平衡器

  3. TCP 负载平衡卡片下,点击开始配置

  4. 选择仅在我的虚拟机之间,然后点击继续

  5. 对于名称,请输入“wsfc-lb”。

先不要点击创建

配置后端

回想一下前文,GCP 内部负载平衡器使用定期运行的运行状况检查来确定活跃节点。运行状况检查会 ping 活跃集群节点上正在运行的 Compute Engine 集群主机代理。运行状况检查负载是此应用的 IP 地址,由集群角色表示。如果节点处于活跃状态,则代理以 1 为值做出响应,否则就以 0 做出响应。

  1. 点击后端配置
  2. 选择您的当前区域。
  3. 对于网络,请选择 wsfcnet
  4. 后端下,通过选择实例组的名称然后点击完成来添加您创建的每个实例组。
  5. 创建运行状况检查。

    • 对于名称,请输入“wsfc-hc”。
    • 接受默认协议设置 (TCP),并将端口更改为“59998”,以获取集群主机代理响应。
    • 对于请求,请输入“10.0.0.9”。
    • 对于响应,请输入“1”。
    • 对于检查间隔,请输入“2”。
    • 对于超时,请输入“1”。
    • 点击保存并继续

配置前端

前端配置会创建一个转发规则,用于定义负载平衡器应如何处理传入请求。在本教程中,为了简单起见,您将通过在子网中的虚拟机之间发出请求来测试系统。

在您的生产系统中,您可能想要对互联网流量等外部流量开放系统。为此,您可以创建堡垒主机,该主机会接受外部流量,并将其转发至您的内部网络。本教程不介绍堡垒主机的用法。

  1. 在中央窗格中,点击前端配置
  2. 对于名称,请输入“wsfc-lb-fe”。
  3. 选择您的子网 (wsfcnetsub1)。
  4. 对于内部 IP 地址,请选择 load-balancer-ip (10.0.0.9),也就是您为角色设置的 IP 地址。
  5. 对于端口,请输入“80”。
  6. 点击完成

检查并最终确定

  1. 如需查看内部负载平衡器设置的摘要,请在中央窗格中点击检查并最终确定。此摘要随即会显示在右侧窗格中。
  2. 点击创建。创建负载平衡器需要一些时间。

    Cloud Console 会显示内部负载平衡的最终设置。

为运行状况检查创建防火墙规则

您可能已经注意到,Cloud Console 已向您发送通知,指出运行状况检查系统需要防火墙规则才能让运行状况检查指令达到其目标。在本部分,您将设置防火墙规则。

  1. 返回 Cloud Console 中的 Cloud Shell。

    打开 Cloud Shell

  2. 运行以下命令以创建防火墙规则:

    gcloud compute firewall-rules create allow-health-check --network wsfcnet --source-ranges 130.211.0.0/22,35.191.0.0/16 --allow tcp:59998
    

打开 Windows 防火墙

在每个集群节点(wsfc-1wsfc-2)上,创建 Windows 防火墙规则,以允许负载平衡器访问每个 Windows 系统。

  1. 打开“高级安全 Windows 防火墙”应用。

  2. 在左侧导航窗格中选择入站规则

  3. 在右侧导航窗格中选择新建规则

  4. 规则类型面板上,选择自定义作为规则类型,然后点击下一步

  5. 程序面板上,接受默认值,然后点击下一步

  6. 协议和端口面板上:

    1. 协议类型:字段中,选择 TCP
    2. 本地端口:字段中,选择特定端口并输入 59998
  7. 范围面板上的此规则应用于哪些远程 IP 地址之下:

    1. 选择这些 IP 地址:
    2. 通过点击添加将以下每个 IP 地址添加到此 IP 地址或子网字段中:

      • 130.211.0.0/22
      • 35.191.0.0/16
    3. 点击下一步

  8. 操作面板上,接受允许连接,然后点击下一步

  9. 配置文件面板上,接受默认值,然后点击下一步

  10. 为防火墙规则指定一个名称,然后点击完成

验证负载平衡器

在内部负载平衡器运行后,您可以检查其状态,以验证其能够找到运行状况良好的实例,然后再次测试故障转移。

  1. 返回 Cloud Console 中的负载平衡页面。

    打开负载平衡

  2. 点击负载平衡器的名称 (wsfc-lb)。

    在摘要的后端部分,您应该会看到列出了实例组。

    在下图的 wsfc-lb 负载平衡器的详细信息页面中,实例组 wsfc-group-1 包含活跃节点,在运行状况良好列中以 1 / 1 指示。实例组 wsfc-group-2 包含非活跃节点,以 0 / 1 指示。

    负载平衡器状态显示实例组 wsfc-group-1 中有 1 个(共 1 个)运行状况良好的实例(即 1 / 1),表示它包含活跃节点。

    如果两个实例组都显示 0 / 1,则负载平衡器可能仍在与节点同步。有时您至少需要执行一次故障转移操作,让负载平衡器找到 IP 地址。

  3. 在“故障转移集群管理器”中,展开集群名称,然后点击角色。 在所有者节点列中,记下 IIS 角色的服务器名称。

  4. 通过以下方式启动故障转移:右键点击 IIS 角色,然后选择移动 > 可能最佳的节点。此操作会将角色移动到所有者节点列中显示的另一个节点。

    “故障转移集群管理器”中显示的“所有者节点”字段。

  5. 等待直到状态显示正在运行

  6. 返回负载平衡器详细信息页面,点击刷新,然后验证运行状况良好列中的 1 / 10 / 1 值对应的实例组是否已切换。

    负载平衡器状态显示有 1 个(共 2 个)运行状况良好的实例。

提示:您可以使用 gcloud 工具检查哪个实例运行状况良好,其中 [REGION] 是您的区域:

gcloud compute backend-services get-health wsfc-lb --region=[REGION]

输出如下所示:

backend: https://compute.googleapis.com/compute/v1/projects/exampleproject/zones/us-central1-a/instanceGroups/wsfc-group-1
status:
  healthStatus:
  - healthState: HEALTHY
    instance: https://compute.googleapis.com/compute/v1/projects/exampleproject/zones/us-central1-a/instances/wsfc-1
    ipAddress: 10.0.0.4
    port: 80
  kind: compute#backendServiceGroupHealth
---
backend: https://compute.googleapis.com/compute/v1/projects/exampleproject/zones/us-central1-b/instanceGroups/wsfc-group-2
status:
  healthStatus:
  - healthState: UNHEALTHY
    instance: https://compute.googleapis.com/compute/v1/projects/exampleproject/zones/us-central1-b/instances/wsfc-2
    ipAddress: 10.0.0.5
    port: 80
  kind: compute#backendServiceGroupHealth

安装您的应用

在具有一个集群后,您可以在每个节点上设置您的应用,并配置应用以在集群的环境中运行。

对于本教程,您需要进行一些设置,以展示集群确实是在使用内部负载平衡器。在每个虚拟机上设置 IIS,以提供一个简单的网页。

您不是要设置 IIS 以在集群中实现 HA,而是要创建单独的 IIS 实例以分别提供不同的网页。故障转移后,网络服务器会提供它自己的内容,而不是提供共享内容。

设置您的应用或 IIS 以实现 HA 不在本教程的范围内。

设置 IIS

  1. 在每个集群节点上安装 IIS

    • 选择角色服务页面上,请确保已在常见 HTTP 功能下选择默认文档
    • 确认页面上,选中用于启用目标服务器自动重启的复选框。
  2. 验证每个网络服务器是否正常工作。

    1. 使用 RDP 连接到名为 wsfc-dc 的虚拟机。
    2. 在“服务器管理器”中,点击窗口左侧导航窗格中的本地服务器
    3. 在顶部的属性部分中,关闭 IE 增强安全配置
    4. 打开 Internet Explorer。
    5. 浏览到每个服务器的 IP 地址:

      http://10.0.0.4/
      http://10.0.0.5/

在每种情况中,您都将看到欢迎页面,此页面是默认的 IIS 网页。

修改默认网页

更改每个默认网页,这样您就可以轻松看到当前正在提供该网页的服务器。

  1. 使用 RDP 连接到名为 wsfc-1 的虚拟机。
  2. 以管理员身份运行“记事本”。
  3. 在“记事本”中打开 C:\inetpub\wwwroot\iisstart.htm。请记住要浏览所有文件,而不只是文本文件。
  4. <title> 元素中,将文本更改为当前服务器的名称。例如:

        <title>wsfc-1</title>
    
  5. 保存 HTML 文件。

  6. wsfc-2 重复执行这些步骤,注意将 <title> 元素设置为 wsfc-2

现在,当您查看其中一个服务器提供的网页时,服务器的名称会显示为 Internet Explorer 标签页中的标题。

测试故障转移

  1. 使用 RDP 连接到名为 wsfc-dc 的虚拟机。
  2. 打开 Internet Explorer。
  3. 浏览到负载平衡器角色的 IP 地址:

    http://10.0.0.9/
    

    您将看到欢迎页面,其名称为标签标题中所显示当前服务器的名称。

  4. 停止当前服务器以模拟故障。在 Cloud Shell 中,运行以下命令,将 [INSTANCE_NAME] 替换为您在上一步看到的当前服务器名称,例如 wsfc-1

    gcloud compute instances stop [INSTANCE_NAME] --zone=[ACTIVE_ZONE]
    
  5. 切换到与 wsfc-dc 的 RDP 连接。

    负载平衡器可能需要一些时间来检测此移动并重新路由流量。

  6. 约 30 秒后,在 Internet Explorer 中刷新该页面。

    您现在应该会看到标签页标题中所显示新活跃节点的名称。 例如,如果开始时是 wsfc-1 处于活跃状态,则现在标题中应显示 wsfc-2。如果您没有立即看到更改,或看到“找不到页面”错误,请再次刷新浏览器。

恭喜!您现在具有一个在 GCP 上正常运行的 Windows Server 2016 故障转移集群。

问题排查

如果情况不太正常,您可以检查是否出现了以下常见问题。

GCP 防火墙规则屏蔽了运行状况检查

如果运行状况检查无效,请再次确认您的防火墙规则允许运行状况检查系统使用的 IP 地址 130.211.0.0/2235.191.0.0/16 的传入流量。

Windows 防火墙屏蔽了运行状况检查

请确保每个集群节点的 Windows 防火墙中都打开了端口 59998。请参阅打开 Windows 防火墙

使用 DHCP 的集群节点

集群中的每个虚拟机都必须具有静态 IP 地址。如果将虚拟机配置为使用 Windows 中的 DHCP,请更改 Windows 中的网络设置,以使 IPv4 地址与 Cloud Console 中所示的虚拟机 IP 地址匹配。此外,将网关 IP 地址设置为与 GCP VPC 中的子网网关地址匹配。

防火墙规则中的 GCP 网络标记

如果您在防火墙规则中使用网络标记,请确保在每个虚拟机实例上设置正确的标记。本教程不使用标记,但如果您由于其他一些原因而设置了标记,则必须一贯地使用这些标记。

清理

为避免因本教程中使用的资源导致您的 Google Cloud Platform 帐号产生费用,请执行以下操作:

完成故障转移集群教程后,您可以清理在 Google Cloud 上创建的资源,以免这些资源占用配额,日后产生费用。以下部分介绍如何删除或关闭这些资源。

删除项目

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

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

  1. 在 Cloud Console 中,转到管理资源页面。

    转到“管理资源”页面

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

清理资源而不删除项目

如果您需要保留项目,则可以通过单独删除教程资源来清理教程资源。

删除实例

要删除 Compute Engine 实例,请运行以下命令:

  1. 在 Cloud Console 中,转到虚拟机实例页面。

    转到“虚拟机实例”页面

  2. 点击您要删除的实例对应的复选框。
  3. 点击删除 以删除实例。

删除实例组

  1. 在 Cloud Console 中,转到实例组页面。

    转到“实例组”页面

  2. 点击您要删除的实例组对应的复选框。
  3. 点击删除 以删除实例组。

删除负载平衡器

如需删除负载平衡器,请执行以下操作:

  1. 在 Cloud Console 中,转到“负载平衡”页面。

    转到“负载平衡”页面

  2. 选中您要删除的负载平衡器名称旁边的复选框。

  3. 点击页面顶部的删除按钮。

删除 VPC 网络

如需删除 VPC 网络,请执行以下操作:

  1. 在 Cloud Console 中,转到“VPC 网络”页面。

    转到“VPC 网络”页面

  2. 点击要删除的网络的名称。

  3. 点击页面顶部的删除 VPC 网络按钮。

释放预留 IP 地址

使用 Cloud Shell 释放预留 IP 地址:

  1. 启动 Cloud Shell 实例。
    打开 Cloud Shell

  2. 释放预留 IP 地址

    gcloud compute addresses delete cluster-access-point load-balancer-ip

删除永久性磁盘

如需删除永久性磁盘,请执行以下操作:

  1. 在 Cloud Console 中,转到“磁盘”页面。

    转到“磁盘”页面

  2. 选中要删除的磁盘名称旁的复选框。

  3. 点击页面顶部的删除按钮。

后续步骤