6

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

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

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

4

2 回答 2

8

这篇文章很好地展示了如何将 Airflow 集群到多个服务器上。

多节点(集群)气流设置

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

在此处输入图像描述

好处

更高的可用性

如果其中一个工作节点出现故障或故意脱机,则集群仍然可以运行并且任务仍然可以执行。

分布式处理

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

扩展工人

横向

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

垂直

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

例子:

celeryd_concurrency = 30

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

扩展主节点

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

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

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

在此处输入图像描述

Apache Airflow 集群设置步骤

先决条件

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

在此处输入图像描述

在此处输入图像描述

附加文件

于 2019-03-25T20:17:24.823 回答
2

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

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

于 2017-07-20T19:22:55.507 回答