同一台服务器上能否同时在多个端口运行多个Airflow实例?
同一服务器部署多Airflow实例方案
Airflow默认读取AIRFLOW_HOME环境变量对应目录下的配置文件,你只需要为每个实例指定独立的配置加载路径即可,不存在只能使用一份配置的限制。
方法1:使用独立AIRFLOW_HOME部署(推荐)
该方案可实现两个实例的配置、DAG、元数据完全隔离,适合业务场景完全独立的两个Airflow实例:
- 第一步:创建两个独立的Airflow家目录
mkdir -p ~/airflow-inst1 ~/airflow-inst2
- 第二步:分别初始化两个实例的配置
第一个实例(默认端口8080)配置初始化:
第二个实例(自定义端口如8081)配置初始化:export AIRFLOW_HOME=~/airflow-inst1 airflow db init # 编辑目录下的airflow.cfg,web_server_port保持默认8080,元数据库默认存储在当前家目录下,自然和第二个实例隔离export AIRFLOW_HOME=~/airflow-inst2 airflow db init # 编辑目录下的airflow.cfg,将web_server_port修改为8081即可 - 第三步:分别启动两个实例,启动前需指定对应家目录
启动实例1:
启动实例2:export AIRFLOW_HOME=~/airflow-inst1 airflow webserver -D airflow scheduler -Dexport AIRFLOW_HOME=~/airflow-inst2 airflow webserver -D airflow scheduler -D
方法2:启动时临时指定端口(适用于仅端口不同、其余配置可共用的场景)
如果两个实例除端口外其他配置完全一致,可直接通过启动参数覆盖端口,无需修改配置文件:
- 启动第一个默认端口实例:
airflow webserver -p 8080 -D airflow scheduler -D
- 启动第二个自定义端口实例:
airflow webserver -p 8081 -D airflow scheduler -D
注意:该方法默认会共用同一份元数据库和DAG目录,如需隔离可在启动前通过
AIRFLOW__DATABASE__SQL_ALCHEMY_CONN、AIRFLOW__CORE__DAGS_FOLDER环境变量覆盖对应配置即可。
注意事项
- 两个实例的元数据库必须完全隔离,不能共用同一个库,否则会出现数据冲突、任务调度异常
- 如使用CeleryExecutor,还需保证两个实例使用不同的消息队列(Redis/RabbitMQ)库号或独立实例,同时修改flower端口避免冲突
- 业务隔离的实例建议分开存储DAG目录,避免互相加载不需要的DAG文件
内容的提问来源于stack exchange,提问作者patna_programmer
相关产品推荐
相关产品推荐

