集群资源分配
部署步骤
安装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:
- 数据库airflow需提前创建并授权给airflow用户,可参考文档:http://note.youdao.com/noteshare?id=647e52adada5129a79e9489674bf5d0f&sub=1510E69969A94D2688407874911A07E1
- 本文档采用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
出现的问题
- from werkzeug.wrappers.json import JSONMixin as _JSONMixinImportError: No module named json
解决办法:pip install -U werkzeug
- 目前使用root用户启动(借助export C_FORCE_ROOT=True),后续考虑使用其它用户启动