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

本文档介绍如何通过比较用于提高服务可用性的不同选项以及比较不同服务架构的费用、性能和灵活性来使用区域永久性磁盘构建高可用性 (HA) 服务。此外,本文还介绍了故障类型和恢复操作,以帮助您确定区域永久性磁盘是否是适用于 HA 服务的正确解决方案。

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

区域永久性磁盘的优势在于,如果出现地区服务中断,您的虚拟机实例可能会变得不可用,在这种情况下,您可以将区域永久性磁盘强制附加到同一区域中辅助地区中的虚拟机实例。如需执行此任务,您必须在要强制附加区域永久性磁盘的地区中启动另一个虚拟机实例,或者在该地区中维护一个热备用虚拟机实例。“热备用”是指运行中的虚拟机实例,与您使用的实例完全相同。这两个实例具有相同的数据。

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

设计考虑事项

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

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

请考虑以下事项:

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

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

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

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

    但是,使用区域永久性磁盘可能会降低维护费用,因为数据会自动复制到两个副本,而无需维护应用复制。
    只需在故障转移期间按需启动备份虚拟机,即可进一步降低主机费用,而无需将虚拟机维持在热备用状态。

比较费用、性能和灵活性

下表着重介绍了各种服务架构在费用、性能和灵活性方面的权衡取舍。

HA 服务
架构
地区永久性磁盘
快照
应用级层
同步
应用级层
异步
使用区域
永久性磁盘的HA 解决方案
防范应用、虚拟机、地区故障1
针对应用损坏的缓解措施(示例:应用的崩溃容忍度)2
费用 $ $$
数据库/虚拟机运行的 2 个实例 + 维护和设置应用复制的费用 + 跨区域网络
$$
数据库/虚拟机运行的 2 个实例 + 维护和设置应用复制的费用 + 跨区域网络
$1.5x - $$
如果使用热备用,则费用与应用复制相同。您可以在故障转移期间按需启用备用虚拟机来降低费用。
应用性能
无影响

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

无影响

对大多数应用无影响
适用于要求低 RPO 的应用(不能容忍数据丢失)
数据是否丢失取决于创建快照的时间

无数据丢失3

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

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

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

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

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

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

使用区域永久性磁盘构建 HA 数据库服务

本部分介绍了使用区域永久性磁盘和 Compute Engine 为有状态数据库服务(MySQL、Postgres 等)构建 HA 解决方案的高级概念。

本部分的讨论涵盖如何缓解单个地区服务中断。如果出现大范围的服务中断,例如整个区域变得不可用,那么应用可能仍然会变得不可用。根据您的需求,您可能需要考虑采用跨区域复制技术以实现更高的可用性。

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

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

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

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

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

运行状况检查

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

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

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

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

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

故障转移

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

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

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

灾难恢复组件页面介绍了 Compute Engine 上目前可用的组件。通过提供磁盘级复制功能,区域永久性磁盘为构建 HA 解决方案增添了另一个重要组件。

故障模式

下表列出了使用区域永久性磁盘的服务的不同故障模式和建议的操作。

故障类别和(概率) 故障类型 操作
地区故障(中) 磁盘仅在本地地区中发生故障。故障可能是暂时性的,也可能持续很长时间。



Compute Engine 控制平面
电源故障
网络故障

区域磁盘操作中的临时故障将由区域永久性磁盘透明处理,无需执行故障转移。区域永久性磁盘会自动检测错误和运行缓慢的问题、切换复制模式,并同步仅复制到一个地区的数据。

如果主要地区出现存储问题,区域永久性磁盘会自动从辅助地区执行读取操作。这可能会增加读取操作的延迟时间。在这种情况下,应用可能会根据性能影响选择触发故障转移。



应用控制平面可以根据运行状况检查阈值触发故障转移。
应用故障(高) 应用无响应
应用管理操作 (例如升级) 人为错误
(例如 SSL 证书、ACL 等参数配置错误)
应用控制平面可以根据运行状况检查阈值触发故障转移。
虚拟机故障(中) 基础架构/硬件故障
由 CPU 争用、中间网络中断导致的虚拟机无响应
虚拟机通常会自动修复。应用控制平面可以根据运行状况检查阈值触发故障转移。
应用损坏(中低) 应用数据损坏
(例如,由于应用 bug 或操作系统升级失败导致的应用数据损坏)
应用恢复:

数据库复制面临的挑战

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

挑战 应用同步
或半同步复制
使用
区域永久性磁盘的块复制
在主实例和故障转移副本之间保持稳定复制。 可能会出现多种问题,并导致实例脱离 HA 模式:
  1. 复制参数配置错误,例如 SSL 证书不匹配,或主实例端缺少 ACL。
  2. 主实例上的高负载导致故障转移副本无法跟上进度。
  3. Bug 导致的复制问题,例如应用问题、操作系统配置错误或 Docker 故障。
  4. 基础架构故障,例如 CPU 争用、冻结虚拟机或中间网络中断。
存储故障由区域永久性磁盘处理。这对应用而言是透明的,除了磁盘性能可能出现波动。
必须通过用户定义的运行状况检查来发现应用或虚拟机问题并触发故障转移。
端到端的故障转移时间比预期要长。 故障转移操作所花费的时间没有上限。等待所有事务执行完成(上述步骤 2)所需的时间并不固定,具体取决于数据库的架构和负载。 区域永久性磁盘提供同步复制功能,因此故障转移时间受以下延迟时间总和的限制:
  1. 创建辅助虚拟机,除非已有热备用虚拟机实例可用。
  2. 强制附加区域永久性磁盘。
  3. 应用初始化。
脑裂 这两种方法都要求通过预配来确保一次只使用一个主实例,以避免脑裂

后续步骤

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

发送以下问题的反馈:

此网页
Compute Engine 文档