运行多个气流调度程序导致Postgres锁定问题



我在我的计算机上运行标准的docker-compose文件,所有默认值都来自于气流: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

文档是没有用的,因为它提到我可以运行"气流调度器";很多次,它应该是开箱即用的。我是不是错过了什么HA设置?

调度程序端的HA是在不同的机器上运行多个调度程序。

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

在这一点上,你的选择是有限的,这成为一个基于两个大类的优化练习-

  1. 更改数据库配置-

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

最新更新