Google Cloud Composer v2健康检查出现误报/不稳定问题技术问询
问题根因
- 预览版镜像自带缺陷:你使用的
composer-2.0.0-preview.5-airflow-2.1.4属于Composer v2早期预览版本,webserver的重载逻辑存在未修复的bug。webserver默认会定期扫描插件目录变更触发平滑重载,而gcs-syncdpod负责同步GCS存储桶中的DAG、插件文件,会定期清理本地目录中GCS上不存在的.pyc缓存文件,二者操作时序冲突产生竞态:webserver读取旧缓存文件做校验前,文件已经被gcs-syncd删除,未捕获的IO异常会直接触发webserver进程强制退出。 - 监控状态联动:webserver重启过程中服务暂时不可用,
airflow-monitoringpod的健康探测失败,就会导致监控面板红/绿状态交替,重启过程中gunicorn进程需要销毁旧worker、拉起新worker,期间请求堆积就会出现响应缓慢的问题。
定位方法
- 日志时序校验:同时拉取同时间窗口的
gcs-syncdpod日志和webserver日志,确认.pyc文件删除操作和webserver的文件不存在报错、HUP信号触发的时间点完全对应,即可确认竞态条件存在 - 配置验证:临时修改Airflow配置,将
[webserver] reload_on_plugin_change设置为False,重启webserver后观察是否还会出现定期重启的现象,如果重启停止即可确认触发来源是插件目录扫描重载逻辑
修复方案
永久修复
升级Composer环境到正式稳定版镜像,废弃预览版的composer-2.0.0-preview.5镜像,使用composer-2.0.3-airflow-2.1.4及以上的正式发布版本,该版本中官方已经修复了对应竞态问题,优化了异常捕获逻辑,.pyc缓存文件缺失不会再触发webserver进程退出。
临时规避方案(若暂时无法升级镜像)
- 配置
gcs-syncd同步排除规则:在Composer环境的同步配置中添加__pycache__目录排除规则,避免同步进程删除webserver本地生成的缓存文件 - 关闭webserver自动重载:修改Airflow配置项
[webserver] reload_on_plugin_change = False,修改后webserver不会主动扫描插件目录变更触发重载,更新插件后手动重启webserver即可生效 - 调大健康检查阈值:将webserver的存活探针初始延迟、失败阈值参数调大,避免短时间重启导致的监控状态异常
内容的提问来源于stack exchange,提问作者Tobi
相关产品推荐
相关产品推荐

