基于puckel/docker-airflow的CeleryExecutor模式部署指南
2025-07-09 04:13:00作者:冯爽妲Honey
概述
本文将详细介绍如何使用puckel/docker-airflow项目中的docker-compose-CeleryExecutor.yml文件来部署Apache Airflow工作流管理系统。CeleryExecutor是Airflow的一种执行器模式,它利用Celery分布式任务队列来实现任务的分布式执行,适合生产环境使用。
核心组件解析
该docker-compose文件定义了多个服务,共同构成了一个完整的Airflow系统:
- Redis:作为Celery的消息代理(Broker),负责在调度器和执行器之间传递任务消息
- PostgreSQL:作为Airflow的元数据库,存储DAG定义、任务状态等元数据
- Webserver:提供Airflow的Web界面
- Scheduler:负责调度DAG任务
- Worker:实际执行任务的Celery工作节点
- Flower:Celery任务监控界面
详细配置说明
基础服务配置
redis:
image: 'redis:5.0.5'
postgres:
image: postgres:9.6
environment:
- POSTGRES_USER=airflow
- POSTGRES_PASSWORD=airflow
- POSTGRES_DB=airflow
- Redis使用5.0.5版本,默认不需要密码(可取消注释配置密码)
- PostgreSQL使用9.6版本,配置了airflow用户和同名数据库
Airflow核心服务
webserver:
image: puckel/docker-airflow:1.10.9
environment:
- LOAD_EX=n
- FERNET_KEY=46BKJoQYlPPOexq0OhDZnIlNepKFf87WFwLbfzqDDho=
- EXECUTOR=Celery
volumes:
- ./dags:/usr/local/airflow/dags
ports:
- "8080:8080"
- 使用1.10.9版本的puckel/docker-airflow镜像
- LOAD_EX=n表示不加载示例DAG
- FERNET_KEY用于加密敏感信息
- 挂载本地dags目录到容器内
- 暴露8080端口用于Web访问
调度与执行组件
scheduler:
image: puckel/docker-airflow:1.10.9
depends_on:
- webserver
command: scheduler
worker:
image: puckel/docker-airflow:1.10.9
depends_on:
- scheduler
command: worker
- Scheduler负责解析DAG并调度任务
- Worker是实际执行任务的节点,可以水平扩展
- 两者都依赖相同的配置和环境变量
Flower监控
flower:
image: puckel/docker-airflow:1.10.9
ports:
- "5555:5555"
command: flower
- Flower提供Celery任务的实时监控界面
- 通过5555端口访问
关键配置项解析
- FERNET_KEY:用于加密数据库中的敏感信息,生产环境应替换为自己的密钥
- EXECUTOR=Celery:指定使用CeleryExecutor模式
- volumes:将本地dags目录挂载到容器内,方便开发调试
- depends_on:定义服务启动顺序依赖关系
部署建议
- 数据持久化:取消PostgreSQL的volumes注释以持久化数据库
- 安全性:建议启用Redis密码和PostgreSQL密码
- 扩展性:可以增加worker节点数量来提高并行处理能力
- 监控:通过Flower监控任务执行情况
使用流程
- 将docker-compose-CeleryExecutor.yml保存为docker-compose.yml
- 创建dags目录存放工作流定义文件
- 执行
docker-compose up -d
启动服务 - 访问8080端口使用Airflow Web界面
- 访问5555端口查看Celery任务监控
常见问题
- 连接问题:确保所有服务的环境变量配置一致
- 性能问题:根据任务量调整worker数量
- 时区问题:可在环境变量中配置时区
通过以上配置,您将获得一个功能完整的分布式Airflow环境,适合处理复杂的工作流任务。