如何在高可用性下部署apache气流(正式称为airbnb的气流)调度程序?
我不是在询问显然应该部署在高可用性配置中的后端数据库或 RabbitMQ。
我的主要关注点是调度程序——有什么特别需要做的吗?
如何在高可用性下部署apache气流(正式称为airbnb的气流)调度程序?
我不是在询问显然应该部署在高可用性配置中的后端数据库或 RabbitMQ。
我的主要关注点是调度程序——有什么特别需要做的吗?
经过一番挖掘,我发现同时运行多个调度程序是不安全的,这意味着开箱即用的气流调度程序在高可用性环境中使用并不安全。
气流团队计划通过在 DAG 数据结构上添加锁定机制来解决这个问题,但这还没有实现(我通过运行 2 个调度程序进行检查,发现它们调度了相同的 dag 实例,这并不好)。此处对此进行了描述: https ://groups.google.com/forum/#!topic/airbnb_airflow/-1wKa3OcwME
我确实找到了一种解决这个高可用性问题的方法,方法是用我自己的代码包装调度程序并使用集群工具进行领导者选举(为此我个人使用 consul)。This way only the elected master is running the scheduler and when the master is down the slave replaces him.
当您在高可用性环境中使用气流时请考虑这一点,因为开箱即用,气流调度程序目前不适合此(除非您自己解决此问题)。
编辑 - 主从解决方案的另一种方法是使用集群管理器/调度程序来确保只有一个气流调度程序实例始终可用。这种方法依赖于您拥有的集群管理器的自我修复能力。例如 mesos 和 nomad 都支持这种配置(我个人选择 nomad 是因为它简单)。
我的个人经验是遵循我找到的一些最佳实践的说明;即每运行 10 次( -N 10 )重新启动调度程序并尽可能使用此软件:
https://github.com/teamclairvoyant/airflow-scheduler-failover-controller
我还使用 DAG 对监控系统执行 ping 操作,以确保调度程序没有消失。