1. 程式人生 > >分散式airflow搭建(不使用git或共享儲存實現dag目錄同步——xsync)

分散式airflow搭建(不使用git或共享儲存實現dag目錄同步——xsync)

叢集資源分配

\master1master2slave1slave2slave3
元件scheduler, webserver, flower, airflow-scheduler-failover-controllerwebserver, airflow-scheduler-failover-controllerworkerworkerworker

部署步驟

安裝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),後續考慮使用其它