分布式airflow搭建(不使用git或共享存储实现dag目录同步——xsync)

集群资源分配

\ master1 master2 slave1 slave2 slave3
组件 scheduler, webserver, flower, airflow-scheduler-failover-controller webserver, airflow-scheduler-failover-controller worker worker worker

部署步骤

安装airflow

在每台机器上执行

pip install apache-airflow
pip install apache-airflow[mysql]
pip install celery
pip install redis

由于airflow采用python编写,为了方便请自行安装python环境和pip,本文档采用python2.7和pip 19.2.1,airflow1.10.1

问题记录:执行pip install apache-airflow[mysql]时若报错mysql_config不存在可运行yum install python-devel mysql-devel命令

airflow家目录设置

在每台机器上执行

export AIRFLOW_HOME=~/airflow

配置文件生成

在每台机器上执行

airflow

命令,使其在家目录下生成配置文件airflow.cfg

配置文件airflow.cfg修改

## 时区设置
default_timezone = Asia/Shanghai
## 不加载案例
load_examples = False
## 执行webserver默认启动端口
web_server_port = 9999
## 数据库连接
sql_alchemy_conn = mysql://airflow:[email protected]/airflow
## 使用的执行器
executor = CeleryExecutor
## 设置消息的中间代理
broker_url = redis://redis:[email protected]:6379/1
## 设定结果存储后端 backend
## 当然也可以使用 Redis :result_backend =redis://redis:[email protected]:6379/1
result_backend = db+mysql://airflow:[email protected]/airflow

ps:

  1. 数据库airflow需提前创建并授权给airflow用户,可参考文档:http://note.youdao.com/noteshare?id=647e52adada5129a79e9489674bf5d0f&sub=1510E69969A94D2688407874911A07E1
  2. 本文档采用redis进行master和worker节点的消息通讯,若有使用RabbitMQ消息中间件的同学可配置broker_url=amqp://guest:guest@{RABBITMQ_HOST}:5672/

修改时区

https://blog.csdn.net/crazy__hope/article/details/83688986

安装master的高可用组件

master1,master2上执行

安装组件

pip install git+git://github.com/teamclairvoyant/[email protected]

初始化

scheduler_failover_controller init

初始化时,会向airflow.cfg中追加内容,因此需要先安装 airflow 并初始化

修改配置文件 airflow.cfg

scheduler_nodes_in_cluster=master1,master2

host name 可以通过scheduler_failover_controller get_current_host命令获得

验证

scheduler_failover_controller test_connection

ps: 需要先配好master1和master2的ssh免密登录

启动组件

nohup scheduler_failover_controller start > /dev/null &

注意:先不要执行改命令,待airflow所有组件启动之后再执行

编写xsync

使用同步脚本,每次更新dags目录时执行该脚本

参考脚本 https://www.jianshu.com/p/e74fbb091144

启动各组件

在master1上启动scheduler和webserver

airflow scheduler -D
airflow webserver -D

在master2上启动webserver

airflow webserver -D

在slave1,slave2,slave3上启动worker

airflow worker -D

出现的问题

  1. from werkzeug.wrappers.json import JSONMixin as _JSONMixin ImportError: No module named json

解决办法:pip install -U werkzeug

  1. 目前使用root用户启动(借助export C_FORCE_ROOT=True),后续考虑使用其它用户启动

转载于:https://my.oschina.net/u/3770892/blog/3082003

你可能感兴趣的:(分布式airflow搭建(不使用git或共享存储实现dag目录同步——xsync))