分散式airflow搭建(不使用git或共享儲存實現dag目錄同步——xsync)
阿新 • • 發佈:2019-08-02
叢集資源分配
\ | 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:
- 資料庫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 _JSONMixin ImportError: No module named json
解決辦法:pip install -U werkzeug
- 目前使用root使用者啟動(藉助export C_FORCE_ROOT=True),後續考慮使用其它