【问题标题】:Airflow setup for high availability气流设置以实现高可用性
【发布时间】:2019-09-05 14:51:19
【问题描述】:

如何在高可用下部署apache气流(正式称为airbnb的气流)调度器?

我不是在询问显然应该部署在高可用性配置中的后端数据库或 RabbitMQ。

我的主要关注点是调度程序 - 有什么特别需要做的吗?

【问题讨论】:

    标签: high-availability airflow


    【解决方案1】:

    经过一番挖掘,我发现同时运行多个调度程序并不安全,这意味着开箱即用的气流调度程序在高可用性环境中使用并不安全。

    airflow 团队计划通过在 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 是因为它简单)。

    【讨论】:

    • 我正在研究这个并通过谷歌发现了这个。您是否在博客上写过这个或任何描述 Nomad 和 Consul 如何参与这一切的示例代码?我们使用 Consul,但 Nomad 对我们来说还是个新手。我希望能够在不同节点或同一节点上启动调度程序,如果它由于某种原因而关闭。
    • 我没有写博客。如果您设置 nomad,只需将其指定为服务并使用 count=1 并确保约束满足少数节点。它应该可以解决问题。
    • U 也可以使用 Kubernetes 或任何其他编排工具。这称为自我修复。
    • @luckytaxi 不是 HA,但是:因为我们经历了超过 5 分钟的调度延迟,所以我们添加了一些正则表达式来忽略一些 dag(因此 5 个调度程序可以大致覆盖 1/5 的 dag)。为此,必须跳过停用 dag 的代码,因为忽略 dag 的调度程序可能会停用它。剩下的就是添加一个手动步骤来从可以查看所有 dag 的网络服务器调用定期停用。完美的?不,循环赛将是自平衡的,但需要更改模型商店。 CloudFormation 为我们重新启动停止的调度程序。
    【解决方案2】:

    我的个人经验是按照我找到的一些最佳做法的说明进行操作;即每运行 10 次重新启动调度程序( -N 10 )并尽可能使用此软件:

    https://github.com/teamclairvoyant/airflow-scheduler-failover-controller

    我还使用 DAG 对监控系统执行 ping 操作,以确保调度程序没有消失。

    【讨论】:

      猜你喜欢
      • 2017-09-24
      • 2017-03-12
      • 2017-01-16
      • 2015-06-01
      • 2021-12-11
      • 2023-03-06
      • 1970-01-01
      • 1970-01-01
      • 2021-05-03
      相关资源
      最近更新 更多