灾难恢复组件

Last reviewed 2022-06-10 UTC

本文档是介绍 Google Cloud 中的灾难恢复 (DR) 的系列文章中的第二篇。本部分讨论了可用作灾难恢复规划基础组件的服务和产品,包括 Google Cloud 产品和跨平台工作的产品。

该系列包含以下部分:

简介

Google Cloud 提供了许多可用作灾难恢复 (DR) 架构组件的产品。本部分将讨论这些产品中最常被用作 Google Cloud DR 组件的灾难恢复相关功能。

在这些服务中,很多都具有高可用性 (HA) 功能。高可用性与灾难恢复并不完全重叠,但高可用性的很多目标也适用于设计灾难恢复方案。例如,利用高可用性功能,您能设计可优化正常运行时间且可缓解小规模故障(例如单个虚拟机故障)影响的架构。要详细了解灾难恢复与高可用性之间的关系,请参阅灾难恢复规划指南

下面的部分介绍了这些 Google Cloud 灾难恢复组件及其如何帮助您实现灾难恢复目标。

计算和存储

Compute Engine
  • 可伸缩的计算资源
  • 预定义和自定义机器类型
  • 启动速度快
  • 快照
  • 实例模板
  • 代管实例组
  • 预留
  • Persistent Disk
  • 实时迁移
Cloud Storage
  • 高度耐用的对象存储
  • 跨区域冗余
  • 存储类别
  • 对象生命周期管理
  • 从其他来源进行数据转移
  • 默认提供静态加密
GKE
  • 用于部署和扩缩容器化应用的托管环境
  • 节点自动修复
  • 活跃性和就绪性探测
  • 永久性卷
  • 多区域和地区性集群
  • 用于管理地区级集群的命令行工具

Compute Engine

Compute Engine 提供虚拟机实例,是 Google Cloud 的核心要件。除了配置、启动和监控 Compute Engine 实例之外,您通常还可使用各种相关功能来实施灾难恢复方案。

在灾难恢复方案中,您可以通过设置删除保护标志来防止意外删除虚拟机。在托管数据库等有状态服务时,此功能尤为有用。为帮助符合较低的 RTO 和 RPO 值,请遵循有关设计可靠系统的最佳做法

您可以通过预安装的应用配置实例,然后将该配置另存为自定义映像。您要实现的 RTO 可由自定义映像反映出来。

实例模板

您可以使用 Compute Engine 实例模板来保存虚拟机的详细配置信息,然后基于现有实例模板创建实例。您可使用该模板启动所需数量的实例,并完全按照建立灾难恢复目标环境时所需的方式进行配置。实例模板在全球范围内进行复制,因此您可以使用同一配置在 Google Cloud 中的任意位置重新创建实例。

您可以使用自定义映像创建实例模板,也可基于现有虚拟机实例进行创建。

在本文档后面的在映像配置与部署速度之间达到平衡部分中,我们提供了有关使用 Compute Engine 映像的更多详情。

托管实例组

托管实例组与 Cloud Load Balancing(详见本文档稍后部分)搭配使用,用于将流量分配到跨地区复制且配置相同的实例组。托管实例组可实现自动扩缩和自动修复等功能;其中,托管实例组可以自动删除和重新创建实例。

预留

Compute Engine 支持在特定区域预留虚拟机实例(使用自定义或预定义机器类型,无论是否有其他 GPU 或本地 SSD 都可)。为了确保灾难恢复的关键任务工作负载的容量,您应该在灾难恢复目标地区中创建预留。如果没有预留,您可能无法获得实现恢复时间目标所需的按需容量。在冷、暖或热灾难恢复场景中非常有用。借助它们,您可以让恢复资源保持可用于故障切换以满足较低 RTO 需求,而无需提前完全配置和部署它们。

永久性磁盘和快照

永久性磁盘是实例可访问的持久性网络存储设备。它们与实例无关,因此即使已删除实例,您仍可分离并移动永久性磁盘以保留数据。

对于可跨区域复制且用于在发生灾难时重新创建永久性磁盘的 Compute Engine 虚拟机,您可以进行增量备份或执行增量快照。此外,您还可以创建永久性磁盘的快照,以防止因用户错误而导致数据丢失。快照是增量快照,即使您的快照磁盘已附加到正在运行的实例,创建快照也只需几分钟时间。

永久性磁盘具有内置冗余,可保护您的数据免受设备故障的影响,并通过数据中心维护事件保证数据的可用性。永久性磁盘可以是区域级磁盘,也可以是地区级磁盘。地区永久性磁盘跨一个地区中的两个区域复制写入。如果发生区域服务中断,备份虚拟机实例可以在辅助区域强制挂接地区永久性磁盘。如需了解详情,请参阅使用地区永久性磁盘的高可用性选项

实时迁移

实时迁移可确保即使发生主机系统事件(例如软件或硬件更新),虚拟机实例仍能正常运行。Compute Engine 可将正在运行的实例实时迁移到同一区域中的其他主机,而不要求虚拟机重新启动。这样,Google 即可执行为确保基础架构受到保护且安全可靠所必需的维护任务,且不中断您的任何虚拟机。

虚拟磁盘导入工具

借助虚拟磁盘导入工具,您可以导入 VMDK、VHD 和 RAW 等文件格式来创建新的 Compute Engine 虚拟机。使用此工具,您可以创建与本地虚拟机配置相同的 Compute Engine 虚拟机。当您无法通过映像上已安装的软件的源二进制文件配置 Compute Engine 映像时,这是一种不错的方法。

Cloud Storage

Cloud Storage 是一种对象存储,非常适合用于存储备份文件。它提供了适用于特定用例的不同存储类别,如下图所示。

一张图表,上面显示了适合高频访问的 Standard 存储空间、适合低频访问的 Nearline 和 Coldline,以及适合最低频次访问的 Archive

在灾难恢复场景中,Nearline Storage、Coldline Storage 和 Archive Storage 尤其重要。与 Standard 存储空间相比,这些存储类别均可以降低存储费用。但是,检索这些类别中存储的数据或元数据时会产生额外费用,您还要支付最短存储期限费用。Nearline 专用于每月最多访问一次的备份方案,非常适合让您在保持较低费用的同时能够执行常规灾难恢复压力测试。

Nearline、Coldline 和 Archive 针对非频繁访问进行了优化,并且设计价格模式时也考虑到了这一点。因此,您需要支付最短存储期限费用,还需支付在这些类别中检索早于类别最短存储期限的数据或元数据时产生的额外费用。

借助 Storage Transfer Service,您可以将数据从 Amazon S3 或基于 HTTP 的来源导入 Cloud Storage。在灾难恢复方案中,您可使用 Storage Transfer Service 执行以下操作:

  • 将来自其他存储空间服务的数据备份到 Cloud Storage 存储分区。
  • 将数据从双区域或多区域中的存储桶移动到单区域中的存储桶,从而降低存储备份的费用。

Filestore

Filestore 实例是全代管式 NFS 文件服务器,适用于在 Compute Engine 实例或 GKE 集群上运行的应用。

Filestore 实例是可用区级的,不支持跨可用区复制。如果 Filestore 实例所在的可用区处于关闭状态,则该实例不可用。建议您定期使用 gsutil rsync 命令将 Filestore 卷同步到另一区域中的 Filestore 实例,以定期备份数据。此操作要求将作业安排在 Compute Engine 实例或 GKE 集群上运行。

在灾难恢复方案中,通过在故障切换区域切换到 Filestore,应用可以快速恢复对 Filestore 卷的访问权限,而不必等待任何恢复过程完成。此灾难恢复解决方案的 RTO 值在很大程度上取决于预定作业的频率。

GKE

GKE 是一个可直接投入生产用途的的托管式环境,用于部署容器化应用。GKE 可让您编排高可用性系统,它包含以下特性:

  • 节点自动修复。如果某节点在很长一段时间(约 10 分钟)内连续健康检查结果不佳,则 GKE 会为该节点启动修复流程。
  • 活跃性探测。您可指定一项活跃性探测,它定期将 pod 正在运行这一情况报告给 GKE。如果 pod 探测失败,则可以对其进行重启。
  • 永久性卷。数据库的存留时间必须能够超过容器的生命周期。通过使用映射到 Compute Engine 永久性磁盘永久性卷抽象,您可以维护存储的可用性而不受个别容器的干扰。
  • 多区域和地区性集群。您可以跨一个地区中的多个区域分发 Kubernetes 资源。
  • 多集群 Gateway 可让您跨不同区域中的多个 GKE 集群配置共享负载均衡资源。
  • Backup for GKE 可让您在 GKE 集群中备份和恢复工作负载。

网络和数据转移

Cloud Load Balancing
  • 健康检查
  • 单一 Anycast IP
  • 跨地区
  • Cloud CDN 集成
  • 自动扩缩集成
Traffic Director
  • Google 管理的全球级 L7 ILB
  • 符合 xDSv2 标准的开放式服务代理的控制平面
  • 支持虚拟机和容器
  • 健康检查分流
  • 快速自动扩缩
  • 高级请求路由和丰富的流量控制政策
Cloud DNS
  • 程序化 DNS 管理
  • 访问权限控制
  • 使用 Anycast 为区域提供服务
Cloud Interconnect
  • Cloud VPN (IPsec VPN)
  • 直接对等互连

Cloud Load Balancing

Cloud Load Balancing 通过在一组实例之间分配用户请求来为 Compute Engine 提供高可用性。您可以通过健康检查配置 Cloud Load Balancing,这些检查可确定实例是否能用于执行工作,从而使流量不路由到出现故障的实例。

Cloud Load Balancing 提供单个可全局访问的 IP 地址来处理您的 Compute Engine 实例。您的应用可以在不同地区(例如欧洲和美国)运行实例,而且最终用户将被定向到最近的一组实例。除了为向互联网公开的服务提供负载平衡之外,您还可以通过专用负载平衡 IP 地址为您的服务配置内部负载平衡。此 IP 地址仅供 Virtual Private Cloud (VPC) 内部的虚拟机实例访问。

Traffic Director

借助 Traffic Director,为您的服务网格部署全代管式流量控制平面。Traffic Director 管理在 Compute Engine 和 GKE 中运行的服务代理的配置。在多个地区中部署服务以实现高可用性。Traffic Director 将分流服务健康检查并启动服务代理的故障切换配置,从而将流量重定向到健康状况良好的实例。

Traffic Director 还支持高级流量控制概念、熔断和故障注入。借助熔断功能,您可以对特定服务的请求实施限制,此后请求将被阻止访问该服务,从而防止服务进一步降级。借助故障注入功能,Traffic Director 可以引入延迟或中止对服务的部分请求,让您可以测试服务是否能够承受请求延迟或请求中止。

Cloud DNS

Cloud DNS 提供了一种在自动恢复过程期间管理 DNS 条目的程序化方式。Cloud DNS 使用 Google 的全球 Anycast 域名服务器网络从遍布全球的冗余位置服务您的 DNS 区域,从而为您的用户提供高可用性并降低延迟。

如果您选择在本地管理 DNS 条目,则可以在 Google Cloud 中启用虚拟机,通过 Cloud DNS 转发解析这些地址。

Cloud Interconnect

Cloud Interconnect 提供了将其他来源的信息移动到 Google Cloud 的方法。我们稍后将在向/从 Google Cloud 转移数据中讨论此产品。

管理和监控

Cloud 状态信息中心
  • Google Cloud 服务的状态
Google Cloud Observability
  • 正常运行时间监控
  • 提醒
  • 日志
  • 错误报告

Cloud 状态信息中心

Cloud 状态信息中心显示 Google Cloud 服务的当前可用性。您可在页面上查看状态,还可订阅 RSS Feed;每当出现服务新闻,该 Feed 即会更新。

Cloud Monitoring

Cloud Monitoring 可收集来自 Google Cloud、AWS、托管式正常运行时间探测工具、应用检测工具及各种其他应用组件的指标、事件和元数据。您可配置提醒以向第三方工具(如 Slack 或 Pagerduty)发送通知,从而向管理员提供及时动态更新。要将 Cloud Monitoring 用于灾难恢复,还有一种方式是配置一个 Pub/Sub 接收器,并使用 Cloud Functions 触发自动过程来响应 Cloud Monitoring 提醒。

跨平台灾难恢复组件

跨多个平台运行工作负载时,一种减小操作开销的方法是选择适合当前所用全部平台的工具。本部分讨论一些与平台无关并因而支持跨平台灾难恢复场景的工具和服务。

声明式模板工具

借助声明式模板工具,您可以跨平台自动部署基础设施。Terraform 是一种常见的声明式模板工具。

配置管理工具

对于大型或复杂的灾难恢复基础架构,建议使用 Chef 和 Ansible 等与平台无关的软件管理工具。这些工具可确保无论您的计算工作负载位于何处都能应用可重现的配置。

对象存储

一种常见的灾难恢复模式是在不同云提供商的对象存储中具有对象的副本。适合此情况的一种跨平台工具是 boto,它是一个开源 Python 库,可让您与 Amazon S3 和 Cloud Storage 进行交互。

Orchestrator 工具

容器也可以被视为灾难恢复组件。容器可用于打包服务并在不同平台之间实现一致性。

如果使用容器,则通常会用到 Orchestrator。Kubernetes 不仅可用于通过 GKE 管理 Google Cloud 中的容器,还提供了一种方法来跨多个平台编排基于容器的工作负载。Google Cloud、AWS 和 Microsoft Azure 均提供有 Kubernetes 的托管版本。

要将流量分发到在不同云平台上运行的 Kubernetes 集群,您可以使用支持加权记录并包含健康检查的 DNS 服务。

您还需要确保可以将映像拉取到目标环境。这意味着您需要能够在发生灾难时访问映像注册表。Artifact Registry 也是一项与平台无关的不错选择。

数据转移

数据转移是跨平台灾难恢复方案的一个关键组成部分。请确保使用灾难恢复数据转移方案所需的实际模型来设计、实现和测试跨平台灾难恢复方案。我们将在下一部分讨论数据转移方案。

灾难恢复模式

本部分基于前面介绍的组件探讨一些最常见的灾难恢复架构模式。

向/从 Google Cloud 转移数据

灾难恢复方案的一个重要方面是能够以多快的速度向/从 Google Cloud 转移数据。如果您的灾难恢复方案基于将数据信息从本地移动到 GCP 或从其他云提供商移动到 GCP,则速度至关重要。本部分将讨论可确保良好吞吐量的网络和 GCP 服务。

在将 Google Cloud 用作本地或其他云环境中的工作负载的恢复站点时,必须考虑以下重要事项:

  • 如何连接到 Google Cloud?
  • 您与互连提供商之间具有多少带宽?
  • 提供商向 Google Cloud 直接提供的带宽是多少?
  • 还有哪些数据将使用此链接进行转移?

如果您使用公共互联网连接来转移数据,则由于受 ISP 容量和路由的限制,网络吞吐量无法预测。ISP 可能会提供有限的 SLA,也可能根本不提供 SLA。而另一方面,这些连接的费用相对较低。

Cloud Interconnect 提供了多种用于连接到 Google 和 Google Cloud 的方案:

  • Cloud VPN:支持在 Google Cloud VPC 网络和目标网络之间创建 IPsec VPN 隧道。两个网络之间的流量传输通过一个 VPN 网关加密,然后通过另一个 VPN 网关解密。高可用性 VPN:让您可以创建服务等级协议 (SLA) 承诺 99.99% 的高可用性 VPN 连接,并且相较于创建冗余 VPN,还简化了设置。
  • 直接对等互连:可最大限度减少 Google 的公共 IP 地址的网络跃点。您可以通过直接对等互连在您的网络与 Google 的边缘接入点 (PoP) 之间交换互联网流量。
  • 专用互连:可在您的本地网络和 Google 网络之间提供直接物理连接。它可提供 SLA 并为转移大量数据提供更加一致的吞吐量。线路为 10 Gbps 或 100 Gbps,在 Google 的其中一个对接网点终止。有了更大的带宽,您可以缩短将数据从本地转移到 Google Cloud 所需的时间。下表说明了从 10 Gbps 升级到 100 Gbps 时的速度提升。显示 10 Gbps 与 100 Gbps 数据转移所需时间的图表
  • 合作伙伴互连:提供的功能与专用互连类似,但线路速度低于 10 Gbps。请参阅支持的服务提供商

下图提供了根据需转移到 Google Cloud 的数据量选用转移方法的相关指导。

一张图表,上面的 Y 轴上显示数据量(0 至超过 100 TB)、X 轴上显示了数据位置类别(例如“在 Google Cloud 中”和“在连接状况良好的本地”等),且每个类别具有不同的转移解决方案

您可以使用转移时间计算器,了解在给定要移动的数据集大小和可用于转移的带宽的情况下,转移所需的时间。如需详细了解作为灾难恢复方案的一部分的数据转移方法,请参阅转移大型数据集

在映像配置与部署速度之间达到平衡

在配置机器映像用于部署新实例时,请考虑配置将对部署速度产生的影响。映像预配置量、映像维护费用和部署速度之间存在一种权衡。例如,如果以最低限度配置机器映像,则使用该映像的实例将需要更多时间才能启动,因为它们需要下载和安装依赖项。另一方面,如果高度配置机器映像,则使用该映像的实例将更快启动,但您必须更加频繁地更新映像。启动完全可操作的实例所花费的时间将与您的 RTO 直接相关。

一张图表,上面显示了根据映像启动时间(捆绑最多的启动最快)映射的 3 个捆绑级别(未捆绑到完全捆绑)

跨混合环境维护机器映像的一致性

如果要实现混合解决方案(本地到云或云到云),则需要找到一种跨不同生产环境维护虚拟机一致性的方法。

如果需要完整配置的映像,请考虑使用 Packer 之类的工具,它可为多个平台创建相同的机器映像。您可以将相同脚本用于平台专属配置文件。如果使用 Packer,则可对配置文件执行版本控制,从而跟踪在生产中部署的版本。

还有一种方法是,可以使用具有更精细粒度的 Chef、Puppet、Ansible 或 Saltstack 等配置管理工具,从而根据需要创建基础映像、以最低限度配置的映像或完整配置的映像。如需查看关于如何有效使用这些工具的讨论,请参阅使用 Chef 在 Google Cloud 上从零部署

您还可以手动转换并导入现有映像(例如 Amazon AMI、Virtualbox 映像和 RAW 磁盘映像)到 Compute Engine。

实现分层存储

分层存储模式通常用于以下场景的备份:最新备份位于速度较快的存储上,您将旧备份缓慢地迁移到费用更低但速度较慢的存储。您可采用两种方式通过 Cloud Storage 实现此模式,具体取决于数据的原始位置(在 Google Cloud 上还是本地)。在这两种情况下,您都会在不同存储类别的存储桶之间迁移对象,通常是从 Standard 存储类别迁移到费用更低的 Nearline 存储类别。

显示了从永久性磁盘迁移到 Standard Storage,再迁移到 Nearline Storage 的数据的图表

如果您的源数据是在本地生成的,则实现与下图类似:

一个图表,上面显示将数据通过 Cloud Interconnect 从本地迁移到 Cloud Storage

或者,您可以使用对象生命周期规则更改存储分区中对象的存储类别,从而自动处理对象类别中的更改。

为专用实例维护同一 IP 地址

一种常见模式是维护虚拟机的单个服务实例。如果必须替换虚拟机,则用于替换的虚拟机需显示为原始虚拟机。因此,客户端用于连接新实例的 IP 地址应保持不变。

最简单的配置是设置一个仅维护单个实例的托管实例组。此托管实例组与内部(专用)负载平衡器进行集成,后者确保无论实例是原始映像还是替换用映像,都使用同一 IP 地址来处理该实例。

技术合作伙伴

Google 具有强大的合作伙伴生态系统,通过 Google Cloud 支持备份和灾难恢复用例。特别是,我们见证了客户使用合作伙伴解决方案来执行以下操作:

  • 将数据从本地备份到 Google Cloud。在这些情况下,Cloud Storage 集成用作大多数本地备份平台的存储目标。您可以使用此方法来取代磁带和其他存储设备。
  • 实现从本地转到 Google Cloud 的灾难恢复方案。我们的合作伙伴可帮助消除对辅助数据中心的需求并使用 Google Cloud 作为灾难恢复站点。
  • 为基于云的工作负载实现灾难恢复和备份。

要详细了解合作伙伴解决方案,请查看 Google Cloud 网站上的合作伙伴页面

后续步骤