指定维护窗口

Managed Airflow(第 3 代) | Managed Airflow(第 2 代) | Managed Airflow(旧版第 1 代)

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

维护窗口简介

维护窗口是指您允许 Managed Airflow 执行维护操作的时间段。例如,您可以指定 DAG 安排时间之外的维护窗口,确保关键任务执行不会中断。

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

  • 如果您为环境定义了自定义维护窗口,Managed Airflow 会在这些定义的时间段内执行维护。

  • 如果您未为环境定义自定义维护窗口,Managed Airflow 会在默认维护窗口期间执行维护。

维护窗口的运作方式

维护窗口的工作方式如下:

  • 维护操作需要在一周内至少分配 12 小时的时间。

  • 您可以使用多个时间段,但每个时间段的时长必须至少为 4 小时。

  • 您的环境在维护窗口期间仍然可用。在维护操作进行期间,您环境中的某些组件可能会暂时无法使用。

  • 之所以需要 12 小时,是为了让 Managed Airflow 有足够的时间来安排和执行所有维护操作。但这并不意味着维护操作会持续整整 12 小时,甚至每周都会进行。

您仍然可以在维护窗口期间运行 DAG,只要可以接受某些任务可能会中断并重试。如果您在维护期内运行 DAG,请务必启用任务重试。您可以在 Airflow 配置、DAG 或任务级层配置任务重试。

执行时间少于 55 分钟的任务通常不会受到维护操作的影响,但仍需要启用重试功能,以应对调度程序重启。在标准 Managed Airflow 操作期间(维护期外),调度器可能会重启。

Managed Airflow 会通知 Airflow 工作器即将进行维护操作。Airflow 工作器完成已开始的任务,但不选择新任务。这些新任务由未进行维护操作的 Airflow 工作器执行。

如果您使用的是高弹性环境,那么在维护操作期间,环境的 Airflow 组件可能会在不同时间重启(具体取决于维护操作的类型)。总而言之,使用高弹性环境可减少维护操作期间环境的停机时间。

维护操作会对您的环境产生以下影响:

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

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

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

  • 执行时间超过 55 分钟的某些 Airflow 任务可能会被中断。维护操作完成后,Airflow 会安排重试这些任务(除非另有配置)。

默认维护窗口

在 Managed Airflow(第 2 代)中,默认维护窗口为每周五、周六和周日的 00:00:00 到 04:00:00(格林尼治标准时间)。

维护窗口外的维护

在以下情况下,Managed Airflow 可能会在配置的维护期之外执行维护:

  • 在紧急情况下(例如,修复严重的安全漏洞时),某些维护操作可能会在常规维护期外执行。

  • 如果 Managed Airflow 在维护窗口期间无法执行常规维护操作的时间达到 30 天,则会在指定维护窗口之外执行关键维护操作。这是一种后备机制,适用于维护窗口配置错误,导致 Managed Airflow 无法反复对环境执行维护的情况。

如何使用维护窗口

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

  1. 为 Managed Airflow 环境定义维护窗口。

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

为新环境指定维护窗口

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

为现有环境指定维护窗口

控制台

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

  1. 在 Google Cloud 控制台中,前往环境页面。

    转到“环境”

  2. 选择您的环境。

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

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

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

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

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

gcloud

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

  • --maintenance-window-start 设置自定义维护窗口的开始时间。
  • --maintenance-window-end 设置维护窗口的结束时间。
  • --maintenance-window-recurrence 设置维护窗口重复
gcloud 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。托管式 Airflow 支持两种格式:

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

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

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

gcloud composer environments update example-environment \
  --location us-central1 \
  --maintenance-window-start '2023-01-01T01:00:00Z' \
  --maintenance-window-end '2023-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。托管式 Airflow 支持两种格式:

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

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

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

  {
    "config": {
      "maintenanceWindow": {
        "startTime": "2023-01-01T01:00:00Z",
        "endTime": "2023-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。托管式 Airflow 支持两种格式:

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

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

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

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

后续步骤