2023 年 Airflow 峰会
参加 9 月 19 日至 21 日的 Airflow 社区,了解 Airflow 峰会 2023 以详细了解 Airflow 并分享您的专业知识。Call for papers 现已开放

指定维护窗口

Cloud Composer 1 | Cloud Composer 2

本页面介绍如何为您的环境定义维护窗口。

维护窗口简介

维护窗口是指您允许 Cloud Composer 执行维护操作的时间段。例如,通过指定 DAG 时间表以外的维护期,您可以确保您的关键任务执行不会中断。

借助维护期,您可以控制您的环境的维护时间段:

  • 如果您为自己的环境定义了自定义维护期,则 Cloud Composer 会在这些定义的时间段内执行维护。

  • 如果您没有为您的环境定义维护期,Cloud Composer 会随时执行维护。

维护期间会发生什么

指定维护期后,您在一周内为维护操作提供至少 12 小时的时间:

  • 在维护期间,您的环境将始终可用。在维护操作进行中时,环境的某些组件可能会暂时不可用。
  • 为了让 Cloud Composer 有足够的时间安排和执行所有维护操作,必须有 12 小时。这并不意味着维护操作需要完整的 12 小时,甚至每周执行一次。

您仍然可以在维护期运行 DAG,只要某些任务可以中断并重试即可。如果您在维护期内运行 DAG,请务必启用任务重试功能。您可以在 Airflow 配置、DAG 或任务级别配置任务重试次数。

维护操作可能会对您的环境造成以下影响:

  • 可能暂时无法更改环境的某些参数或升级到较新版本。

  • 对 Airflow 数据库进行直接 SQL 查询可能需要比平时更长的时间,并且可能需要重试。

  • Airflow 界面可能暂时无法使用

  • 某些 Airflow 任务可能会中断。维护操作完成后,Airflow 会安排重试这些任务(如果未配置)。

默认维护期

默认情况下,如果您通过 Google Cloud 控制台、API 或 Terraform 创建 Cloud Composer 1 环境,则这些环境没有定义维护期。我们建议您为新环境和现有环境指定维护期。

如果您使用 gcloud CLI 创建环境,那么您的环境在每周日、周五和周六的默认维护期为 00:00:00 到 04:00:00 (GMT)。

如何使用维护窗口

维护操作可能会影响 DAG 和 Airflow 任务的执行,因此我们建议您执行以下操作:

  1. 定义 Cloud Composer 环境的维护窗口。

  2. 通过在 DAG 中使用 start_dateschedule_interval 参数,安排在指定维护窗口之外运行的 DAG。

为新环境指定维护窗口

您可以在创建环境时指定维护窗口。如需了解详情,请参阅创建环境

为现有环境指定维护窗口

控制台

如需定义或更改现有环境的维护窗口,请更新环境

  1. 在 Google Cloud 控制台中,转到环境页面。

    转到“环境”

  2. 选择您的环境。

  3. 转到环境配置标签页。

  4. 维护窗口条目旁边,点击修改

  5. 维护窗口对话框中,选中设置维护窗口的自定义时间复选框。

  6. 设置开始时间时区天数长度,以便指定 7 天的滚动期内,时间表的总时间至少 12 小时。例如,每个星期一、星期三和星期五的 4 小时提供了所需的时间。

  7. 点击保存,然后等待您的环境更新。

gcloud

更新环境时,以下参数定义了维护窗口参数:

  • --maintenance-window-start 设置自定义维护窗口的开始时间。
  • --maintenance-window-end 设置维护窗口的结束时间。
  • --maintenance-window-recurrence 设置维护窗口重复
gcloud beta composer environments update ENVIRONMENT_NAME \
    --location LOCATION \
    --maintenance-window-start 'DATETIME_START' \
    --maintenance-window-end 'DATETIME_END' \
    --maintenance-window-recurrence 'MAINTENANCE_RECURRENCE'

您需要将其中的:

  • ENVIRONMENT_NAME 替换为环境的名称。
  • DATETIME_START 替换为采用日期/时间输入格式的开始日期和时间。只有一天中所指定的时间,指定的日期会被忽略。
  • DATETIME_END 替换为采用日期/时间输入格式的结束日期和时间。只有一天中所指定的时间,指定的日期会被忽略。指定的日期和时间必须晚于开始日期。
  • MAINTENANCE_RECURRENCE 替换为用于恢复维护窗口的 RFC 5545 RRULE。Cloud Composer 支持两种格式:

  • FREQ=DAILY 格式指定每日重复。

  • FREQ=WEEKLY;BYDAY=SU,MO,TU,WE,TH,FR,SA 格式指定在一周中的选定几天重复。

以下示例指定星期日、星期三和星期六世界协调时间 (UTC) 01:00 到 07:00 之间的 6 小时维护窗口。忽略 2021 年 1 月 1 日的日期。

gcloud beta composer environments update example-environment \
  --location us-central1 \
  --maintenance-window-start '2021-01-01T01:00:00Z' \
  --maintenance-window-end '2021-01-01T07:00:00Z' \
  --maintenance-window-recurrence 'FREQ=WEEKLY;BYDAY=SU,WE,SA'

API

  1. 构建 environments.patch API 请求。

  2. 在此请求中:

    1. 在参数 updateMask 中,指定 config.maintenanceWindow 掩码。

    2. 在请求正文中,指定维护窗口的参数。

{
  "config": {
    "maintenanceWindow": {
      "startTime": "DATETIME_START",
      "endTime": "DATETIME_END",
      "recurrence": "MAINTENANCE_RECURRENCE"
    }
  }
}

您需要将其中的:

  • DATETIME_START 替换为采用日期/时间输入格式的开始日期和时间。只有一天中所指定的时间,指定的日期会被忽略。
  • DATETIME_END 替换为采用日期/时间输入格式的结束日期和时间。只有一天中所指定的时间,指定的日期会被忽略。指定的日期和时间必须晚于开始日期。
  • MAINTENANCE_RECURRENCE 替换为用于恢复维护窗口的 RFC 5545 RRULE。Cloud Composer 支持两种格式:

    • FREQ=DAILY 格式指定每日重复。
    • FREQ=WEEKLY;BYDAY=SU,MO,TU,WE,TH,FR,SA 格式指定在一周中的选定几天重复。

以下示例指定星期日、星期三和星期六世界协调时间 (UTC) 01:00 到 07:00 之间的 6 小时维护窗口。忽略 2021 年 1 月 1 日的日期。

  // PATCH https://composer.googleapis.com/v1beta1/projects/example-project/
  // locations/us-central1/environments/example-environment?updateMask=
  // config.maintenanceWindow

  {
    "config": {
      "maintenanceWindow": {
        "startTime": "2021-01-01T01:00:00Z",
        "endTime": "2021-01-01T07:00:00Z",
        "recurrence": "FREQ=WEEKLY;BYDAY=SU,WE,SA"
      }
    }
  }

Terraform

maintenance_window 块为您的环境指定维护窗口:

resource "google_composer_environment" "example" {
  provider = google-beta
  name = "ENVIRONMENT_NAME"
  region = "LOCATION"

  config {
    maintenance_window {
      start_time = "DATETIME_START"
      end_time = "DATETIME_END"
      recurrence = "MAINTENANCE_RECURRENCE"
    }
  }
}

您需要将其中的:

  • ENVIRONMENT_NAME 替换为环境的名称。
  • LOCATION 替换为环境所在的区域。
  • DATETIME_START 替换为采用日期/时间输入格式的开始日期和时间。只有一天中所指定的时间,指定的日期会被忽略。
  • DATETIME_END 替换为采用日期/时间输入格式的结束日期和时间。只有一天中所指定的时间,指定的日期会被忽略。指定的日期和时间必须晚于开始日期。
  • MAINTENANCE_RECURRENCE 替换为用于恢复维护窗口的 RFC 5545 RRULE。Cloud Composer 支持两种格式:

    • FREQ=DAILY 格式指定每日重复。
    • FREQ=WEEKLY;BYDAY=SU,MO,TU,WE,TH,FR,SA 格式指定在一周中的选定几天重复。

以下示例指定星期日、星期三和星期六世界协调时间 (UTC) 01:00 到 07:00 之间的 6 小时维护窗口。忽略 2021 年 1 月 1 日的日期。

resource "google_composer_environment" "example" {
  provider = google-beta
  name = "example-environment"
  region = "us-central1"

  config {
    maintenance_window {
      start_time = "2021-01-01T01:00:00Z"
      end_time = "2021-01-01T07:00:00Z"
      recurrence = "FREQ=WEEKLY;BYDAY=SU,WE,SA"
    }
  }
}

后续步骤