我在我的计算机上运行标准的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是在不同的机器上运行多个调度程序。
正如您现在注意到的,这确实在数据库上创建了锁。
在这一点上,你的选择是有限的,这成为一个基于两个大类的优化练习-
-
更改数据库配置-
Sizing the DB is usually based on the following:
- 定期解析的文件数
- 调度程序数
- 工人数
- 任务数
- 执行频率
-
为每个环境创建多个部署这通常意味着为每个环境创建不同的集群,每个集群专注于特定的工作负载——这意味着解析的文件数量减少/调度器/工作器减少/任务减少