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

Managed Airflow(第 3 代) | Managed Airflow(第 2 代) | Managed Airflow(旧版第 1 代)

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

定义

本指南使用以下定义:

  • “灾难”是指 Managed Airflow 或对环境运行至关重要的其他组件不可用的事件。 此事件需要故障切换到其他区域和 Managed Airflow 环境。灾难的原因可能是自然原因,也可能是人为原因, 包括区域 Google Cloud 停机时间和您自己的 基础架构中断。
  • 在 Managed Airflow 的上下文中,“灾难恢复 (DR)”是指在灾难发生后恢复环境运行的 过程。该过程涉及重新创建环境,可能是在另一个区域中。 如需详细了解灾难恢复,请参阅 灾难恢复规划指南
  • “主环境”是指您要为其启用灾难恢复功能的 Managed Airflow 环境。
  • “故障切换环境”是指指定用于接管主环境活动的 Managed Airflow 环境。
  • “暖灾难恢复场景”是灾难恢复的一种变体,您可以在灾难发生之前创建备用故障切换环境。
  • “冷灾难恢复场景”是灾难恢复的一种变体,您可以在灾难发生后创建故障切换环境。
  • “跨区域灾难恢复”是暖灾难恢复或冷灾难恢复的一种变体,其中主环境和故障切换环境位于不同的区域。

灾难恢复过程简介

当主环境因灾难而无法运行(损坏或无法访问)时,灾难恢复过程可以解决此问题。

此过程假定您的主环境不会就地修复以应对灾难。相反,您会并排创建第二个(故障切换)环境。此环境将取代主环境运行。在稍后阶段,您可能会决定返回主环境或继续使用故障切换环境。

由于该过程使用故障切换环境,因此在从主环境切换时会引入更改。主环境和故障切换环境之间的更改包括(但不限于):

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

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

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

如果您使用暖灾难恢复场景,则会提前知道 Web 服务器、环境的存储桶地址和网络配置的值。

准备工作

  • Managed Airflow 在 2.0.32 及更高版本中支持计划快照。环境快照在 2.0.9 及更高版本中受支持。
  • Airflow 数据库的数据必须小于 20 GB,才能创建快照。

  • 环境的存储桶中 /dags/plugins/data 文件夹中的对象总数必须小于 100,000,才能创建快照。

  • 如果您使用 XCom 机制来传输文件,请确保 按照 Airflow 的准则使用该机制。 使用 XCom 传输大型文件或大量文件会影响 Airflow 数据库的性能,并可能导致在加载快照或升级环境时失败。建议考虑使用 Cloud Storage 等替代方案来传输大量数据。

准备工作概览

两种灾难恢复场景都包含以下准备步骤:

  1. 创建故障切换环境

    • 在暖灾难恢复场景中,您需要保持此环境可用。
    • 在冷灾难恢复场景中,您仅创建此环境来测试灾难恢复过程。完成准备工作后,您需要删除此环境,并在灾难发生后再次创建它。
  2. 为快照创建存储桶

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

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

  3. 设置数据库维护

  4. 设置计划快照

  5. 测试灾难恢复过程

灾难恢复概览

灾难发生后:

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

准备步骤

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

创建故障切换环境

创建一个环境,该环境充当故障切换环境。

请遵循以下准则:

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

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

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

  • 我们建议使用 Terraform 创建主环境和故障切换环境,以便两者具有一致的配置。确保主环境和故障切换环境的 Terraform 定义已同步。

  • 建议故障切换环境的配置(例如环境大小、调度器数量和 IAM 权限)与主环境的配置保持一致。 这两个环境的 IAM 权限必须为用户和快照提供适当的访问权限。

检查资源可用性

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

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

为快照创建存储桶

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

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

您可以:

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

设置数据库维护

通过设置 数据库清理,使 Airflow 数据库保持较小的大小,并使其不超过大小限制。这样做可以加快保存和加载快照的过程。Airflow 数据库的数据必须小于 20 GB,才能创建快照。

设置计划快照

设置计划快照为主 环境。

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

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

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

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

对于频率较低的时间表,您可以使用 Google Cloud CLI 验证快照操作结果。 请参阅验证保存快照操作

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

    转至监控

  2. 在“监控”导航窗格中,点击 提醒
  3. 如果您尚未创建通知渠道并希望收到通知,请点击修改通知渠道并添加通知渠道。添加渠道后,返回到提醒页面。
  4. 提醒页面中,点击创建政策
  5. 如需选择指标,请展开选择指标菜单,然后执行以下操作:
    1. 如需将菜单限制为相关条目,请在过滤条件栏中输入 Composer Snapshot。如果过滤菜单后没有显示任何结果,请停用 仅显示活跃的资源和指标 切换开关。
    2. 对于资源类型,请选择Cloud Composer 环境
    3. 对于指标类别,请选择环境
    4. 对于指标 ,请选择快照创建计数
    5. 选择应用
  6. 点击添加过滤条件,然后使用下拉菜单添加以下过滤条件:
    过滤条件 比较条件
    资源标签 > environment_name = 您要监控计划快照的环境名称。
    监控标签 > result = 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 operations 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 界面中向用户授予权限,以便他们可以访问故障切换环境。

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

确定如何处理主环境

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

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

如果主环境存在,但运行不正常

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

如果主环境再次变得可访问且运行状况良好

如果主环境只是暂时无法访问,并且再次变得可访问且运行状况良好,那么您可以选择一种方法:

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

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

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

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

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

后续步骤