Cloud Composer 3 | Cloud Composer 2 | Cloud Composer 1
本页介绍了如何使用环境快照进行灾难恢复。
定义
本指南使用以下定义:
- 灾难是指 Cloud Composer 或对环境运行至关重要的其他组件不可用的情况。此事件需要向其他区域和 Cloud Composer 环境进行故障转移。灾难的原因可能是自然原因或人为原因,包括 Google Cloud 区域的服务中断和您自己基础架构的服务中断。
- 在 Cloud Composer 中,灾难恢复 (DR) 是指在灾难发生后恢复环境运行的过程。该过程涉及重新创建环境,可能在其他区域。如需详细了解灾难恢复,请参阅灾难恢复规划指南。
- 主要环境是指您要为其启用 DR 功能的 Cloud Composer 环境。
- 故障转移环境是指指定用于接管主要环境中活动的 Cloud Composer 环境。
- 热备灾难恢复场景是灾难恢复的一种变体,您需要使用在灾难发生之前创建的待机故障切换环境。
- 冷灾难恢复场景是灾难恢复的一种变体,您可以在灾难发生后创建故障转移环境。
- 跨区域灾难恢复是热备份或冷备份灾难恢复的变体,其中主环境和故障切换环境位于不同的区域。
灾难恢复流程简介
当您的主要环境因灾难而无法运行(损坏或无法访问)时,灾难恢复过程可解决此问题。
此过程假定您的主环境无法就地修复以应对灾难。而是并排创建第二个(故障切换)环境。此环境将代替主环境运行。在后续阶段,您可以决定改回主环境,也可以继续使用故障切换环境。
由于该过程使用的是故障转移环境,因此当您从主环境切换时,系统会进行更改。主环境和故障转移环境之间的更改包括(此列表并非详尽无遗):
Web 服务器网址将会不同。这会更改 Airflow 界面和 Airflow REST API 端点的地址。
环境的存储分区网址将会不同。
可能需要调整网络和访问权限配置。
如果您使用的是热备份 DR 方案,则提前知道 Web 服务器、环境的存储分区地址和网络配置的值。
准备工作
Airflow 数据库中的数据必须少于 20 GB,才能创建快照。
若要创建快照,环境存储分区中的
/dags
、/plugins
和/data
文件夹中的对象总数必须少于 10 万。如果您使用 XCom 机制传输文件,请确保按照 Airflow 准则使用该机制。使用 XCom 传输大型文件或大量文件会影响 Airflow 数据库的性能,并可能会导致加载快照或升级环境时出现失败。考虑使用 Cloud Storage 等替代方案来传输大量数据。
准备工作概览
这两种灾难恢复场景都包含以下准备步骤:
-
- 在温灾难恢复场景中,您需要确保此环境可用。
- 在冷 DR 场景中,您创建此环境只是为了测试灾难恢复流程。完成准备工作后,您可以删除此环境,并在发生灾难后重新创建。
-
该存储分区必须位于 DR 区域。对于跨区域灾难恢复,快照存储分区必须是多区域存储分区,或者位于与主环境不同的区域。
检查 DAG 是否可以访问区域性资源。
灾难恢复概览
灾难发生后:
- (仅限冷备灾 DR)创建故障切换环境。
- 尽可能阻止主环境执行 DAG。
- 将快照从快照存储分区加载到故障转移环境。
- 如果需要,请调整故障转移环境的配置。
- 确定如何处理主环境。
准备步骤
请按照下列步骤为您的环境设置灾难恢复。
创建故障切换环境
创建环境,以用作故障转移环境。
请遵循以下准则:
-
主环境和故障转移环境必须使用相同的 Airflow 版本和 build。
在热备用 DR 场景中,请确保同步更新和升级两个环境。例如,如果您将主环境升级到较新的 Airflow build 或安装 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 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
灾难发生后
发生灾难后,请按照下文所述的步骤恢复您的主环境。
(仅限冷备灾 DR)创建故障切换环境
按照创建故障转移环境部分中的说明操作。
停止主环境执行 DAG
如果可能,请停止主环境执行 DAG:
- 如果仍能访问主要环境,请暂停所有 DAG。
- 如果主环境的存储分区可访问,请将所有 DAG 从该环境的存储分区中移出,或移至主环境存储分区中
/dags
之外的文件夹。
将快照加载到故障切换环境
将主环境中的快照加载到故障切换环境。
将快照加载到故障切换环境后,它会像在创建快照后主环境未执行任何操作一样,安排和执行任务。不过,其中一些任务可能已由主环境执行。故障转移环境没有任何方法来识别在创建快照后和灾难发生前执行了哪些任务。因此,某些任务可能会执行两次(在主环境和故障转移环境中)。我们建议所有任务都具有幂等性,并且每两个小时创建一次定期快照。
(如果需要)调整故障切换环境的配置
在某些情况下,您可能需要在将主环境的快照加载到故障转移环境后更改故障转移环境的配置。
例如,在冷备份 DR 场景中,您可能需要在故障转移环境中使用另一组 Airflow 环境变量。再举一个例子,在热备份 DR 场景中,您可能需要在 Airflow 界面中向用户授予权限,以便他们可以访问故障转移环境。
您可以手动执行这些更改,也可以准备一个 Shell 脚本,其中包含通过运行 gcloud composer environment update
命令更改故障转移环境配置的命令。
确定如何处理主环境
由于主环境不可访问但仍在运行或无法正常运行,因此可能会发生一些灾难。例如,由于基础架构故障,您无法通过网络访问主环境。再举一个例子,环境在运行时出现一些错误或容量有所降低,但仍会执行某些 DAG。
如果原始环境仍在运行,则可能会产生与 Cloud Composer 或通过 DAG 访问的其他服务直接相关的费用,即使创建了新环境作为替代环境也是如此。此环境仍可执行某些 DAG;因此,某些操作可能会执行两次:在仍在运行的主环境中,以及在加载快照后的故障切换环境中。
如果主环境存在,但无法正常运行
如果所有相关数据均已恢复,则可以删除主环境。例如,您可能需要恢复环境快照中未包含的数据,例如网络配置,或 /dags
和 /plugins
文件夹之外的环境存储分区中的内容。
如果主环境再次变得可访问且运行状况良好
如果主环境只是暂时无法访问,之后又可以访问且运行状况良好,您可以选择以下方法:
- 继续使用故障切换环境。
- 返回主环境。
如需继续使用故障切换环境,请执行以下操作:
- 如果主环境仍在执行 DAG,请尽快暂停它们。
- 确保已恢复所有相关数据,然后删除主环境。
- 针对故障转移环境重复 DR 准备步骤,例如设置定期快照。
如需返回主环境,请执行以下操作:
- 暂停故障转移环境中的所有 DAG。
- 等待所有 DAG 在故障转移环境中运行完毕,或停止它们。
- 保存故障转移环境的快照。
- 将此快照加载到主环境。
- 取消暂停主环境中的 DAG。
- 根据需要,删除故障转移环境。