使用远程数据库时Apache Airflow Scheduler挂起问题求助
排查与解决方案建议
1. 调整MySQL 8.3的连接超时参数
远程网络环境下,MySQL默认的超时设置可能导致Airflow Scheduler的连接在DAG运行时被强制断开:
- 编辑MySQL配置文件(
my.cnf/my.ini),修改以下参数:wait_timeout = 86400interactive_timeout = 86400net_read_timeout = 300net_write_timeout = 300
- 重启MySQL服务后,执行
SELECT @@wait_timeout, @@interactive_timeout;验证参数生效
2. 检查网络策略与防火墙规则
基础连接正常不代表DAG运行时的并发请求不会被拦截:
- 远程VM防火墙(如
firewalld/ufw)需开放3306端口给Airflow Scheduler所在的OpenShift节点IP段,避免临时连接被阻断 - 给OpenShift添加宽松的出站网络策略测试:
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-scheduler-mysql-access spec: podSelector: matchLabels: app: airflow-scheduler policyTypes: - Egress egress: - to: - ipBlock: cidr: <远程VM_IP/32> ports: - protocol: TCP port: 3306
3. 优化Airflow数据库连接池配置
远程网络延迟可能导致连接池耗尽,通过环境变量调整配置(适配OpenShift部署):
- 设置以下环境变量:
AIRFLOW__DATABASE__SQL_ALCHEMY_POOL_SIZE=15AIRFLOW__DATABASE__SQL_ALCHEMY_MAX_OVERFLOW=25AIRFLOW__DATABASE__SQL_ALCHEMY_POOL_RECYCLE=1800AIRFLOW__DATABASE__SQL_ALCHEMY_POOL_PRE_PING=True
4. 启用Scheduler详细日志定位问题
默认日志级别无法捕捉深层异常:
- 给Scheduler添加环境变量
AIRFLOW__LOGGING__LOG_LEVEL=DEBUG - 实时查看日志:
oc logs -f <airflow-scheduler-pod-name>,重点关注DAG触发后的数据库交互报错信息
5. 验证MySQL驱动版本兼容性
Airflow 2.8.3要求mysqlclient>=2.1.0,过低版本可能适配MySQL 8.3存在问题:
- 进入Scheduler Pod:
oc exec -it <airflow-scheduler-pod-name> -- bash - 执行
pip show mysqlclient检查版本,若低于要求则升级:pip install mysqlclient==2.2.5
6. 检查远程MySQL的资源瓶颈
远程VM的资源不足可能导致数据库无响应:
- 启用MySQL慢查询日志:
slow_query_log=1、long_query_time=2,排查耗时过长的查询 - 监控VM系统资源:用
top/htop查看CPU、内存使用率,iostat检查磁盘IO负载
内容的提问来源于stack exchange,提问作者Hasanen A. Sahib
相关产品推荐
相关产品推荐

