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