使用环境快照进行灾难恢复

Cloud Composer 1 | Cloud Composer 2

本页面介绍如何使用环境快照进行灾难恢复

定义

本指南使用以下定义:

  • 灾难是一种事件,如果 Cloud Composer 或环境运行所需的其他组件不可用。此事件需要故障切换到其他区域和 Cloud Composer 环境。灾难的原因可能是自然或人为造成的,包括 Google Cloud 区域的停机时间和您自己的基础架构的中断。
  • 在 Cloud Composer 环境中,灾难恢复 (DR) 是指在灾难发生后恢复环境运行的过程。此过程涉及重新创建环境(可能在其他区域中重新创建)。如需详细了解灾难恢复,请参阅灾难恢复规划指南
  • 主要环境是您要为其启用灾难恢复功能的 Cloud Composer 环境。
  • 故障切换环境是一种 Cloud Composer 环境,专门用于接管主要环境中的活动。
  • 热灾难恢复场景是灾难恢复的变体,其中使用在灾难发生前创建的备用故障切换环境。
  • 冷灾难恢复场景是灾难恢复的变体,即在灾难发生后创建故障切换环境。
  • 跨区域灾难恢复是温灾难恢复或冷灾难恢复的变体,其中主要环境和故障切换环境位于不同的区域。

灾难恢复过程简介

当您的主要环境因灾难而变得无法运行(损坏或无法访问)时,灾难恢复过程可以解决这一问题。

此过程假定您的主要环境不会立即进行修复以应对灾难。您可以并行创建第二个(故障切换)环境。此环境会代替主要环境运行。在稍后阶段,您可能会决定返回到主要环境或继续使用故障切换环境。

由于该过程使用故障切换环境,因此当您从主要环境切换时,将引入更改。主要环境和故障切换环境之间的更改包括(该列表并不全面):

  • Web 服务器网址将有所不同。这会更改 Airflow 界面和 Airflow REST API 端点的地址。

  • 环境的存储桶网址将有所不同。

  • 您可能需要调整网络和访问权限配置。

如果使用温 DR 场景,则需提前了解 Web 服务器的值、环境的存储桶地址和网络配置。

准备工作

  • Cloud Composer 在 2.0.32 及更高版本中支持计划快照。2.0.9 及更高版本支持环境快照。

准备概览

这两个 DR 场景都包含以下准备步骤:

  1. 创建故障切换环境

    • 在热灾难恢复场景中,您会保持此环境可用。
    • 在冷灾难恢复场景中,您创建此环境的目的只是为了测试灾难恢复过程。完成准备后,请删除此环境,并在灾难发生后重新创建。
  2. 为快照创建存储桶

    • 该存储桶必须在灾难恢复区域中可用。对于跨区域灾难恢复,快照存储桶必须是多区域或位于与主要环境不同的区域。

    • 检查 DAG 是否可以访问区域级资源。

  3. 设置数据库维护

  4. 设置计划快照

  5. 测试灾难恢复过程

灾难恢复概览

灾难发生后:

  1. (仅限冷灾难恢复)创建故障切换环境
  2. 如果可能,请阻止主要环境执行 DAG
  3. 从快照存储桶加载快照到故障切换环境。
  4. 如果需要,请调整故障切换环境的配置
  5. 决定如何处理主要环境

准备步骤

请按照下列步骤为您的环境设置灾难恢复。

创建故障切换环境

创建一个环境作为故障切换环境。

请遵循以下准则:

  • 您的主环境和故障切换环境必须使用相同版本的 Cloud Composer 和 Airflow。

  • 在热灾难恢复场景中,请务必同步更新升级这两个环境。例如,如果将主要环境升级到更高版本的 Cloud Composer 或安装 PyPI 软件包,则故障切换环境也必须进行这些更改。

  • 我们建议在与主要环境不同的区域中创建故障切换环境。因此,涵盖范围更广的可能的灾难场景,例如影响整个区域可用性的灾难。

  • 我们建议使用 Terraform 创建主要环境和故障切换环境,使它们的配置一致。请确保主环境和故障切换环境的 Terraform 定义已同步。

  • 建议配置故障切换环境(例如环境大小、调度器数量和 IAM 权限),使之符合主要环境的配置。这两种环境的 IAM 权限都必须向用户和快照授予适当的访问权限。

检查资源可用性

DAG 可以对外部资源运行,并且对这些资源的访问可能取决于环境的配置(例如向环境的服务帐号授予的权限、网络配置或项目的权限)。请确保这些资源可供故障切换环境使用。

环境可能会通过 Airflow 中存储的连接与一些外部资源进行交互。请检查这些资源是否应该在故障切换环境中(与主要环境相比)进行调整。

为快照创建存储桶

为环境快照创建新的存储桶。 请勿将环境存储桶用于灾难恢复,因为保留政策和生命周期的配置将应用于存储桶级。

确保此存储桶具有 IAM 权限、保留政策和生命周期配置,并且其设置方式应防止意外删除或未经授权的访问。如需详细了解如何为快照配置存储桶,请参阅配置计划快照

您可以:

  • 在其他区域中创建存储桶。
  • 创建多区域存储桶。

设置数据库维护

执行数据库维护 DAG,使 Airflow 元数据数据库保持小巧。这样做可以加快保存和加载快照的过程。Airflow 元数据数据库的数据量必须小于 20 Gb 才能支持快照。

设置计划快照

为主要环境设置计划快照

快照只能在运行状况良好的环境中创建,因此必须在灾难发生前保存快照。

如需详细了解快照的工作原理,请参阅保存和加载环境快照。如需了解在哪里可以找到已保存的快照,请参阅文档的保存环境快照部分。

(可选)为计划的快照操作设置监控

对于频率至少为每 12 小时一次的计划快照,您可以使用 Cloud Monitoring 在快照没有自动创建时发出提醒。

如需降低频率,您可以使用 Google Cloud CLI 验证快照操作结果。请参阅验证保存快照操作

  1. 在 Google Cloud 控制台中,前往 Monitoring 页面。

    打开 Monitoring

  2. 在“监控”导航窗格中,点击 提醒
  3. 如果您尚未创建通知渠道并希望收到通知,请点击修改通知渠道并添加通知渠道。添加渠道后,返回到提醒页面。
  4. 提醒页面中,点击创建政策
  5. 如需选择指标,请展开选择指标菜单,然后执行以下操作:
    1. 如需将菜单限制为相关条目,请在过滤栏中输入 Composer Snapshot。如果过滤菜单后没有显示任何结果,请停用仅显示活跃的资源和指标切换开关。
    2. 对于 Resource type,选择 Cloud Composer Environment
    3. 对于指标类别,选择环境
    4. 对于指标,选择快照创建次数
    5. 选择应用
  6. 点击添加过滤条件,然后使用下拉菜单添加以下过滤条件:
    过滤 比较条件
    资源标签 >environment_name = 要在其中监控计划快照的环境名称。
    监控标签 > 结果 = SUCCEEDED
  7. 转换数据部分,设置以下属性:
    • 对于滚动窗口,选择此提醒的监控窗口。 此值会影响下一步中的阈值配置。

      针对计划快照监控的建议值:1 天

    • 对于滚动窗口函数,选择增量
  8. 点击下一步
  9. 配置提醒触发器页面中的设置决定了何时触发提醒。使用下表中的设置完成本页面。
    字段
    Condition type Threshold
    Alert trigger Any time series violates
    Threshold position Below threshold
    Threshold value 您希望在配置为提醒的滚动期的时间范围内保存的计划快照的数量。

    此值的计算公式如下:

    (rolling window in hours / schedule frequency in hours) - 1

    注意:请在公式中扣减 1 小时,以便将不同的快照完成时间考虑在内。如果在监控检查期间最新快照仍在运行,这样做有助于防止出现假正例。

    示例
    如果您使用建议的滚动窗口(1 天),并且您的时间表频率是每 2 小时一次,则将此值设置为 11(根据计算公式为:24 / 2 - 1 = 11)。

    如果您的时间表正常运行,则在任何 24 小时的时间范围内,您都应该至少拥有 11 个快照。 否则,则表示快照操作未成功完成,并且 Cloud Monitoring 触发了此提醒。

    Condition name 条件的自定义名称。
  10. 点击下一步
  11. 可选:如需将通知添加到您的提醒政策中,请点击通知渠道。在对话框中,从菜单中选择一个或多个通知渠道,然后点击确定
  12. 可选:更新突发事件自动关闭持续时间。此字段用于确定在缺少指标数据的情况下 Monitoring 何时关闭突发事件。
  13. 可选:点击文档,然后添加您希望包含在通知消息中的任何信息。
  14. 点击提醒名称,然后输入提醒政策的名称。
  15. 点击 Create Policy(创建政策)。
如需了解详情,请参阅提醒政策

测试灾难恢复过程

请务必在设置灾难恢复过程后对其进行测试,并在之后定期进行测试。这样,您就可以解决可能影响实际灾难恢复过程的潜在问题。

在冷灾难恢复场景中,您可以在完成灾难恢复过程测试后删除故障切换环境。

验证保存快照操作

您可以使用 Google Cloud CLI 检索保存快照操作的列表,并验证您的快照是否已准备好用于灾难恢复。

如果您保存快照的频率低于每 12 小时至少一次,则此方法很有用。如需更频繁地验证保存的快照,最好配置 Cloud Monitoring 提醒。请参阅为计划快照操作设置监控

gcloud

列出特定环境的所有快照操作。 如需查看完整的命令参考,请参阅 gcloud composer actions list

gcloud composer operations list \
    --locations LOCATION \
    --filter="metadata.operationType=SAVE_SNAPSHOT AND
    metadata.resource=projects/PROJECT_ID/locations/LOCATION/environments/ENVIRONMENT_ID"
    --format yaml

您需要将其中的:

  • LOCATIONS 替换为环境所在的区域标识符的列表
  • PROJECT_ID 替换为环境所在项目的标识符
  • ENVIRONMENT_ID 替换为您要检查快照操作的环境的标识符

示例:

gcloud composer operations list \
    --locations us-central1 \
    --filter="metadata.operationType=SAVE_SNAPSHOT AND
    metadata.resource=projects/my-project/locations/us-central1/environments/my-environment"
    --format yaml

发生灾难后

在发生灾难后,请执行下面列出的步骤来恢复您的主要环境。

(仅限冷灾难恢复)创建故障切换环境

按照创建故障切换环境部分中的说明操作。

阻止主要环境执行 DAG

如果可能,请停止主要环境执行 DAG:

  • 如果仍然可以访问主要环境,请暂停所有 DAG
  • 如果主要环境的存储桶可访问,请将所有 DAG 从环境的存储桶中移出,或移至主要环境存储桶中 /dags 之外的文件夹。

将快照加载到故障切换环境

将主要环境中的快照加载到故障切换环境中。

将快照加载到故障切换环境后,它会在创建快照后安排和执行任务,就好像主环境未执行任何任务一样。但是,其中一些任务可能已经由主要环境执行。您无法通过故障切换环境来识别在创建快照后、灾难之前执行了哪些任务。因此,某些任务可能会执行两次(在主要环境和故障切换环境中)。我们建议所有任务都遵循幂等原则,并且计划快照每两小时创建一次

(如果需要)调整故障切换环境的配置

在某些情况下,您可能希望在将主要环境的快照加载到故障切换环境之后,更改该环境的配置。

例如,在冷灾难恢复场景中,您可能需要在故障切换环境中使用一组不同的 Airflow 环境变量。又例如,在热灾难恢复场景中,您可能需要在 Airflow 界面中向用户授予权限,以便他们能够访问故障切换环境。

您可以手动执行这些更改,也可以运行 gcloud composer environment update 命令来准备包含更改故障切换环境配置的命令的 Shell 脚本。

决定如何处理主要环境

如果无法访问主要环境,但仍可运行或无法正常运行,可能会发生一些灾难。例如,由于基础架构故障,您无法通过网络访问主要环境。再举一个例子,虽然环境中存在一些错误或容量减少,但某些 DAG 仍会被执行。

如果原始环境仍在运行,可能会产生与 Cloud Composer 或通过 DAG 访问的其他服务直接相关的费用,即使创建了新环境作为替代环境也是如此。此环境仍然可以执行某些 DAG;因此,某些操作可能会执行两次:在仍在运行的主要环境中执行,以及在加载快照后的故障切换环境中。

如果主要环境存在,但无法正常运行

如果所有相关数据已恢复,则可以删除主要环境。例如,您可能需要恢复环境快照中未包含的数据,例如网络配置或环境存储桶中 /dags/plugins 文件夹之外的内容。

主要环境变得可访问且恢复正常

如果主要环境只是暂时无法访问,而后又变得可访问且运行状况良好,则可以选择一种方法:

  • 继续使用故障切换环境。
  • 返回主要环境。

如需继续使用故障切换环境,请执行以下操作:

  1. 如果主要环境仍然执行 DAG,请尽快暂停它们
  2. 确保恢复所有相关数据,然后删除主要环境。
  3. 对故障切换环境重复执行灾难恢复准备步骤,例如设置计划快照。

如需返回主要环境,请执行以下操作:

  1. 暂停故障切换环境中的所有 DAG。
  2. 等待故障切换环境中的所有 DAG 运行完成,或停止这些运行作业。
  3. 保存故障切换环境的快照。
  4. 将此快照加载到主要环境。
  5. 取消暂停主要环境中的 DAG。
  6. 如果需要,请删除故障切换环境。

后续步骤