如何在不同的Docker容器中运行Celery工作者的Airflow设置?

3
我正在docker容器中运行Airflow。我创建了一个单独的容器来运行Postgres服务器和Rabbitmq服务器,并使用docker网络连接这些容器-遵循这篇好的article。现在我的Airflow docker容器正在运行,并且使用docker网络连接到其他容器-到目前为止,该过程顺利进行。问题是如何在同一容器中运行airflow webserverairflow schedulerairflow worker。经过一些研究,我发现:建议在一个容器中运行一个服务。现在我有两个解决方案。
  1. 在同一个Airflow容器中运行多个服务-作为Docker的新手,我无法找到简单实现的方法。
  2. 创建单独的容器来运行Celery worker和Airflow scheduler-但是在airflow.cfg文件中,与Celery相关的设置如下:broker_url ='amqp://guest: guest @ ksaprice_rabbitmq:8080 //'celery_result_backend = db + postgresql:// developer:user889@ksaprice_postgres:5432 / airflow 。这些设置是指已经在不同容器中运行的数据库或rabbitmq,它们不是指运行celery和scheduler的ip/url,我认为是因为celery和scheduler在airflow服务器上运行。

我的问题是:

  1. 关于第1点:有没有一种简单的方法可以在同一个Airflow容器中运行airflow webserverairflow schedulerairflow worker命令?
  2. 关于第2点:是否有一种方法在airflow.cfg中配置airflow scheduler和airflow worker以在单独的docker容器中运行-并使用docker网络将它们链接起来?

我是Airflow和Docker的新手。


1
为什么不看一下这个网址 https://hub.docker.com/r/puckel/docker-airflow/ 并使用这个镜像来设置整个环境呢? - Tarun Lalwani
这个能在Python 2.7上运行吗? - Javed
2个回答

3

我花了很多时间,找到了以下答案:

  1. 对于第一个问题: 要在同一 airflow_container 上运行多个服务,请执行以下操作:docker exec -it airflow_container bash,现在 CLI 将附加到 airflow_container,然后运行 airflow worker。对于 airflow schedulerairflow flower,重复相同的过程。现在您将有三个不同的 CLI 在同一 airflow_container 上运行三个服务-这是我发现的最简单的方法。
  2. 对于第二个问题:这里有一些选项:airflow cli,如 airflow webserver --hostname=some_host --port=some_portairflow flower --hostname=some_host --port=some_port 在不同的服务器上运行它们。但是,对于 airflow worker,没有选项可在不同的服务器上运行-可能有其他运行 worker 的方式。

0

1- 我已经安装了所有这些,所以有可能

2- 最优化的方式是将 airflow(Web 服务器)+ 后端数据库(MySQL)安装在一个服务器上,将队列(RabbitMQ)安装在另一个服务器上,将 Celery 部分安装在另一组服务器上。 下面我将从源代码中提到一些内容,并可以帮助更好地澄清问题:

CeleryExecutor 是扩展 Airflow 的一种方式,可以增加工作节点的数量。要使用它,你需要设置一个 Celery 后端(如 RabbitMQ、Redis 等),并在 airflow.cfg 中将执行器参数指向 CeleryExecutor,并提供相关的 Celery 设置。
以下是几个关键要求:
- 必须安装 airflow,并且 CLI 必须在路径中可用。 - 集群中的 airflow 配置设置应该是相同的。 - 工作节点上执行的任务必须满足其依赖关系。例如,如果你使用 HiveOperator,则 hive CLI 必须安装在该节点上;如果你使用 MySqlOperator,则所需的 Python 库必须以某种方式在 PYTHONPATH 中可用。 - 工作节点需要访问 DAGS_FOLDER,并且你需要通过自己的手段同步文件系统。常见的设置是将 DAGS_FOLDER 存储在 Git 存储库中,并使用 Chef、Puppet、Ansible 或其他配置环境中机器的工具在不同机器之间同步。如果所有机器都有共同的挂载点,将管道文件共享到那里也可以起作用。

来源: https://airflow.readthedocs.io/en/1.10.6/howto/executor/use-celery.html


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接