如何设置 2 个服务器的气流?

sim*_*ing 6 airflow apache-airflow

试图将 Airflow 进程拆分到 2 个服务器上。服务器 A 已经在独立模式下运行,上面有所有东西,有 DAG,我想将它设置为新设置中的工作人员,并带有额外的服务器。

服务器 B 是将在 MySQL 上托管元数据数据库的新服务器。

我可以让服务器 A 运行 LocalExecutor,还是必须使用 CeleryExecutor?就airflow scheduler必须具有正确的DAG的服务器上运行?还是必须在集群中的每台服务器上运行?对进程之间的依赖关系感到困惑

Kyl*_*ine 7

本文出色地展示了如何将 Airflow 集群到多台服务器上。

多节点(集群)气流设置

Apache Airflow 的一种更正式的设置是将守护进程作为集群分布在多台机器上。

在此处输入图片说明

好处

更高的可用性

如果其中一个工作节点宕机或被故意脱机,集群仍可运行,任务仍将执行。

分布式处理

如果您有一个包含多个内存密集型任务的工作流,那么这些任务将得到更好的分配,以允许在整个集群中更高地利用数据并提供更快的任务执行速度。

扩展工人

水平

您可以水平扩展集群并通过向集群添加更多执行器节点并允许这些新节点减轻现有节点的负载来分配处理。由于工作人员不需要向任何中央机构注册即可开始处理任务,因此可以打开和关闭机器,而不会导致集群停机。

垂直

您可以通过增加每个节点上运行的 celeryd 守护进程的数量来垂直扩展集群。这可以通过增加 {AIRFLOW_HOME}/airflow.cfg 文件中“celeryd_concurrency”配置中的值来完成。

例子:

celeryd_concurrency = 30
Run Code Online (Sandbox Code Playgroud)

您可能需要增加实例的大小以支持更多的 celeryd 进程。这将取决于您在集群上运行的任务的内存和 CPU 强度。

扩展主节点

您还可以向集群添加更多主节点,以扩展在主节点上运行的服务。这将主要允许您扩展 Web 服务器守护程序,以防一台机器处理的 HTTP 请求过多,或者您想为该服务提供更高的可用性。

需要注意的一件事是一次只能运行一个 Scheduler 实例。如果您有多个调度程序在运行,则可能会调度单个任务的多个实例。如果您正在运行某种 ETL 过程,这可能会导致您的工作流出现一些重大问题,并导致最终表中出现重复数据。

如果您愿意,还可以将调度程序守护程序设置为在其自己的专用主节点上运行。

在此处输入图片说明

Apache Airflow 集群设置步骤

先决条件

  • 以下节点可用于给定的主机名:
    • master1 - 将具有以下角色:Web 服务器、调度程序
    • master2 - 将拥有角色:Web 服务器
    • worker1 - 将担任的角色:工人
    • worker2 - 将担任的角色:工人
  • 排队服务正在运行。(RabbitMQ、AWS SQS 等)
    • 您可以按照以下说明安装 RabbitMQ:安装 RabbitMQ
    • 如果您使用 RabbitMQ,建议也将其设置为高可用性集群。设置负载均衡器来代理对 RabbitMQ 实例的请求。

在此处输入图片说明

在此处输入图片说明

附加文件

  • 这个问题似乎是一个[XY问题](https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem/66378#66378),所以这不是一个很好的答案,但对于我和90%的浏览量,**这是最好的答案**! (2认同)

Mat*_*uns 4

所有气流进程的文件夹中都需要具有相同的内容airflow_home。这包括配置和 dags。如果您只希望服务器 B 运行您的 MySQL 数据库,则无需担心任何气流细节。只需在服务器 B 上安装数据库并更改 airflow.cfg 的sql_alchemy_conn参数以指向服务器 B 上的数据库并从服务器 A 运行 airflow initdb 即可。

如果您还想在服务器 B 上运行气流进程,则必须考虑使用 CeleryExecutor 进行扩展