运行 Windows Server 故障转移集群

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

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

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

架构

本教程将介绍如何在 Compute Engine 上创建示例故障转移集群。示例系统包含以下三个服务器:

  • 一个运行 Windows Server 2016 的主要 Compute Engine 虚拟机实例。
  • 一个配置为与主要实例匹配的次要实例。
  • 一个 AD 域名服务器 (DNS)。此服务器执行以下操作:

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

您只是为了启用此示例而创建 AD DNS。在生产系统中,您可以在其他位置托管文件共享见证者,并且您不需要单独的专用 AD 系统来支持故障转移集群。有关在 GCP 上使用 AD 的文章链接,请参阅后续步骤

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

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

了解网络路由

集群进行故障转移时,请求必须转到新的活动节点。集群技术一般使用将 IP 地址与 MAC 地址相关联的地址解析协议 (ARP) 来处理路由。在 GCP 中,虚拟私有云 (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。
  • 内部负载平衡器会停止将流量路由到故障节点,而且改为将流量路由到新的活动节点。

集成整合

在复习一些概念后,需要注意架构图的一些细节:

  • 虚拟机的 Compute Engine 代理名为 wsfc-2,将以 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 Platform Console 中的 Cloud Shell。虽然可以使用 GCP Console 界面或 Cloud SDK 来设置故障转移集群,但本教程将主要使用 Cloud Shell,方便您学习。此方法可以帮助您更快地完成本教程。如果更合适的话,一些步骤会改用 GCP Console。

Cloud Shell

与此同时,最好截取 Compute Engine 永久性磁盘的快照。如果出现问题,您就可以使用快照,以免从头开始。本教程会建议截取快照的好时机。

如果您发现进展不符合预期,您阅读的章节中可能会有说明。否则,请参阅问题排查部分。

目标

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

费用

本教程使用的 Compute Engine 映像包含 Windows Server 许可。这意味着如果保持虚拟机处于运行状态,则运行本教程的费用就非常高。最好是停止那些您没有使用的虚拟机。

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

准备工作

  1. 登录您的 Google 帐号。

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

  2. 选择或创建 Google Cloud Platform 项目。

    转到“管理资源”页面

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

    了解如何启用结算功能

  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. 对于本教程,请打开主网络上的端口 22 和 3389 以启用 SSH 和 RDP 连接。在以下命令中,将 [YOUR_IPv4_ADDRESS] 替换为用于连接到虚拟机实例的计算机的 IP 地址。在生产系统中,您可以提供 IP 地址范围或一系列地址

    gcloud compute firewall-rules create allow-ssh --network wsfcnet --allow tcp:22,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
    allow-all-subnet  wsfcnet  INGRESS    1000      all
    allow-ssh         wsfcnet  INGRESS    1000      tcp:22,tcp:3389

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

添加自定义元数据,以在 Compute Engine 代理中启用故障转移集群。为简单起见,本教程使用项目范围的元数据,其将这些属性应用于项目中的所有虚拟机。其他选项包括为每个虚拟机添加单独的元数据,或在每个虚拟机上创建配置文件,如 Compute Engine 文档中所述。本教程依赖 wsfc-addrswsfc-agent-port 的默认行为。您无需设置这些值。

gcloud compute project-info add-metadata --metadata enable-wsfc=true

创建服务器

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

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

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

  • 将实例命名为 wsfc-1
  • --zone 标志设置为您附近的地区。将 [YOUR_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

运行以下命令,并将 [YOUR_ZONE] 替换为您的地区名称:

gcloud compute instances create wsfc-1 --zone [YOUR_ZONE] --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

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

对于第二个服务器,请按照相同步骤执行操作,但以下情况除外:

  • 将实例名称设置为 wsfc-2
  • --private-network-ip 标志设置为 10.0.0.5

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

gcloud compute instances create wsfc-2 --zone [YOUR_ZONE] --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

为 Active Directory 创建第三个服务器

对于网域控制器,请按照相同步骤执行操作,但以下情况除外:

  • 将实例名称设置为 wsfc-dc
  • --private-network-ip 标志设置为 10.0.0.6

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

gcloud compute instances create wsfc-dc --zone [YOUR_ZONE] --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-a  n1-standard-2               10.0.0.5     35.203.130.194  RUNNING
wsfc-dc  us-central1-a  n1-standard-2               10.0.0.6     35.197.27.2     RUNNING

创建 Compute Engine 实例组

创建实例组以包含集群节点,这样您便可以创建所需的内部负载平衡器。您将在下一部分中创建负载平衡器。请勿将网域控制器 wsfc-dc 添加到实例组。

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

gcloud compute instance-groups unmanaged create wsfc-group --zone=[YOUR_ZONE]
gcloud compute instance-groups unmanaged add-instances wsfc-group --instances wsfc-1,wsfc-2 --zone [YOUR_ZONE]

通过 RDP 连接

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

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

    了解如何使用 RDP

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

配置 Windows 网络

获取 GCP 网关的 IP 地址。在 Cloud Shell 中,将 [YOUR_REGION] 替换为您区域的名称,并运行:

gcloud compute networks subnets describe wsfcnetsub1 --region [YOUR_REGION]

输出包括网关的 IP 地址,例如:

gatewayAddress: 10.0.0.1

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

  1. 在“服务器管理器”的左窗格中,选择本地服务器
  2. 以太网下的属性窗格中,点击由 DHCP 分配
  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 地址。此 IP 地址位于这部分的开头。

  9. 对于 wsfc-1wsfc-2,请点击使用以下 DNS 服务器地址。请注意,wsfc-dc 是网域控制器,因此在该虚拟机上将默认网关留空。

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

  11. 关闭所有对话框。

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

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

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

现在是截取 wsfc-1wsfc-2 快照的好时机。

设置 Active Directory

现在,设置网域控制器。

  1. 使用 RDP 连接到名为 wsfc-dc 的服务器。
  2. 设置本地管理员帐号的密码。
  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. 对于全名用户登录名,输入“clusteruser”。
  4. 点击下一步
  5. 输入并确认用户的密码。选择对话框中的密码选项。例如,您可以将密码设置为永不过期。
  6. 确认设置,然后点击完成
  7. 使 clusteruser 成为 wsfc-dc 上的管理员:

    • wsfc-dc 上,转到“Active Directory 用户和计算机”应用。
    • 右键点击 clusteruser,点击添加到组,输入 Administrators,然后点击确定

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

将服务器加入网域

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

  1. 服务器管理器 > 本地服务器属性窗格中,点击工作组
  2. 点击更改
  3. 选择网域,然后输入“WSFC.TEST”。
  4. 点击确定
  5. 提供 WSFC.TEST\clusteruser 的凭据,以加入网域。
  6. 点击确定
  7. 关闭对话框,并按照提示重启服务器。
  8. 使 clusteruser 成为 wsfc-1wsfc-2 上的管理员。

    • 双击计算机管理 > 本地用户和组 > > 管理员,然后点击添加
    • 输入“clusteruser”并点击检查名称
    • 点击确定

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

设置故障转移集群

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

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

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

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

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

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

    • 接入点页面的“创建集群向导”中,将您的集群命名为“testcluster”。

    • 地址字段中,输入“10.0.0.8”。

    Microsoft 说明

添加集群管理员

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

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

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

创建文件共享见证

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

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

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

  • 使用 Windows Server 集群藉由存储空间直通提供此共享。此 Windows Server 2016 功能可以为仲裁见证提供高可用性共享。例如,您可以为 Active Directory 网域控制器创建一个集群,以提供可用性高的网域服务,同时还提供文件共享见证。
  • 使用文件服务器解决方案,如 Avere vFXT

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

  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. 选择配置文件共享见证
  6. 对于文件共享路径,输入共享文件夹的路径,例如“\10.0.0.6\clusterwitness-testcluster”。在本示例中,10.0.0.6 是 wsfc-dc 虚拟机的 IP 地址。
  7. 确认设置,然后点击完成

测试故障转移集群

您的 Windows Server 故障转移集群现在应该正常工作。您可以测试在实例之间手动移动集群资源。您尚未完成测试,但这是一个很好的检查时机,您可以验证您所完成的所有工作是否都有效。

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

    Move-ClusterGroup -Name "Cluster Group"
    

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

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

如果没有遗漏任何问题,您现在可以继续操作,以设置内部负载平衡器;需要内部负载平衡器,才能将网络流量路由到集群中的当前主机服务器。

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

添加角色

在 Windows 故障转移集群中,由角色托管集群工作负载。您可以使用角色在集群中指定您的应用所使用的 IP 地址。在本教程中,您将为测试工作负载添加角色,即 Internet Information Services (IIS) 网络服务器。请按照以下步骤操作:

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

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

创建内部负载平衡器

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

  1. 在 GCP Console 中,转到负载平衡页面:

    打开负载平衡

  2. 点击创建负载平衡器

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

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

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

先不要点击创建

配置后端

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

  1. 点击后端配置
  2. 选择您的当前区域。
  3. 选择 wsfcnet 作为网络
  4. 选择 wsfc-group 作为实例组
  5. 创建运行状况检查。

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

配置前端

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

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

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

检查并最终确定

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

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

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

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

  1. 返回 GCP 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 防火墙规则。您至少应允许所有入站 TCP 连接通过 IP 地址 130.211.0.0/2235.191.0.0/16 的端口 59998。

验证负载平衡器

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

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

    打开负载平衡

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

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

    运行状况良好列中,您应该会看到:1 / 2

    此结果符合预期。对于您的两个集群节点而言,只有一个节点在故障转移集群中随时处于活动状态,因此负载平衡器运行状况检查仅用于该活动节点。

    即使您在运行状况良好列中看不到正确的结果,也请继续执行下一步。有时您至少需要执行一次故障转移操作,让负载平衡器找到 IP 地址。

  3. 要进行故障转移,请右键点击“故障转移集群管理器”中的 IIS 角色,然后点击移动 > 可能最佳的节点。此操作会将角色移动到所有者角色字段中显示的新节点:

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

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

  5. 返回负载平衡页面,点击刷新,然后验证运行状况良好列是否仍显示 1 / 2

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

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

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

输出如下所示:

backend: https://www.googleapis.com/compute/v1/projects/[PROJECT_NAME]/zones/us-west1-a/instanceGroups/wsfc-group
status:
  healthStatus:
  - healthState: UNHEALTHY
    instance: https://www.googleapis.com/compute/v1/projects/[PROJECT_NAME]/zones/us-west1-a/instances/wsfc-1
    ipAddress: 10.0.0.4
    port: 80
  - healthState: HEALTHY
    instance: https://www.googleapis.com/compute/v1/projects/[PROJECT_NAME]/zones/us-west1-a/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. 在“服务器管理器”顶部的属性部分中,关闭 IE 增强安全配置
    3. 打开 Internet Explorer。
    4. 浏览到每个服务器的 IP 地址:

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

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

修改默认网页

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

  1. 使用 RDP 连接到名为 wsfc-1 的虚拟机。
  2. 以管理员身份运行“记事本”。
  3. 在“记事本”中打开 C:\inetpub\wwwroot\iistart.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]
    
  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。

使用 DHCP 的集群节点

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

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

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

清理

为避免因本教程中使用的资源而造成我们向您的 Google Cloud Platform 帐号收取费用,请执行以下操作:

完成此故障转移集群教程后,您可以清理在 Google Cloud Platform 上创建的资源,这样日后就无需为这些资源支付费用。以下部分介绍如何删除或关闭这些资源。

删除项目

最简单的避免支付费用的方法是删除您为本教程创建的项目。

要删除项目,请运行以下命令:

  1. 在 GCP Console 中,转到“项目”页面。

    转到“项目”页面

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

删除实例

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

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

    转到“虚拟机实例”页面

  2. 点击 要删除的实例旁边的复选框。
  3. 点击页面顶部的删除按钮以删除实例。

删除永久性磁盘

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

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

    转到“磁盘”页面

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

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

后续步骤

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

发送以下问题的反馈:

此网页
Compute Engine 文档