Cloud Composer 1 | Cloud Composer 2 | Cloud Composer 3
本页面介绍了如何使用环境快照进行灾难恢复。
定义
本指南使用以下定义:
- 灾难是指 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。
在热 DR 场景中,请确保同步更新和升级这两个环境。例如,如果您将主要环境升级到更高版本的 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 天。
- 对于滚动窗口函数,选择 delta。
- 对于滚动窗口,选择此提醒的监控窗口。此值会影响下一步中的阈值配置。
- 点击下一步。
- 配置提醒触发器页面中的设置决定了何时触发提醒。
请使用下表中的设置完成此页面。
字段 价值 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
外部文件夹。
将快照加载到故障切换环境
从主要环境加载快照到故障切换环境。
快照加载到故障切换环境后,它会安排和执行任务,就像在创建快照后主环境未执行任何任务一样。但是,其中一些任务可能已由主要环境执行。故障切换环境没有任何方法来识别创建快照后和灾难之前执行了哪些任务。因此,某些任务可能会执行两次(同时在主环境和故障切换环境中)。我们建议所有任务都遵循幂等原则,并且计划快照每两小时创建一次。
(如果需要)调整故障切换环境的配置
在某些情况下,您可能希望在将主要环境的快照加载到故障切换环境后,更改该环境的配置。
例如,在冷灾难恢复场景中,您可能需要在故障切换环境中使用一组不同的 Airflow 环境变量。再举一例,在热灾难恢复场景中,您可能需要在 Airflow 界面中向用户授予权限,以便他们可以访问故障切换环境。
您可以手动执行这些更改,也可以通过运行 gcloud composer environment update
命令准备包含用于更改故障切换环境配置的命令的 shell 脚本。
决定如何处理主要环境
之所以发生一些灾难,可能是因为主环境无法访问,但仍可运行或无法正常运行。例如,由于基础架构故障,您无法通过网络访问主要环境。再举一个例子,环境运行时出现一些错误或容量减少,但某些 DAG 仍会执行。
如果原始环境仍在运行,那么即使创建了新的环境作为替代环境,它也可能会产生与通过 DAG 访问的 Cloud Composer 或其他服务直接相关的费用。此环境仍然可以执行某些 DAG;因此,某些操作可能会执行两次:在仍在运行的主要环境中执行,以及在加载快照后的故障切换环境中执行。
如果主要环境存在,但无法正常运行
如果所有相关数据均已恢复,则可以删除主要环境。例如,您可能希望恢复未包含在环境快照中的数据,例如网络配置或 /dags
和 /plugins
文件夹之外的环境存储桶的内容。
如果主要环境可以访问且健康状况恢复良好
如果主要环境只是暂时不可访问,而后又变为可访问且健康状况良好,那么您可以选择一种方法:
- 继续使用故障切换环境。
- 返回主要环境。
如需继续使用故障切换环境,请执行以下操作:
- 如果主要环境仍在执行 DAG,请尽快暂停它们。
- 请确保恢复所有相关数据,然后删除主要环境。
- 对故障切换环境重复执行灾难恢复准备步骤,例如设置计划快照。
要返回主要环境,请执行以下操作:
- 暂停故障切换环境中的所有 DAG。
- 等待所有 DAG 运行在故障切换环境中完成,或者停止这些运行。
- 保存故障切换环境的快照。
- 将此快照加载到主要环境。
- 取消暂停主要环境中的 DAG。
- 如果需要,请删除故障切换环境。