基于3台EC2虚拟机搭建Airflow生产环境的最佳实践咨询
Airflow生产环境(3台EC2)搭建最佳实践
一、集群架构规划
基于3台EC2的资源分配,优先保证核心组件无单点、资源隔离:
- Node 1(Web/Scheduler节点):部署Airflow Webserver、Scheduler、Flower(Celery监控)
- Node 2(Worker节点):部署Celery Worker(多进程模式)
- Node 3(基础设施节点):部署PostgreSQL(元数据数据库)、Redis(消息队列)
二、基础环境准备
所有EC2节点统一执行以下操作:
- 选择稳定操作系统:推荐Amazon Linux 2或Ubuntu 20.04 LTS,确保内核、依赖库版本兼容
- 创建专用Airflow用户:
sudo useradd -m airflow sudo usermod -aG sudo airflow su - airflow - 安装系统依赖:
- Amazon Linux 2:
sudo yum install -y python3-devel gcc libsasl2-devel openldap-devel - Ubuntu:
sudo apt-get install -y python3-dev gcc libsasl2-dev libldap2-dev
- Amazon Linux 2:
- 配置Python虚拟环境:
python3 -m venv airflow-venv source airflow-venv/bin/activate pip install --upgrade pip setuptools wheel
三、核心组件部署
1. 基础设施节点(Node3)部署
PostgreSQL(元数据DB)
- 安装PostgreSQL 12+(Airflow推荐版本),创建Airflow专用数据库和用户:
# 以Ubuntu为例 sudo apt-get install -y postgresql postgresql-contrib sudo -u postgres psql CREATE DATABASE airflow; CREATE USER airflow WITH PASSWORD 'your_secure_password'; GRANT ALL PRIVILEGES ON DATABASE airflow TO airflow; - 修改
postgresql.conf允许远程访问:设置listen_addresses = '*' - 修改
pg_hba.conf添加EC2节点IP段的访问权限:host airflow airflow [节点IP段] md5 - 重启PostgreSQL服务:
sudo systemctl restart postgresql
Redis(消息队列)
- 安装Redis 6+,配置密码和允许节点访问:
sudo apt-get install -y redis-server sudo sed -i 's/bind 127.0.0.1 ::1/bind 0.0.0.0/' /etc/redis/redis.conf sudo sed -i 's/# requirepass foobared/requirepass your_redis_password/' /etc/redis/redis.conf sudo systemctl restart redis-server
2. Web/Scheduler节点(Node1)部署
- 安装Airflow(指定稳定版本,如2.6.3),搭配Celery、Redis、PostgreSQL依赖:
pip install "apache-airflow==2.6.3" celery redis psycopg2-binary - 初始化Airflow元数据:
export AIRFLOW_HOME=~/airflow airflow db init - 修改
$AIRFLOW_HOME/airflow.cfg核心配置:executor = CeleryExecutorsql_alchemy_conn = postgresql+psycopg2://airflow:your_secure_password@Node3_IP:5432/airflowbroker_url = redis://:your_redis_password@Node3_IP:6379/0result_backend = db+postgresql://airflow:your_secure_password@Node3_IP:5432/airflowweb_server_host = 0.0.0.0remote_logging = True(合规要求日志持久化,后续配置到S3)
- 创建Airflow管理员用户:
airflow users create -u admin -p admin_password -f Admin -l User -r Admin -e admin@example.com - 后台启动服务:
airflow webserver -D airflow scheduler -D airflow flower -D
3. Worker节点(Node2)部署
- 安装与Node1同版本的Airflow及依赖:
pip install "apache-airflow==2.6.3" celery redis psycopg2-binary - 复制Node1的
$AIRFLOW_HOME/airflow.cfg到Node2,确保DB、Redis连接配置一致 - 启动Celery Worker(并发数根据EC2 CPU核数调整,如c5.large设4-6):
export AIRFLOW_HOME=~/airflow airflow celery worker -D -c 4
四、合规与高可用优化
- 共享DAG存储:使用AWS EFS挂载到所有节点的
$AIRFLOW_HOME/dags目录,确保DAGs在集群中同步,避免节点本地文件不一致 - 日志持久化:配置Airflow远程日志到S3,修改
airflow.cfg:
为EC2节点绑定IAM角色,授予S3读写权限,避免硬编码密钥remote_logging = True remote_base_log_folder = s3://your-airflow-logs-bucket/ remote_log_conn_id = aws_default - 安全访问:
- 配置Nginx反向代理Airflow Webserver,启用HTTPS(使用AWS ACM证书),强制HTTPS访问
- 开启Airflow RBAC权限,根据用户角色分配最小权限(如Viewer仅查看、User仅操作自己的DAG)
- 关闭EC2节点不必要的端口,仅开放Webserver(443)、Flower(5555,仅内部访问)、DB(5432,仅集群节点访问)、Redis(6379,仅集群节点访问)
- 审计与监控:
- 开启Airflow审计日志,配置日志输出到CloudWatch Logs,便于合规审计
- 部署Prometheus+Grafana监控集群指标:任务成功率、Worker负载、DB连接数、Webserver响应时间等
五、运维最佳实践
- DAG版本控制:将DAGs存储在Git仓库,通过CI/CD自动同步到EFS,避免手动修改
- 定期备份:
- 每日备份PostgreSQL元数据到S3,使用
pg_dump脚本自动执行 - 定期备份Airflow配置文件、DAGs到S3
- 每日备份PostgreSQL元数据到S3,使用
- Worker弹性扩展:根据任务负载,通过AWS Auto Scaling Group动态增减Worker节点
- 版本升级:优先在测试环境验证Airflow版本兼容性,再逐步升级生产集群节点
内容的提问来源于stack exchange,提问作者BigDataRun
相关产品推荐
相关产品推荐

