Cloud Composer 1 |Cloud Composer 2 |Cloud Composer 3
本页面介绍了如何将环境快照用于 灾难恢复。
定义
本指南使用以下定义:
- 灾难是指 Cloud Composer 或对环境运行至关重要的其他组件不可用的情况。此事件需要向其他区域和 Cloud Composer 环境进行故障转移。灾难的原因可能是自然的,也可能是人为的, 包括 Google Cloud 区域的停机和自行发生的服务中断 基础架构
- 在 Cloud Composer 中,灾难恢复 (DR) 是指在灾难发生后恢复环境运行的过程。该过程涉及重新创建环境,可能在其他区域。如需详细了解灾难恢复,请参阅灾难恢复规划指南。
- 主要环境是指您要为其启用 DR 功能的 Cloud Composer 环境。
- 故障转移环境是指指定用于接管主要环境中活动的 Cloud Composer 环境。
- 温灾难恢复场景是灾难恢复的变体,使用备用实例 您在灾难发生前创建的故障切换环境。
- 冷灾难恢复场景是灾难恢复的变体,您需要创建 管理灾难发生后的故障切换环境
- 跨区域灾难恢复是暖或冷灾难恢复的变体,其中 主要环境和故障切换环境位于不同的区域。
关于灾难恢复过程
当您的主环境因灾难而无法正常运行(损坏或无法访问)时,灾难恢复流程可解决此问题。
此过程假定您的主环境无法就地修复以应对灾难。而是并排创建第二个(故障转移)环境。此环境不是在主要环境中运行 环境在后续阶段,您可以决定改回主环境,也可以继续使用故障切换环境。
由于该过程使用的是故障转移环境,因此当您从主环境切换时,系统会进行更改。主环境和故障转移环境之间的更改包括(此列表并非详尽无遗):
Web 服务器网址将会不同。这会更改 Airflow 界面和 Airflow REST API 端点。
环境的存储桶网址将会不同。
可能需要调整网络和访问权限配置。
如果使用热 DR 场景,您知道 Web 服务器的值, 环境的存储桶地址以及网络配置。
准备工作
Cloud Composer 在 2.0.32 及更高版本中支持计划快照 版本。2.0.9 及更高版本支持环境快照。
Airflow 数据库中的数据必须少于 20 GB,才能创建快照。
/dags
、/plugins
和/data
文件夹中的对象总数 存储桶必须小于 100,000 创建快照。如果您使用 XCom 机制传输文件,请确保按照 Airflow 准则使用该机制。使用 XCom 传输大型文件或大量文件会影响 Airflow 数据库的性能,并可能会导致加载快照或升级环境时发生失败。考虑使用 Cloud Storage 等替代方案来传输大量数据。
准备工作概览
这两种灾难恢复场景都包含以下准备步骤:
-
- 在温灾难恢复场景中,您需要确保此环境可用。
- 在冷 DR 场景中,您创建此环境只是为了测试灾难恢复流程。完成准备工作后,您可以删除此环境,并在发生灾难后重新创建。
-
此存储桶必须在灾难恢复区域中可用。对于跨区域灾难恢复, 快照存储分区必须是多区域位置或位于 与主要环境不同的区域。
检查 DAG 是否可以访问区域性资源。
灾难恢复概览
灾难发生后:
- (仅限冷备灾 DR)创建故障切换环境。
- 尽可能阻止主环境执行 DAG。
- 从快照存储桶加载快照到故障切换 环境
- 如果需要,请调整故障转移环境的配置。
- 决定如何处理主要环境。
准备步骤
请按照下列步骤为您的环境设置灾难恢复。
创建故障切换环境
请遵循以下准则:
主环境和故障转移环境必须使用相同版本的 Cloud Composer 和 Airflow。
在热 DR 场景中,请务必执行更新和 同步升级这两个环境。例如,如果您 将主要环境升级到更高版本的 Cloud Composer 或者安装 PyPI 软件包,则您的故障切换环境还必须 这些更改
我们建议在不同于 主要环境因此,可以涵盖更广泛的可能灾难场景,例如影响整个区域可用性的灾难。
我们建议使用 Terraform 创建主环境和故障转移环境,以便这两个环境具有一致的配置。请确保 主要环境和故障切换环境的 Terraform 定义均为 已同步。
故障切换环境的配置(例如环境大小、 调度器数量和 IAM 权限) 与主要环境的配置一致。 这两个环境的 IAM 权限都必须向用户和快照授予适当的访问权限。
检查资源可用性
DAG 可以对外部资源运行,而对这些资源的访问可能 取决于环境的配置(例如授予 环境的服务账号、网络配置或项目)。制造商 确保这些资源可供故障切换环境使用。
环境可以通过 存储在 Airflow 中的连接。检查这些资源在故障切换环境中是否应与主环境进行调整。
创建用于存储快照的存储桶
为环境快照创建新的存储桶。 请勿将环境存储分区用于灾难恢复,因为 保留政策和生命周期在存储桶级别应用。
确保此存储桶拥有 IAM 权限 保留政策和生命周期配置 意外删除或未经授权的访问。如需详细了解 为快照配置存储分区 配置计划快照。
您可以:
- 在其他区域中创建存储桶。
- 创建多区域存储桶。
设置数据库维护
通过设置数据库清理,可确保 Airflow 数据库保持较小且不超出大小限制。这样可以加快保存和加载快照的过程。Airflow 数据库中的数据量必须少于 20 GB,才能创建快照。
设置计划快照
为主环境设置计划快照。
只能在运行状况良好的环境中创建快照,因此快照必须是 并在灾难发生前保存下来
如需详细了解快照的运作方式,请参阅保存和加载环境快照。如需了解保存的快照在何处,请参阅文档的保存环境快照部分。
(可选)为计划快照操作设置监控
对于频率至少为每 12 小时一次的计划快照, 可以使用 Cloud Monitoring 在系统未自动创建快照时向您发出提醒。
对于频率较低的时间表,您可以使用 Google Cloud CLI 验证快照操作结果。请参阅验证保存快照操作。
- 在 Google Cloud Console 中,前往 Monitoring 页面。
- 在“监控”导航窗格中,点击 notifications提醒。
- 如果您尚未创建通知渠道并希望收到通知,请点击修改通知渠道并添加通知渠道。添加渠道后,返回到提醒页面。
- 在提醒页面中,点击创建政策。
- 如需选择指标,请展开选择指标菜单,然后执行以下操作:
- 如需将菜单限制为相关条目,请在过滤栏中输入
Composer Snapshot
。如果过滤菜单后没有显示任何结果,请停用仅显示活跃的资源和指标切换开关。 - 在资源类型中,选择 Cloud Composer Environment。
- 对于指标类别,选择环境。
- 对于指标,选择快照创建计数。
- 选择应用。
- 如需将菜单限制为相关条目,请在过滤栏中输入
-
点击添加过滤条件,然后使用下拉菜单添加以下过滤条件:
过滤 比较条件 值 资源标签 >environment_name = 您要在其中监控计划快照的环境名称。 监控标签 > 结果 = SUCCEEDED
- 在转换数据部分中,设置以下属性:
- 对于滚动窗口,选择此提醒的监控期。
此值会影响下一步中的阈值配置。
计划快照监控的建议值:1 天。
- 对于滚动窗口函数,请选择增量。
- 对于滚动窗口,选择此提醒的监控期。
此值会影响下一步中的阈值配置。
- 点击下一步。
- 配置提醒触发器页面中的设置决定了何时触发提醒。
请使用下表中的设置完成此页面。
字段 值 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
条件的自定义名称。 - 点击下一步。
- 可选:如需将通知添加到您的提醒政策中,请点击通知渠道。在对话框中,从菜单中选择一个或多个通知渠道,然后点击确定。
- 可选:更新突发事件自动关闭持续时间。此字段用于确定在缺少指标数据的情况下 Monitoring 何时关闭突发事件。
- 可选:点击文档,然后添加您希望包含在通知消息中的任何信息。
- 点击提醒名称,然后输入提醒政策的名称。
- 点击 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
灾难发生后
发生灾难后,请按照下文所述的步骤恢复您的主环境。
(仅限冷备灾 DR)创建故障切换环境
按照创建故障切换环境部分中的说明操作。
停止主环境执行 DAG
如果可能,请停止主环境执行 DAG:
- 如果仍能访问主要环境,请暂停所有 DAG。
- 如果主环境的存储桶可供访问,请从该环境的存储桶中移出所有 DAG,或将其移至主环境存储桶中
/dags
之外的文件夹。
将快照加载到故障切换环境
从主要环境中加载快照 进入故障切换环境
快照加载到故障切换环境后,它会安排和 执行任务时,假定主环境在 创建快照不过,其中一些任务可能已由主环境执行。故障转移环境没有任何方法来识别在创建快照后和灾难发生前执行了哪些任务。因此,某些任务可能会执行两次(在主环境和故障转移环境中)。我们建议 具有幂等性,并且计划快照 每两小时创建一次。
(如果需要)调整故障切换环境的配置
在某些情况下,您可能需要在将主环境的快照加载到故障转移环境后更改故障转移环境的配置。
例如,在冷灾难恢复场景中,您可能需要使用不同的 故障切换环境中的 Airflow 环境变量。再举一个例子 在热灾难恢复场景中,您可能需要向 Airflow 界面,使用户能够访问故障切换环境。
您可以手动执行这些更改,也可以准备一个 Shell 脚本,其中包含通过运行 gcloud composer environment update
命令更改故障转移环境配置的命令。
决定如何处理主要环境
由于无法访问主要环境,可能会发生一些灾难 但仍运行或无法正常运行。例如,您不能 由于使用基础架构,需要通过网络访问主要环境。 失败。再举一个例子,环境运行出现一些错误或 容量减少,但某些 DAG 仍会执行。
如果原始环境仍在运行 会产生与 Cloud Composer 或其他服务直接相关的费用 (即使作为 Cloud Storage 存储分区创建的新环境) 替换。此环境仍可执行某些 DAG;因此,某些操作可能会执行两次:在仍在运行的主环境中,以及在加载快照后的故障切换环境中。
如果主要环境存在,但无法正常运行
如果所有相关数据已恢复,则可以删除主要环境。对于
例如,你可能需要
环境快照中未包含的数据,
例如网络配置或环境
位于 /dags
和 /plugins
文件夹外的存储桶中。
如果主环境再次变得可访问且运行状况良好
如果主环境只是暂时无法访问,之后又可以访问且运行状况良好,您可以选择以下方法:
- 继续使用故障切换环境。
- 返回主要环境。
如需继续使用故障切换环境,请执行以下操作:
- 如果主环境仍在执行 DAG,请尽快暂停它们。
- 确保已恢复所有相关数据,然后删除主环境。
- 对故障切换环境重复灾难恢复准备步骤,例如设置 定期创建快照
要返回主要环境,请执行以下操作:
- 暂停故障切换环境中的所有 DAG。
- 等待所有 DAG 在故障转移环境中运行完毕,或停止它们。
- 保存故障转移环境的快照。
- 将此快照加载到主环境。
- 取消暂停主环境中的 DAG。
- 如果需要,请删除故障切换环境。