【问题标题】:Running multiple Airflow Schedulers cause Postgres locking issues运行多个 Airflow Scheduler 会导致 Postgres 锁定问题
【发布时间】:2021-10-04 23:52:33
【问题描述】:

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

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

文档没有用,因为它提到我可以多次运行“气流调度程序”,它应该可以开箱即用。是否有某种我错过的 HA 设置?

【问题讨论】:

  • 它应该开箱即用。文档对此很清楚。我认为 - 如果你有锁定问题,你应该提出一个关于它的 GitHub 问题并包括所有相关细节 - 你的配置设置、你得到的日志错误、来自 Postgres 的日志等。
  • @JarekPotiuk 我们的团队得出的结论是,我们在 Postgres 中未能获得锁而导致的“错误”是预期错误,因为多个调度程序会尝试更新锁,但 n-1 总是会失败.奇怪的是,“错误”在 Postgres 12/13/14 上比在 11 上更频繁地发生。
  • 如果您只在 Postgres 中看到锁定错误 - 这是意料之中的。但我们也将在 2.3.0 中对此进行更改 - github.com/apache/airflow/pull/19842,这样日志就不会被那些“假阴性”所淹没。

标签: postgresql airflow airflow-scheduler


【解决方案1】:

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

正如您现在所注意到的,这确实会在数据库上创建锁。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-29
    • 2013-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-24
    • 2023-03-16
    相关资源
    最近更新 更多