You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于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节点统一执行以下操作:

  1. 选择稳定操作系统:推荐Amazon Linux 2或Ubuntu 20.04 LTS,确保内核、依赖库版本兼容
  2. 创建专用Airflow用户:
    sudo useradd -m airflow
    sudo usermod -aG sudo airflow
    su - airflow
    
  3. 安装系统依赖:
    • 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
  4. 配置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 = CeleryExecutor
    • sql_alchemy_conn = postgresql+psycopg2://airflow:your_secure_password@Node3_IP:5432/airflow
    • broker_url = redis://:your_redis_password@Node3_IP:6379/0
    • result_backend = db+postgresql://airflow:your_secure_password@Node3_IP:5432/airflow
    • web_server_host = 0.0.0.0
    • remote_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
    

四、合规与高可用优化

  1. 共享DAG存储:使用AWS EFS挂载到所有节点的$AIRFLOW_HOME/dags目录,确保DAGs在集群中同步,避免节点本地文件不一致
  2. 日志持久化:配置Airflow远程日志到S3,修改airflow.cfg:
    remote_logging = True
    remote_base_log_folder = s3://your-airflow-logs-bucket/
    remote_log_conn_id = aws_default
    
    为EC2节点绑定IAM角色,授予S3读写权限,避免硬编码密钥
  3. 安全访问:
    • 配置Nginx反向代理Airflow Webserver,启用HTTPS(使用AWS ACM证书),强制HTTPS访问
    • 开启Airflow RBAC权限,根据用户角色分配最小权限(如Viewer仅查看、User仅操作自己的DAG)
    • 关闭EC2节点不必要的端口,仅开放Webserver(443)、Flower(5555,仅内部访问)、DB(5432,仅集群节点访问)、Redis(6379,仅集群节点访问)
  4. 审计与监控:
    • 开启Airflow审计日志,配置日志输出到CloudWatch Logs,便于合规审计
    • 部署Prometheus+Grafana监控集群指标:任务成功率、Worker负载、DB连接数、Webserver响应时间等

五、运维最佳实践

  • DAG版本控制:将DAGs存储在Git仓库,通过CI/CD自动同步到EFS,避免手动修改
  • 定期备份:
    • 每日备份PostgreSQL元数据到S3,使用pg_dump脚本自动执行
    • 定期备份Airflow配置文件、DAGs到S3
  • Worker弹性扩展:根据任务负载,通过AWS Auto Scaling Group动态增减Worker节点
  • 版本升级:优先在测试环境验证Airflow版本兼容性,再逐步升级生产集群节点

内容的提问来源于stack exchange,提问作者BigDataRun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 12:55:34