ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Apache Airflow 集成 systemd:守护进程托管、开机自启与故障自动重启实战指南

Apache Airflow 集成 systemd:守护进程托管、开机自启与故障自动重启实战指南 Apache Airflow 集成 systemd守护进程托管、开机自启与故障自动重启实战指南【免费下载链接】airflowApache Airflow - A platform to programmatically author, schedule, and monitor workflows项目地址: https://gitcode.com/GitHub_Trending/ai/airflowApache Airflow 提供了与 systemd 深度集成的能力通过将调度器Scheduler、Web 服务器Webserver、Worker、Triggerer 等守护进程封装为标准 systemd unit可以轻松实现进程崩溃自动重启、开机自启以及统一的日志与状态管理。本指南基于官方文档 run-with-systemd.rst并结合仓库中 scripts/systemd 目录下的真实 unit 文件从安装部署、环境配置、虚拟环境适配到 Airflow 3.0 新增服务逐一展开帮助你在一台 Linux 主机上把整套 Airflow 服务交给 systemd 托管。为什么用 systemd 托管 AirflowAirflow 的各个核心组件调度器、Web 服务器、Worker、Triggerer 等本质上是长期运行的守护进程daemon。在生产环境中这些进程一旦意外退出例如内存溢出被杀、异常崩溃如果没有外部机制介入整个调度链就会静默中断。systemd 恰好擅长解决这个问题自动重启通过Restartalways/Restarton-failure指令systemd 可以在守护进程退出后按固定间隔自动拉起无需人工干预开机自启通过[Install]段中的WantedBymulti-user.target配合systemctl enable服务会在系统进入多用户运行级别时自动启动依赖管理通过After和Wants指令可以确保 Airflow 服务在数据库PostgreSQL/MySQL、消息队列Redis/RabbitMQ等依赖就绪后再启动统一运维日志交给journalctl统一收集与检索进程状态通过systemctl status一目了然。仓库中的 scripts/systemd/README 明确指出该目录下的文件已在基于 RedHat 的发行版如 RHEL、CentOS、Rocky Linux上测试通过稍作修改后也适用于其他 systemd 发行版。前置假设与准备官方在创建这些 unit 文件时做了两个核心假设若你的环境不符需要自行调整Airflow 以airflow:airflow的user:group身份运行——所有 unit 文件中的Userairflow、Groupairflow均基于此运行环境为 RedHat 系系统——unit 文件应放置于/usr/lib/systemd/system环境配置文件读取自/etc/sysconfig/airflow。如果你的 Airflow 使用其他用户运行例如独立的服务账号需要同步修改每个 unit 文件中的User和Group指令如果是 Debian/Ubuntu 系统unit 文件通常应放入/lib/systemd/system或/etc/systemd/system环境文件路径惯例也会有所不同这部分需要你自行适配。安装 systemd unit 文件仓库 scripts/systemd 目录下提供了以下文件文件用途airflow-scheduler.service调度器守护进程调度 DAG 与任务airflow-webserver.serviceWeb 服务器UI 与 REST API 的 Web 界面airflow-worker.serviceCelery Worker任务执行节点airflow-flower.serviceCelery FlowerCelery 监控面板airflow-kerberos.serviceKerberos 票据续期守护进程airflow-triggerer.service延迟任务deferrable task触发服务Airflow 3.0 新增airflow-api.service独立 REST API 服务器Airflow 3.0 新增airflow.conftmpfiles.d 配置负责创建/run/airflow目录airflow环境配置文件模板默认放至/etc/sysconfig/airflowREADME安装与使用说明安装步骤RedHat 系需要 root 权限# 1. 将 unit 文件复制或软链接到系统目录 sudo cp scripts/systemd/airflow-*.service /usr/lib/systemd/system/ # 2. 将 tmpfiles 配置复制到系统目录确保 /run/airflow 以正确属主与权限创建 sudo cp scripts/systemd/airflow.conf /etc/tmpfiles.d/ # 或 /usr/lib/tmpfiles.d/ # 3. 将环境配置模板复制为系统环境文件并按要求编辑 sudo cp scripts/systemd/airflow /etc/sysconfig/airflowairflow.conf的内容是一行D /run/airflow 0755 airflow airflow其作用是让 systemd-tmpfiles 在/runtmpfs重启后清空下自动创建 Airflow 运行目录属主为airflow:airflow权限为0755。该目录主要用于存放 Web 服务器的 PID 文件见下文--pid /run/airflow/webserver.pid。之后即可通过systemctl启动、停止与开机自启# 重新加载 systemd使其识别新增的 unit 文件 sudo systemctl daemon-reload # 启动调度器并设置开机自启 sudo systemctl start airflow-scheduler sudo systemctl enable airflow-scheduler # 其余服务同理 sudo systemctl start airflow-webserver airflow-worker airflow-triggerer airflow-api sudo systemctl enable airflow-webserver airflow-worker airflow-triggerer airflow-api启动后可通过systemctl status airflow-scheduler查看状态通过journalctl -u airflow-scheduler -f实时跟踪日志。环境配置/etc/sysconfig/airflow所有 unit 文件都通过EnvironmentFile/etc/sysconfig/airflow引入环境变量。仓库中的 airflow 模板文件默认只包含两个可选的注释项# AIRFLOW_CONFIG # AIRFLOW_HOMEAIRFLOW_HOMEAirflow 的主目录存放airflow.cfg数据库文件默认 SQLite 场景与日志等运行时数据在 Airflow 3.x 中数据库相关配置默认迁移到了 airflow-core/src/airflow/config 定义的配置项中AIRFLOW_HOME仍可作为集中定义环境变量的入口AIRFLOW_CONFIG显式指定airflow.cfg配置文件路径当配置文件不在默认位置时使用。此外Airflow 支持通过环境变量以AIRFLOW__SECTION__KEY的形式覆盖任意配置项例如AIRFLOW__CORE__EXECUTOR...、AIRFLOW__WEBSERVER__WEB_SERVER_PORT...这些变量同样可以写入/etc/sysconfig/airflow由 systemd 在服务启动前统一注入进程环境。适配虚拟环境安装官方文档特别强调如果 Airflow 安装在虚拟环境如venv或conda中必须修改每个 unit 文件的ExecStart行先激活虚拟环境再执行 Airflow 命令。仓库中的 unit 文件已经内置了这种写法默认假定虚拟环境位于/home/airflow/airflow_venvExecStart/bin/bash -c source /home/airflow/airflow_venv/bin/activate airflow scheduler使用时只需将/home/airflow/airflow_venv/替换为你实际的虚拟环境路径即可。若 Airflow 已直接安装到系统 Python 环境未使用虚拟环境则可以去掉source ... 前缀简化为ExecStart/usr/bin/airflow scheduler服务清单与 unit 文件逐项解读airflow-scheduler.service调度核心[Unit] DescriptionAirflow scheduler daemon Afternetwork.target postgresql.service mysql.service redis.service rabbitmq-server.service Wantspostgresql.service mysql.service redis.service rabbitmq-server.service [Service] EnvironmentFile/etc/sysconfig/airflow Userairflow Groupairflow Typesimple ExecStart/bin/bash -c source /home/airflow/airflow_venv/bin/activate airflow scheduler Restartalways RestartSec5s [Install] WantedBymulti-user.target关键指令说明After与Wants声明对数据库与消息队列的依赖。After控制启动顺序等依赖先启动Wants表示弱依赖依赖服务失败启动不影响本服务区别于Requires的强依赖由于 Airflow 3.x 可以基于 PostgreSQL/MySQL 等存储后端运行这里同时列了多种常见后端服务名Typesimplesystemd 认为ExecStart启动的进程即主进程适用于airflow这类前台运行的 CLI 守护进程Restartalways无论以何种原因退出包括正常退出都会自动重启调度器作为最关键的服务采用最激进的重启策略RestartSec5s两次重启之间的等待时间避免故障时疯狂重启消耗资源WantedBymulti-user.target配合systemctl enable实现开机自启。airflow-webserver.serviceWeb 界面与 PID 管理[Service] EnvironmentFile/etc/sysconfig/airflow Userairflow Groupairflow Typesimple ExecStart/bin/bash -c source /home/airflow/airflow_venv/bin/activate airflow webserver --pid /run/airflow/webserver.pid Restarton-failure RestartSec5s PrivateTmptrue与调度器的差异--pid /run/airflow/webserver.pid将进程 PID 写入/run/airflow/由airflow.conf创建的 tmpfiles 目录便于外部工具定位 Web 服务器进程Restarton-failure仅在异常退出时重启正常停止如systemctl stop不会触发重启避免维护时被自动拉起PrivateTmptrue为服务提供独立的临时目录命名空间提升安全性。airflow-worker.service 与 airflow-flower.serviceCelery 执行与监控# airflow-worker.service [Unit] DescriptionAirflow celery worker daemon ... ExecStart/bin/bash -c source /home/airflow/airflow_venv/bin/activate airflow celery worker Restarton-failure RestartSec10s# airflow-flower.service [Unit] DescriptionAirflow celery flower ... ExecStart/bin/bash -c source /home/airflow/airflow_venv/bin/activate airflow celery flower Restarton-failure RestartSec5sWorker 是 CeleryExecutor 模式下的任务执行者RestartSec10s稍微放缓重启节奏给系统留出喘息空间Flower 提供 Celery 任务的实时监控 Web 界面二者都使用Restarton-failure确保正常运维操作如暂停不会被强制拉起。airflow-kerberos.service票据续期[Unit] DescriptionAirflow kerberos ticket renewer ... ExecStart/bin/bash -c source /home/airflow/airflow_venv/bin/activate airflow kerberos Restarton-failure RestartSec5s该服务运行 Airflow 的 Kerberos 票据续期守护进程适用于启用了 Kerberos 认证、需要持续维护认证票据的环境如部分 Hadoop/安全集群场景。Airflow 3.0 新增服务triggerer 与 api-serverAirflow 3.0 将更多组件拆分为独立服务官方文档明确列出了两个新的 unit 文件。airflow-triggerer.service延迟任务触发[Unit] DescriptionAirflow Triggerer Afternetwork.target postgresql.service mysql.service redis.service rabbitmq-server.service Wantspostgresql.service mysql.service redis.service rabbitmq-server.service [Service] EnvironmentFile/etc/sysconfig/airflow Userairflow Groupairflow Typesimple ExecStart/bin/bash -c source /home/airflow/airflow_venv/bin/activate airflow triggerer Restartalways RestartSec5s [Install] WantedBymulti-user.targetTriggerer 负责执行延迟任务deferrable task的异步触发逻辑使用task(deferrableTrue)或task.sensor等机制的任务在长时间等待如等待外部系统完成、等待文件出现时释放 Worker 资源由 Triggerer 以异步方式监听事件并重新唤醒任务。如果 DAG 中使用了延迟任务特性却没有部署 Triggerer相关任务将无法被正确触发。该服务采用与调度器一致的Restartalways策略保证高可用。airflow-api.service独立 REST API 服务器[Unit] DescriptionAirflow API Server Afternetwork.target postgresql.service mysql.service redis.service rabbitmq-server.service Wantspostgresql.service mysql.service redis.service rabbitmq-server.service [Service] EnvironmentFile/etc/sysconfig/airflow Userairflow Groupairflow Typesimple ExecStart/bin/bash -c source /home/airflow/airflow_venv/bin/activate airflow api-server Restartalways RestartSec5s [Install] WantedBymulti-user.target自 Airflow 3.0 起REST API 被拆分为独立的airflow api-server进程Stable REST API不再与 Web 服务器耦合。这对于需要将 API 独立扩缩容、独立暴露给外部系统如 CI/CD、数据平台调度对接的场景尤其有用。常见问题排查服务启动失败journalctl提示权限错误检查/run/airflow目录是否已由 tmpfiles 正确创建属主airflow:airflow、权限0755确认 unit 文件中的User/Group与你的 Airflow 运行账号一致命令找不到airflow: command not found确认ExecStart中虚拟环境路径是否正确或使用which airflow定位后改为绝对路径服务反复重启Restartalways生效通过journalctl -u airflow-scheduler -f查看退出原因通常是配置错误或数据库未就绪RestartSec可以适当调大以缓解瞬时依赖问题修改 unit 文件后不生效任何对 unit 文件的修改都需要执行sudo systemctl daemon-reload重新加载。小结通过仓库 scripts/systemd 目录下开箱即用的 unit 文件Apache Airflow 可以在 RedHat 系 systemd 系统上以“每个核心组件一个服务”的方式稳定托管调度器与 Triggerer 采用Restartalways确保核心调度链路永不缺席Web 服务器与 Celery 组件采用Restarton-failure平衡可用性与运维灵活性/etc/sysconfig/airflow统一注入环境变量airflow.conf借助 tmpfiles 自动维护运行目录。Airflow 3.0 新增的 triggerer 与 api-server 也已在官方 unit 文件中获得一等支持让你从 2.x 升级后无需额外摸索即可完成整套服务的 systemd 化部署。【免费下载链接】airflowApache Airflow - A platform to programmatically author, schedule, and monitor workflows项目地址: https://gitcode.com/GitHub_Trending/ai/airflow创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表