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 场景都包含以下准备步骤:
-
- 在热灾难恢复场景中,您会保持此环境可用。
- 在冷灾难恢复场景中,您创建此环境的目的只是为了测试灾难恢复过程。完成准备后,请删除此环境,并在灾难发生后重新创建。
-
该存储桶必须在灾难恢复区域中可用。对于跨区域灾难恢复,快照存储桶必须是多区域或位于与主要环境不同的区域。
检查 DAG 是否可以访问区域级资源。
灾难恢复概览
灾难发生后:
- (仅限冷灾难恢复)创建故障切换环境。
- 如果可能,请阻止主要环境执行 DAG。
- 从快照存储桶加载快照到故障切换环境。
- 如果需要,请调整故障切换环境的配置。
- 决定如何处理主要环境。
准备步骤
请按照下列步骤为您的环境设置灾难恢复。
创建故障切换环境
创建一个环境作为故障切换环境。
请遵循以下准则:
您的主环境和故障切换环境必须使用相同版本的 Cloud Composer 和 Airflow。
在热灾难恢复场景中,请务必同步更新和升级这两个环境。例如,如果将主要环境升级到更高版本的 Cloud Composer 或安装 PyPI 软件包,则故障切换环境也必须进行这些更改。
我们建议在与主要环境不同的区域中创建故障切换环境。因此,涵盖范围更广的可能的灾难场景,例如影响整个区域可用性的灾难。
我们建议使用 Terraform 创建主要环境和故障切换环境,使它们的配置一致。请确保主环境和故障切换环境的 Terraform 定义已同步。
建议配置故障切换环境(例如环境大小、调度器数量和 IAM 权限),使之符合主要环境的配置。这两种环境的 IAM 权限都必须向用户和快照授予适当的访问权限。
检查资源可用性
DAG 可以对外部资源运行,并且对这些资源的访问可能取决于环境的配置(例如向环境的服务帐号授予的权限、网络配置或项目的权限)。请确保这些资源可供故障切换环境使用。
环境可能会通过 Airflow 中存储的连接与一些外部资源进行交互。请检查这些资源是否应该在故障切换环境中(与主要环境相比)进行调整。
为快照创建存储桶
为环境快照创建新的存储桶。 请勿将环境存储桶用于灾难恢复,因为保留政策和生命周期的配置将应用于存储桶级。
确保此存储桶具有 IAM 权限、保留政策和生命周期配置,并且其设置方式应防止意外删除或未经授权的访问。如需详细了解如何为快照配置存储桶,请参阅配置计划快照。
您可以:
- 在其他区域中创建存储桶。
- 创建多区域存储桶。
设置数据库维护
执行数据库维护 DAG,使 Airflow 元数据数据库保持小巧。这样做可以加快保存和加载快照的过程。Airflow 元数据数据库的数据量必须小于 20 Gb 才能支持快照。
设置计划快照
为主要环境设置计划快照。
快照只能在运行状况良好的环境中创建,因此必须在灾难发生前保存快照。
如需详细了解快照的工作原理,请参阅保存和加载环境快照。如需了解在哪里可以找到已保存的快照,请参阅文档的保存环境快照部分。
(可选)为计划的快照操作设置监控
对于频率至少为每 12 小时一次的计划快照,您可以使用 Cloud Monitoring 在快照没有自动创建时发出提醒。
如需降低频率,您可以使用 Google Cloud CLI 验证快照操作结果。请参阅验证保存快照操作。
- 在 Google Cloud 控制台中,前往 Monitoring 页面。
- 在“监控”导航窗格中,点击 notifications提醒。
- 如果您尚未创建通知渠道并希望收到通知,请点击修改通知渠道并添加通知渠道。添加渠道后,返回到提醒页面。
- 在提醒页面中,点击创建政策。
- 如需选择指标,请展开选择指标菜单,然后执行以下操作:
- 如需将菜单限制为相关条目,请在过滤栏中输入
Composer Snapshot
。如果过滤菜单后没有显示任何结果,请停用仅显示活跃的资源和指标切换开关。 - 对于 Resource type,选择 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
发生灾难后
在发生灾难后,请执行下面列出的步骤来恢复您的主要环境。
(仅限冷灾难恢复)创建故障切换环境
按照创建故障切换环境部分中的说明操作。
阻止主要环境执行 DAG
如果可能,请停止主要环境执行 DAG:
- 如果仍然可以访问主要环境,请暂停所有 DAG。
- 如果主要环境的存储桶可访问,请将所有 DAG 从环境的存储桶中移出,或移至主要环境存储桶中
/dags
之外的文件夹。
将快照加载到故障切换环境
将主要环境中的快照加载到故障切换环境中。
将快照加载到故障切换环境后,它会在创建快照后安排和执行任务,就好像主环境未执行任何任务一样。但是,其中一些任务可能已经由主要环境执行。您无法通过故障切换环境来识别在创建快照后、灾难之前执行了哪些任务。因此,某些任务可能会执行两次(在主要环境和故障切换环境中)。我们建议所有任务都遵循幂等原则,并且计划快照每两小时创建一次。
(如果需要)调整故障切换环境的配置
在某些情况下,您可能希望在将主要环境的快照加载到故障切换环境之后,更改该环境的配置。
例如,在冷灾难恢复场景中,您可能需要在故障切换环境中使用一组不同的 Airflow 环境变量。又例如,在热灾难恢复场景中,您可能需要在 Airflow 界面中向用户授予权限,以便他们能够访问故障切换环境。
您可以手动执行这些更改,也可以运行 gcloud composer environment update
命令来准备包含更改故障切换环境配置的命令的 Shell 脚本。
决定如何处理主要环境
如果无法访问主要环境,但仍可运行或无法正常运行,可能会发生一些灾难。例如,由于基础架构故障,您无法通过网络访问主要环境。再举一个例子,虽然环境中存在一些错误或容量减少,但某些 DAG 仍会被执行。
如果原始环境仍在运行,可能会产生与 Cloud Composer 或通过 DAG 访问的其他服务直接相关的费用,即使创建了新环境作为替代环境也是如此。此环境仍然可以执行某些 DAG;因此,某些操作可能会执行两次:在仍在运行的主要环境中执行,以及在加载快照后的故障切换环境中。
如果主要环境存在,但无法正常运行
如果所有相关数据已恢复,则可以删除主要环境。例如,您可能需要恢复环境快照中未包含的数据,例如网络配置或环境存储桶中 /dags
和 /plugins
文件夹之外的内容。
主要环境变得可访问且恢复正常
如果主要环境只是暂时无法访问,而后又变得可访问且运行状况良好,则可以选择一种方法:
- 继续使用故障切换环境。
- 返回主要环境。
如需继续使用故障切换环境,请执行以下操作:
- 如果主要环境仍然执行 DAG,请尽快暂停它们。
- 确保恢复所有相关数据,然后删除主要环境。
- 对故障切换环境重复执行灾难恢复准备步骤,例如设置计划快照。
如需返回主要环境,请执行以下操作:
- 暂停故障切换环境中的所有 DAG。
- 等待故障切换环境中的所有 DAG 运行完成,或停止这些运行作业。
- 保存故障切换环境的快照。
- 将此快照加载到主要环境。
- 取消暂停主要环境中的 DAG。
- 如果需要,请删除故障切换环境。