【问题标题】:Airflow settings to run Celery workers in different Docker container?在不同的 Docker 容器中运行 Celery 工作人员的气流设置?
【发布时间】:2017-08-02 07:29:05
【问题描述】:
我在 docker 容器中运行 Airflow。我创建了一个单独的容器来运行 Postgres 服务器和 Rabbitmq 服务器,使用 docker 网络连接这些容器 - 遵循这个不错的 article。现在我的 Airflow docker 容器正在运行并使用 docker 网络连接到其他容器 - 到目前为止,该过程进展顺利。问题是如何在同一个容器中运行airflow webserver、airflow scheduler 和airflow worker。经过一番研究我发现:建议在一个容器中运行一项服务。现在我有两个解决方案
- 在同一个 Airflow 容器中运行多个服务 - 我想不出一种简单的方法来实现成为 Docker 中的新蜜蜂。
- 创建单独的容器来运行 Celery worker 和 Airflow 调度程序 - 但在 airflow.cfg 文件中,与 Celery 相关的设置是:
broker_url = 'amqp://guest:guest@ksaprice_rabbitmq:8080//'、celery_result_backend = db+postgresql://developer:user889@ksaprice_postgres:5432/airflow。这些设置指的是已经在运行不同容器的数据库或 rabbitmq - 它们不指运行 celery 和调度程序的 ip/url,我假设是这种方式,因为 celery 和调度程序在气流服务器上运行。
我的问题是:
- 参考第 1 点:有没有简单的方法在同一个 Airflow 容器中运行
airflow webserver、airflow scheduler 和 airflow worker 命令?
- 参考第 2 点:airflow.cfg 中是否有办法配置气流调度程序和气流工作程序以在单独的 docker 容器中运行 - 并使用 docker 网络链接它们?
我是 Airflow 和 Docker 的新手。
【问题讨论】:
标签:
docker
celery
airflow
【解决方案1】:
花了很多时间后,我找到了以下答案:
- 对于第一个问题:
要在同一个airflow_container 上运行多个服务:
docker exec -it airflow_container bash,现在CLI 将附加到airflow_container 然后运行airflow worker。对airflow scheduler 和airflow flower 重复相同的过程。现在,您将拥有三个不同的 CLI,在同一个 airflow_container 上运行三个服务 - 这是我发现的最简单的方法。
- 对于第二个问题:这里有一些选项:airflow cli,比如
airflow webserver --hostname=some_host --port=some_port 和airflow flower --hostname=some_host --port=some_port,可以在不同的服务器上运行它们。但是对于airflow worker,没有在不同服务器上运行的选项 - 可能有其他方法可以在不同服务器上运行工作程序。
【解决方案2】:
1- 我确实安装了所有这些,所以它可能
2-优化方法是在一台服务器上安装气流(webserver)+后端数据库(Mysql),在另一台服务器上安装队列(RabbitMQ),在另一组服务器上安装 Celery 部分。
下面我将从源头中提及一些内容,这有助于更好地澄清事情:
CeleryExecutor 是您可以扩展数量的方法之一
工人。为此,您需要设置一个 Celery 后端
(RabbitMQ,Redis,...)并更改您的airflow.cfg 以指向执行程序
参数给 CeleryExecutor 并提供相关的 Celery 设置。
以下是对您的员工的一些必要要求:
airflow需要安装,CLI需要在路径中
气流配置设置应该是同质的
集群
在 worker 上执行的操作符需要有自己的
在这种情况下遇到的依赖关系。例如,如果您使用
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