如何在高可用性中部署apache airflow(正式名称为airbnb' s?airflow)调度程序?
我不是在询问显然应该在高可用性配置中部署的后端数据库或RabbitMQ。
我的主要关注点是调度程序 - 是否有特殊需要做的事情?
答案 0 :(得分:9)
经过一番挖掘后,我发现同时运行多个调度程序是不安全的,这意味着开箱即用 - 气流调度程序在高可用性环境中使用是不安全的。
气流团队正计划通过在DAG数据结构上添加锁定机制来解决此问题,但这尚未实现(我通过运行2个调度程序检查并看到他们安排了相同的dag实例,这是不好的) 。 这在这里描述: https://groups.google.com/forum/#!topic/airbnb_airflow/-1wKa3OcwME
我确实找到了一种方法来解决这个高可用性问题,方法是使用我自己的代码包装调度程序,并使用集群工具进行领导者选举(我个人只是为此目的使用领事)。这样只有当选的主设备正在运行调度程序,当主设备关闭时,从设备会替换它。
当您在高可用性环境中使用气流时请考虑这一点,因为开箱即用,气流调度程序目前不适用于此(除非您自己解决此问题)。
编辑 - 主从解决方案的另一种方法是使用集群管理器/调度程序来确保始终只有一个气流调度程序实例可用。这种方法依赖于集群管理器的自我修复能力。例如,mesos和nomad都支持这种配置(我原先选择了nomad)。
答案 1 :(得分:1)
我个人的经验是遵循我在一些最佳实践中找到的建议,即每10次运行重启调度程序(-N 10)并在可能时使用此软件:https://github.com/teamclairvoyant/airflow-scheduler-failover-controller 我还使用一个dag来ping监控系统,以确保调度程序不会消失。