使用 Microsoft IIS 后端执行跨区域负载均衡

使用集合让一切井井有条 根据您的偏好保存内容并对其进行分类。

本教程介绍如何使用 Google Compute Engine 的 外部 HTTP(S) 负载均衡器服务,为跨不同 Compute Engine 区域Microsoft Internet Information Services (IIS) Web 服务器分配流量。

情况

您必须为网站 www.example.com 的流量执行负载均衡。您希望确保传入的请求被路由到最近的区域。您还希望确保请求能够故障切换到下一个最近地区中健康状况良好的实例。

配置完此使用场景后,您将拥有一个外部 HTTP(S) 负载均衡器,它可通过单个全局 IP 地址接收请求。此 IP 地址可以通过连接类型(即 HTTP 或 HTTPS)路由每个传入的请求。对于 HTTPS 请求,负载均衡器会在发送请求的客户端和负载均衡器之间执行 SSL/TLS 加密。

下图说明了负载均衡器架构:

跨区域负载平衡图(点击放大)
跨区域负载均衡图(点击放大)

负载均衡器有多个组件,用于实现最大可配置性。有关每个组件的功能说明,请参阅 HTTP(S) 负载均衡概览

  • Compute Engine 虚拟机实例
  • Compute Engine Persistent Disk
  • Windows Server 2012 机器映像

运行本教程所产生的费用取决于运行时间、实例数量、磁盘大小和机器类型。您可使用价格计算器,根据您的预计使用情况来估算费用。如果您是 Google Cloud 的新手,可能有资格申请免费试用

本教程假定:

  • 您正在使用 Windows 机器。
  • 您已创建 Google Cloud Console 项目
  • 您已安装 gcloud CLI。您可以使用此工具与 Google Cloud 进行交互。
  • 您已运行 gcloud auth login 完成 Google Cloud 身份验证。
  • 您已安装所选的远程桌面协议 (RDP) 客户端。如需了解详情,请参阅 Microsoft 远程桌面客户端。 如果您已安装 RDP 客户端,则可以跳过此任务。
  • 您已阅读并理解 HTTP(S) 负载平衡概览

  • 您已将您的项目设置为 gcloud CLI 与之交互的默认项目。如果还没有进行此设置,请运行以下命令来执行此操作:

    PS C:\> gcloud config set --project <project_name>
    

设置后端实例

在本节中,您将在不同的区域中创建两个后端服务。每个后端服务将包括两个后端实例,每个后端实例均在 Windows Server 2012 上运行一个 Microsoft IIS Web 服务器。为避免对每个服务器进行手动配置,您将从一个服务器实例创建磁盘映像,然后使用此映像创建其他服务器实例。

创建来源映像实例

创建用作源映像的实例:

  1. 在本地 Windows 机器上,打开 PowerShell。
  2. us-central1 区域创建新的 Windows Server 2012 实例,并向实例添加 rdp-tagwww-tag 标记。稍后,您将创建指定这些标记的防火墙规则来启用实例的外部访问权限:

    PS C:\> gcloud compute instances create src-img ^
         --zone us-central1-f --image windows-2012-r2 ^
         --tags rdp-tag,www-tag

创建源映像实例后,请设置防火墙规则以允许从外部访问实例:

  1. 创建防火墙规则以允许从外部访问标记为 rdp-tag 的所有实例上的端口 3389。此规则允许使用 RDP 访问源映像实例以及使用 rdp-tag 标记的任何后续实例:

    PS C:\> gcloud compute firewall-rules create rdp-rule ^
         --allow tcp:3389 --source-ranges 0.0.0.0/0 ^
         --target-tags rdp-tag
  2. 创建另一个防火墙规则,以允许从外部访问标记为 www-tag 的所有实例上的端口 80。此规则允许源映像实例以及使用 www-tag 标记的任何后续实例发送和接收 HTTP 流量:

     PS C:> gcloud compute firewall-rules create www-rule ^
         --allow tcp:80 --source-ranges 0.0.0.0/0 ^
         --target-tags www-tag

配置源映像实例

接下来,请在源映像实例上创建一个新的 Windows 用户并建立 RDP 连接:

  1. 在网络浏览器中,访问 Google Cloud 控制台中的“虚拟机实例”页面,然后点击源映像实例的名称 (src-img)。
  2. 点击设置 Windows 密码按钮。
  3. 设置新的 Windows 密码对话框中,添加您的用户名。
  4. 点击设置以在实例上创建用户帐号。
  5. 复制提供的密码并关闭对话框。
  6. 点击 RDP 下拉列表,然后选择下载 RDP 文件选项以为您的实例下载 RDP 文件。

    使用此文件通过 RDP 客户端连接到实例。如需了解详情,请参阅 Microsoft 远程桌面客户端

与源映像实例建立 RDP 连接后,请安装 IIS 并添加默认主页:

  1. 在源映像实例上,以管理员身份打开 PowerShell。
  2. 在 PowerShell 中,粘贴以下内容以安装 IIS 服务和依赖项:

    PS C:\> Dism /Online /Enable-Feature /FeatureName:IIS-WebServerRole /FeatureName:IIS-WebServer /FeatureName:IIS-StaticContent /FeatureName:IIS-DefaultDocument /FeatureName:IIS-DirectoryBrowsing /FeatureName:IIS-HttpErrors /FeatureName:IIS-HealthAndDiagnostics /FeatureName:IIS-HttpLogging /FeatureName:IIS-LoggingLibraries /FeatureName:IIS-RequestMonitor /FeatureName:IIS-Security /FeatureName:IIS-RequestFiltering /FeatureName:IIS-HttpCompressionStatic /FeatureName:IIS-WebServerManagementTools /FeatureName:IIS-ManagementConsole /FeatureName:WAS-WindowsActivationService /FeatureName:WAS-ProcessModel /FeatureName:WAS-NetFxEnvironment /FeatureName:WAS-ConfigurationAPI /All
  3. 安装服务后,在 C:\inetpub\wwwroot(IIS 的默认网络目录)中创建一个新的主页:

    PS C:\> Echo '<!doctype html><html><body><h1>Hello World!</h1></body></html>' > C:\inetpub\wwwroot\index.html

验证您的源映像实例是否能够传送内容

在网络浏览器中,导航到“虚拟机实例”页面。 点击实例的外部 IP 以验证实例是否正在传送您先前创建的主页。

从源映像实例创建可重复使用的 Windows Server 2012 映像

首先验证源映像实例是否已进行正确配置,并且能够传送内容,然后从实例的根永久性磁盘创建可重复使用的磁盘映像:

  1. 在源映像实例上,以管理员身份打开 PowerShell。
  2. 运行以下命令,让系统准备好进行克隆:

     PS C:> GCESysprep

    GCESysprep 操作完成后,您将自动断开与 RDP 会话的连接。

  3. 在本地机器上,运行以下命令以删除源实例,同时保留它的根永久性磁盘:

     PS C:> gcloud compute instances delete src-img --keep-disks boot

  4. 删除实例后,请利用保留的根永久性磁盘创建新映像:

     PS C:> gcloud compute images create win-be-img --source-disk src-img --source-disk-zone us-central1-f

使用源映像创建实例模板

现在您已从配置的 Windows 服务器创建了磁盘映像,您可以将该映像用作实例模板的源映像。 稍后,您将配置两个代管实例组,这些实例组使用此模板创建新实例。

在本地机器上,运行以下命令以创建实例模板,在命令中使用 win-be-img 作为源映像,并使用 rdp-tagwww-tag 作为实例标记:

PS C:\> gcloud compute instance-templates create win-be-tmpl ^
    --tags rdp-tag,www-tag ^
    --image win-be-img

为每个区域创建代管实例组

接下来,在每个区域中创建托管实例组。创建每个实例组后,实例组将根据您之前定义的实例模板,在组中填入两个相同的实例。稍后,您将配置负载均衡器以将这些实例组视为后端目标。

要创建托管实例组,请执行以下操作:

  1. 在本地机器上,运行以下命令以在地区 us-central1-f 中创建新的代管实例组,并在组中填入两个相同的实例:

     PS C:> gcloud compute instance-groups managed create us-be-group ^
          --base-instance-name us ^
          --size 2 ^
          --zone us-central1-f ^
          --template win-be-tmpl

  2. 在地区 europe-west1-d 中执行相同的操作:

    PS C:\> gcloud compute instance-groups managed create eu-be-group ^
          --base-instance-name eu ^
          --size 2 ^
          --zone europe-west1-d ^
          --template win-be-tmpl

验证后端实例是否正在运行

在网络浏览器中,导航到“虚拟机实例”页面。 点击每个后端的外部 IP 以验证后端是否正在传送您先前创建的主页。

创建和配置负载平衡服务

Compute Engine 负载均衡服务包含多个组件。在本节中,您将创建这些组件并将它们连接在一起。

  1. 在本地机器上,运行以下命令以创建新的健康检查。您的负载均衡器将使用此健康检查来检查后端实例的健康状况:

    PS C:\> gcloud compute http-health-checks create basic-check
  2. 创建后端服务

    PS C:\> gcloud compute backend-services create be-srv ^
          --protocol HTTP --http-health-check basic-check --global-health-checks
  3. 将实例组添加为后端服务的后端目标:

    PS C:\> gcloud beta compute backend-services add-backend be-srv ^
          --instance-group us-be-group --zone us-central1-f
    PS C:\> gcloud beta compute backend-services add-backend be-srv ^
          --instance-group eu-be-group --zone europe-west1-d
  4. 创建一个默认网址映射,用于将所有传入请求引导到所有实例上。

    PS C:\> gcloud compute url-maps create lb-map --default-service be-srv
  5. 创建 SSL 证书资源。您的负载均衡器将使用此资源来加密和解密流量。

    如果您已拥有证书授权机构颁发的私钥和 SSL 证书,您可以通过运行以下命令使用它们来创建新的 SSLCertificate 资源。如果没有这些私钥和 SSL 证书,您可以创建并使用自签名证书进行测试。如需了解详情,请参阅创建私钥和证书

    运行以下命令以创建 SSL 证书资源。将 <crt_file_path> 替换为您的证书的本地路径,将 <key_file_path> 替换为您的私钥的路径。

    PS C:\> gcloud beta compute ssl-certificates create www-cert ^
    --certificate  --private-key 
  6. 创建目标 HTTP 和 HTTPS 代理以将请求路由到网址映射。 该代理属于负载均衡器,保存用于 HTTPS 负载均衡的 SSL 证书,在此步骤中您还可以关联证书和代理:

     PS C:> gcloud compute target-http-proxies create http-lb-proxy ^
          --url-map lb-map
     PS C:> gcloud beta compute target-https-proxies create https-lb-proxy ^
          --url-map lb-map --ssl-certificate www-cert

  7. 要使负载均衡器可靠地接收流量,您需要为负载均衡器的全局转发规则分配全局静态 IP 地址。 如需创建全局静态 IP 资源,请运行以下命令:

     PS C:> gcloud compute addresses create lb-ip --global

    记下 IP 地址。

  8. 创建两个全局转发规则来处理传入的 HTTP 和 HTTPS 请求。每个转发规则都会根据指定的 IP 地址、IP 协议和端口将流量发送到您创建的目标代理之一。

    将以下命令中的 <lb_ip_addr> 替换为您在上一步中创建的静态 IP 地址:

    PS C:\> gcloud compute forwarding-rules create http-fwd-rule ^
          --address <lb_ip_addr> --global ^
          --target-http-proxy http-lb-proxy --port-range 80
    PS C:\> gcloud beta compute forwarding-rules create https-fwd-rule ^
          --address <lb_ip_addr> --global ^
          --target-https-proxy https-lb-proxy --port-range 443

创建全局转发规则后,您的配置可能需要耗费几分钟时间才能得到传播。如需检查传播进度,您可以在 Google Cloud Console 中监控配置,也可以在本地机器上运行以下命令:

PS C:\> gcloud compute backend-services get-health be-srv

将流量发送到您的后端

现在您已配置了负载平衡服务,您可以开始向转发规则发送流量,随后流量会被分配到不同的实例上。

要向您的后端发送流量,请执行以下操作:

  1. 打开 Google Cloud 控制台中的“负载均衡”页面
  2. 点击您的负载平衡器的名称。
  3. 在页面的后端部分中,通过查看运行状况良好列,确认实例运行良好。显示器指示实例运行状况良好可能需要一些时间。
  4. 当显示器显示实例运行状况良好之后,请将前端部分中的 IP:端口复制粘贴到浏览器中。
  5. 在浏览器中,您应会看到显示了默认内容页面。

限制对后端的访问

确认一切正常后,请修改防火墙规则,限制 HTTP(S) 流量只能来自您的负载平衡服务:

  1. 在本地机器上,运行以下命令以更新 www-rule 防火墙规则。这会限制除 130.211.0.0/2235.191.0.0/16 范围(HTTP(S) 负载均衡代理和健康检查 IP 范围)之外的所有 IP 范围的流量:

    PS C:\> gcloud compute firewall-rules update www-rule ^
           --source-ranges 130.211.0.0/22,35.191.0.0/16 ^
           --target-tags www-tag
  2. 在网络浏览器中,导航到“虚拟机实例”页面

  3. 点击每个实例以确认现在无法访问实例。

模拟中断

您可以模拟区域中一个或多个实例出现的中断,以便观察负载将如何在剩余的正常实例之间进行平衡。

如需阻止实例接收其他请求,请执行以下操作:

  1. 与实例建立 RDP 连接。
  2. 在实例上,以管理员身份打开 PowerShell。
  3. 运行以下命令,以在实例上创建新的防火墙规则。此命令可阻止来自健康检查器的健康检查流量,并阻止负载均衡器与实例之间的所有新 HTTP 连接:

    PS C:\> netsh advfirewall firewall add rule name="Outage Test" protocol=tcp dir=in localport=80 action=block remoteip=130.211.0.0/22,35.191.0.0/16
  4. 在本地机器上,运行以下命令以确认实例现在报告的是 UNHEALTHY 状态:

    PS C:\> gcloud compute backend-services get-health be-srv
  5. 在实例开始报告 UNHEALTHY 状态后,向您的负载平衡器发送一个请求。只有状况正常的实例才会给予响应。

  6. 模拟完中断后,您可以通过删除防火墙规则来恢复实例连接。在运行状况不良的实例上以管理员身份打开 PowerShell 后,请运行以下命令以删除规则:

    PS C:\> netsh advfirewall firewall delete rule name="Outage Test"

清除数据

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

删除您的 Google Cloud 项目

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

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

  1. 在 Google Cloud 控制台中,转到管理资源页面:

    转到“管理资源”

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

删除实例

如需删除 Compute Engine 实例,请执行以下操作:

  1. 在 Google Cloud 控制台中,转到虚拟机实例页面。

    转到“虚拟机实例”

  2. 选中要删除的实例。
  3. 如需删除实例,请点击更多操作,点击删除,然后按照说明操作。

删除永久性磁盘

如需删除 Compute Engine 磁盘,请运行以下命令:

  1. 在 Google Cloud 控制台中,转到磁盘页面。

    转到“磁盘”

  2. 选中 是要删除的磁盘。
  3. 如需删除磁盘,请点击删除

后续步骤

详细了解如何在 Compute Engine 上使用 Windows

查看有关 Compute Engine 上的 Windows 实例的文档。

尝试其他教程

探索有关 Google Cloud 的参考架构、图表、教程和最佳做法。查看我们的 Cloud Architecture Center