使用地区永久性磁盘的高可用性选项

本文档介绍如何通过比较用于提高服务可用性的不同选项以及比较不同服务架构的费用、性能和弹性,使用地区永久性磁盘构建高可用性 (HA) 服务。

地区永久性磁盘是一种存储选项,用于在同一地区中的两个区域之间同步复制数据。当您在 Compute Engine 中实现高可用性服务时,地区永久性磁盘可以充当一个很好的基础组件。

地区永久性磁盘的优势在于,如果发生区域服务中断,可能导致您的虚拟机 (VM) 实例变得不可用,通常您可以将地区永久性磁盘强制挂接到同一地区内辅助区域中的虚拟机实例。如需执行此任务,您必须在要强制挂接的地区永久性磁盘所在的同一区域中启动另一个虚拟机实例,或者在该区域中维护一个热备用虚拟机实例。热备用是指运行中的虚拟机实例,与您使用的实例完全相同。这两个实例具有相同的数据。

强制挂接操作会在不到一分钟的时间内执行。总恢复时间目标 (RTO) 不仅取决于存储故障转移(地区永久性磁盘强制挂接操作),还取决于是否必须先创建辅助虚拟机实例、底层文件系统检测到热挂接磁盘的时间长度、相应应用的恢复时间以及一些其他因素。

地区永久性磁盘会优先考虑工作负载的可用性,这意味着,当两个磁盘副本同时不可用时,很可能不会发生数据保护。如需了解详情,请参阅地区永久性磁盘故障转移

使用地区永久性磁盘构建高可用性服务

设计考虑事项

在开始设计高可用性服务之前,请先了解应用、文件系统和操作系统的特性。这些特性是设计的基础,有助于排除各种不适合的方法。例如,如果应用不支持应用级层复制,则某些对应的设计选项不适用。

同样,如果应用、文件系统或操作系统无法容忍崩溃,则可能无法使用地区永久性磁盘甚至区域永久性磁盘快照。崩溃容忍度定义为从突然终止中恢复而不会丢失或破坏崩溃前已经提交到永久性磁盘中的数据的能力。

请考虑以下事项:

  1. 了解对应用和写入性能的影响。
  2. 确定服务恢复时间目标。了解您的服务必须从区域服务中断恢复的速度以及服务等级协议 (SLA) 要求。
  3. 了解构建灵活可靠的服务架构的费用。就费用而言,以下选项适用于应用同步复制和异步复制:

    使用两个数据库和虚拟机实例。在这种情况下,总费用由以下几项决定:

    • 虚拟机实例费用
    • 永久性磁盘费用
    • 维护应用复制的费用

    如需使用地区永久性磁盘实现高可用性,请使用同样的虚拟机实例和永久性磁盘组件,但还应包括地区永久性磁盘。地区永久性磁盘每个字节的费用是区域永久性磁盘的两倍,因为它们是在两个区域中复制的。

    但是,使用地区永久性磁盘可能会降低维护费用,因为数据会自动复制到两个副本,而无需维护应用复制。

    如果您只在故障转移期间按需启动备份虚拟机,而不是将虚拟机维持在热备用状态,还可进一步降低主机费用。

比较费用、性能和弹性

下表着重介绍了不同服务架构在费用、性能和弹性方面的权衡取舍。

HA 服务
架构
地区永久性磁盘
快照
应用级层
同步
应用级层
异步
使用区域
永久性磁盘的
HA 解决方案
防范应用、虚拟机、地区故障1
针对应用损坏的缓解措施(示例:应用的崩溃容忍度)2
费用 $ $$

  • 两个正在运行的数据库或虚拟机的实例、应用复制设置和维护、跨区域网络。
$$

  • 两个正在运行的数据库或虚拟机的实例、应用复制设置和维护、跨区域网络。
$1.5x - $$

  • 如果使用热备用,则费用与应用复制相同。您可以通过在故障转移期间按需启用备用虚拟机来降低费用。地区永久性磁盘副本之间的跨区域网络无需付费。
应用性能

  • 无影响


  • 通过同步复制效果权衡应用性能
">

  • 无影响


  • 对大多数应用无影响
适用于要求低 RPO 的应用(对数据丢失容忍度极低)

  • 数据是否丢失取决于创建快照的时间


  • 无数据丢失3


  • 数据会丢失,因为复制是异步的


  • 无数据丢失
灾难发生后的存储恢复时间4
  • 0(分钟)
  • 0(秒)
  • 0(秒)
  • 0(秒)- 将磁盘强制挂接到备用虚拟机实例

1 使用地区永久性磁盘或快照不足以防范和缓解故障及崩溃。您的应用、文件系统以及可能的其他软件组件必须具备崩溃一致性,或使用某种静默方法

2 复制某些应用确实可以减轻特定应用崩溃的影响。例如,MySQL 主应用崩溃不会导致其副本实例也遭到损坏。如需了解详情,请查看您的应用文档。

3 数据丢失意味着提交到永久性存储空间的数据丢失且不可恢复。任何未提交的数据仍会丢失。

4 故障转移性能不包括文件系统检查和故障转移后的应用恢复及加载。

使用地区永久性磁盘构建高可用性数据库服务

本部分介绍了使用地区永久性磁盘和 Compute Engine 为有状态数据库服务(MySQL、Postgres 等)构建高可用性解决方案的主要概念。它介绍了如何缓解单个区域服务中断。如果出现大范围的服务中断,例如整个地区变得不可用,那么应用可能仍然会变得不可用。根据您的需求,您可能需要考虑采用跨地区复制技术以实现更高的可用性。

数据库 HA 配置通常至少包含两个虚拟机实例。这些实例最好属于一个或多个托管实例组

  • 主地区中的主虚拟机实例
  • 辅助地区中的备用虚拟机实例

主虚拟机实例至少有两个永久性磁盘:一个启动磁盘和一个地区永久性磁盘。地区永久性磁盘包含数据库数据以及在发生服务中断时应保留到其他区域的其他任何可变数据。

例如,备用虚拟机实例需要单独的启动磁盘才能从与配置相关的服务中断(可能由操作系统升级引起)中恢复。在故障转移过程中,您无法将启动磁盘强制挂接到其他虚拟机。

主虚拟机实例和备用虚拟机实例配置为根据运行状况检查信号将负载平衡器与定向到主虚拟机的流量结合使用。这种配置也称为热备用。数据的灾难恢复场景简要介绍了其他故障转移配置,这些配置可能更适合您的使用场景。

运行状况检查

运行状况检查由运行状况检查代理执行,用于实现以下两个目的:

  1. 运行状况检查代理位于主虚拟机和辅助虚拟机中,用于监控实例并与负载平衡器通信以定向流量。这对于实例组特别有用。
  2. 运行状况检查代理会与特定于应用的地区控制层面同步,并根据控制层面行为做出故障转移决策。控制层面所在的区域必须与要监控其运行状况的实例所在的区域不同。

运行状况检查代理本身必须具有容错性。例如,请注意在下图中,控制层面与主实例是彼此独立的,主实例位于 us-central1-a 区域,而备用虚拟机位于 us-central1-f 区域。

运行状况检查代理在虚拟机中的角色。

运行状况检查代理在主虚拟机和备用虚拟机实例中的角色。

故障转移

当在主虚拟机或数据库中检测到故障时,应用控制层面可以启动故障转移到辅助区域中的备用虚拟机。在故障转移期间,同步复制到辅助区域的地区永久性磁盘由应用控制层面强制挂接到备用虚拟机,所有流量根据运行状况检查信号定向到该虚拟机。

总体故障转移延迟时间是除故障检测时间以外,以下延迟时间的总和:

  • 将地区永久性磁盘强制挂接到备用虚拟机的时间(零秒)
  • 应用初始化和崩溃恢复所需的时间

灾难恢复基础组件页面介绍了 Compute Engine 上目前可用的基础组件。

数据库复制面临的挑战

下表列出了设置和管理应用同步或半同步复制(如 MySQL)的一些常见挑战,以及它们与使用区域永久性磁盘的块复制的比较。

挑战 应用同步
或半同步复制
使用
地区永久性磁盘的块复制
在主实例和故障转移副本之间保持稳定复制。 可能会发生多种问题,并导致实例脱离高可用性模式:
  1. 复制参数配置错误,例如 SSL 证书不匹配,或主实例端缺少 ACL。
  2. 主实例上的高负载导致故障转移副本无法跟上进度。
  3. Bug 导致的复制问题,例如应用问题、操作系统配置错误或 Docker 故障。
  4. 基础架构故障,例如 CPU 争用、冻结虚拟机或中间网络中断。
存储故障由区域永久性磁盘处理。这对应用而言是透明的,除了磁盘性能可能出现波动。

必须通过用户定义的运行状况检查来发现应用或虚拟机问题并触发故障转移。
端到端的故障转移时间比预期要长。 故障转移操作所花费的时间没有上限。等待所有事务执行完成(上述步骤 2)所需的时间并不固定,具体取决于数据库的架构和负载。 地区永久性磁盘提供同步复制功能,因此故障转移时间受以下延迟时间总和的限制:
  1. 创建辅助虚拟机,除非已有热备用虚拟机实例可用。
  2. 强制挂接地区永久性磁盘。
  3. 应用初始化。
脑裂 为避免出现脑裂情况,这两种方法都需要通过预配来确保一次只有一个主实例。

后续步骤