运行 多个 Airflow Scheduler 导致 Postgres 锁定问题

Running multiple Airflow Schedulers cause Postgres locking issues

我 运行 在我的计算机上本地编译标准 docker-compose 文件,所有默认值来自 airflow:2.1.4,postgres:13,redis:latest。当我有一个调度程序实例时,一切都按预期工作,但是当我添加另一个调度程序实例时,我开始遇到锁定问题。

postgres_1 | STATEMENT:  SELECT slot_pool.pool AS slot_pool_pool, slot_pool.slots AS slot_pool_slots FROM slot_pool FOR UPDATE NOWAIT

我的相关 docker-compose 文件是

&airflow-common
environment:
    AIRFLOW__CORE__EXECUTOR: CeleryExecutor
    AIRFLOW__CORE__SQL_ALCHEMY_CONN: postgresql+psycopg2://airflow:airflow@postgres/airflow
    AIRFLOW__CELERY__RESULT_BACKEND: db+postgresql://airflow:airflow@postgres/airflow
    AIRFLOW__CELERY__BROKER_URL: redis://:@redis:6379/0
    AIRFLOW__WEBSERVER__WEB_SERVER_MASTER_TIMEOUT: 360
    AIRFLOW__WEBSERVER__EXPOSE_CONFIG: 'true'
    AIRFLOW__CORE__FERNET_KEY: ''
    AIRFLOW__CORE__DAGS_ARE_PAUSED_AT_CREATION: 'true'
    AIRFLOW__CORE__LOAD_EXAMPLES: 'false'
    AIRFLOW__CORE__STORE_DAG_CODE: 'false'

airflow-scheduler-1:
  <<: *airflow-common
  command: scheduler
  container_name: airflow-scheduler-1

airflow-scheduler-2:
  <<: *airflow-common
  command: scheduler
  container_name: airflow-scheduler-2

该文档没有用,因为它提到我可以多次 运行 “airflow scheduler”,它应该开箱即用。我是否遗漏了某种 HA 设置?

调度器端 Airflow 开箱即用的 HA 用于 运行 不同机器上的多个调度器。

您现在已经注意到,这确实会在数据库上创建锁。

此时您的选择有限,这成为基于两大类的优化练习 -

  1. 更改您的数据库配置 -

     Sizing the DB is usually based on the following:
    
    • 经常被解析的文件数量
    • 调度器数量
    • 工人人数
    • 任务数量
    • 执行频率
  2. 为每个环境创建多个部署 这通常意味着为每个环境创建不同的集群,每个集群专注于特定的工作负载——这意味着更少的文件数量 parsed/less schedulers/workers/less 任务