Airflow UI配置DB连接后密码丢失导致DAG连接失败问题
问题根因
该故障核心是连接配置的持久化存储/读取链路异常,UI端测试连接成功不代表配置已正确持久化——UI的「测试连接」逻辑是直接调用当前页面表单内暂存的明文参数发起请求,不会读取落库后的解密数据,因此测试结果无法反映存储链路是否正常。
常见触发场景分两类:
- Fernet Key配置不匹配:Airflow不会明文存储连接密码,所有录入的密码都会使用
airflow.cfg中[core]段配置的fernet_key做对称加密后存入元数据库。如果Webserver、Scheduler、Worker、Triggerer各组件加载的fernet_key不一致,或是服务重启后fernet_key被自动重新生成覆盖,之前存储的加密密码就无法正常解密,UI端重新打开配置时会显示密码为空,DAG运行时拉取连接也拿不到有效凭证。 - 元数据库指向不一致:分布式/容器化部署场景下,如果不同Airflow组件连接的元数据库不是同一个(比如Webserver连本地临时sqlite、Worker连远程库,或是负载均衡下多组Webserver实例连了互不相通的元数据库),在UI端录入的配置根本不会同步到执行DAG的组件读取的库中,切到其他Webserver实例查看配置时也会出现密码丢失的情况。
修复步骤
- 统一全组件Fernet Key配置
登录所有部署Airflow组件的节点,逐一核对airflow.cfg中[core]段的fernet_key值,确保所有节点完全一致。如果之前使用的是Airflow首次启动自动生成的随机key(没有手动固定配置),执行以下命令生成固定合规的Fernet Key:
将生成的key替换所有节点的python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"fernet_key配置项,完成后重启所有Airflow相关服务。 - 统一全组件元数据库指向
核对所有节点airflow.cfg中[database]段的sql_alchemy_conn连接串,确保所有组件都指向同一个元数据库;容器化部署场景需要同步核对AIRFLOW__DATABASE__SQL_ALCHEMY_CONN环境变量在所有容器中的值是否一致,避免配置挂载错误导致的连接串错配。注意:多组件部署场景不要使用默认的SQLite作为元数据库,SQLite不支持并发写入,极易出现数据写入后读取异常的问题,建议使用MySQL或PostgreSQL作为元数据库存储。
- 重新录入连接凭证
上述配置校验修正、所有服务重启完成后,重新进入UI打开对应DB连接配置页,重新输入密码后保存。保存后退出页面重新进入,确认密码字段未消失,再触发DAG运行验证连接可用性即可。
内容的提问来源于stack exchange,提问作者kurzanovart
相关产品推荐
相关产品推荐

