airflow高可用(HA)环境搭建

简述

前端时间尝试着搭建了airflow的高可用(HA)环境,为避免自己遗忘,现将安装过程整理成文档。公司环境没有外网,只是配置了本地yum源,安装之前将所有的用到的包都预先整理了一下。为了方便大家阅读我稍后会将包结构给出,大家在阅读的时候有些地方请根据自己的环境进行替换。
airflow_ha_install/
├── airflow-packages //该目录下主要存放了airflow依赖的三方包,没有外网只能先下载下来搞咯
├── airflow-scheduler-failover-controller-master
│ ├── CHANGELOG.md
│ ├── License.md
│ ├── README.md
│ ├── scheduler_failover_controller
│ ├── scripts
│ ├── setup.cfg
│ └── setup.py
├── pip-9.0.1.tar.gz
├── rabbitmq
│ ├── erlang-19.3.6.4-1.el7.x86_64.rpm //这个包是我编译之后的包,大家可以通过下载源码自行编译
│ └── rabbitmq-server-3.7.4-1.el7.noarch.rpm
└── systemd
├── airflow
├── airflow.conf
├── airflow-flower.service
├── airflow-kerberos.service
├── airflow-scheduler.service
├── airflow-webserver.service
├── airflow-worker.service
└── README

环境规划

host IP service
airflow-01 192.168.3.191 airflow-worker/webserver/ASFC/rabbitmq
airflow-02 192.168.3.192 airflow-worker/webserver/ASFC/rabbitmq
airflow-03 192.168.3.193 airflow-worker/webserver/Haproxy

准备环境

centos7
准备环境的操作需要以root用户完成

关闭防火墙和selinux

systemctl stop firewalld
systemctl disable firewalld
setenforce 0 
sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config

新建用户airflow 并赋予sudo权限

useradd airflow

安装依赖包

yum groupinstall "Development tools"
yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel python-devel wget cyrus-sasl-devel.x86_64 libffi-devel python-psycopg2

安装pip

上传安装包到目标环境中的每台服务器
以root身份登录目标环境中的每台服务器执行如下命令

yum groupinstall "Development tools" -y
yum install python-setuptools python-devel -y
tar xzvf pip-9.0.1.tar.gz
cd pip-9.0.1
python setup.py install

安装rabbitmq_ha

单机上安装

分别在192.168.3.191 192.168.3.192 节点上安装rabbitmq server

  1. Install erlang
    yum install airflow_ha_install/rabbitmq/erlang-19.3.6.4-1.el7.x86_64.rpm
    
  2. Install RabbitMQ Server
    yum install airflow_ha_install/rabbitmq/rabbitmq-server-3.7.4-1.el7.noarch.rpm
    
  3. 启动
    rabbitmq-server start
    
  4. 设置开机自启动
    systemctl enable rabbitmq-server
    
  5. 启用插件rabbitmq management
    rabbitmq-plugins enable rabbitmq_management
    输入http://ip:15672可以登录管理界面,默认账户guest/guest只能使用http://localhost:15672登录,要想远程登录,需要添加一个新的用户:
    # rabbitmqctl add_user admin admin
    #用户设置为administrator才能远程访问
    rabbitmqctl set_user_tags admin administrator 
    rabbitmqctl set_permissions -p / admin ".*" ".*" ".*" //该命令使用户admin具有‘/’这个virtual host中所有资源的配置、写、读权限以便管理其中的资源,查看所有用户#rabbitmqctl list_users
    

集群搭建

#将192.168.3.191上的/var/lib/rabbitmq/.erlang.cookie复制到192     var/lib/rabbitmq/.erlang.cookie, 即服务器必须具有相同的cookie,如果不相同的话,无法搭建集群.
#192.168.3.192节点上分别执行命令,加入到集群
systemctl restart rabbitmq-server
rabbitmqctl stop_app
rabbitmqctl join_cluster  rabbit@airflow-01
rabbitmqctl start_app
#其中--ram代表是内存节点,如果希望是磁盘节点则不用加--ram,在rabbitmq集群中,至少需要一个磁盘节点
#查看集群的状态
rabbitmqctl cluster_status

设置成镜像队列
在192.168.3.191上执行

rabbitmqctl set_policy ha-all "" '{"ha-mode":"all","ha-sync-mode": "automatic"}'

安装HAproxy

在192.168.3.191上安装HAproxy

yum install haproxy
vi /etc/haproxy/haproxy.cfg 
#1.修改默认的模式为tcp
#2.在文件末尾添加如下内容:
# port forwarding from 8080 to the airflow webserver on 8080
listen impala
 bind 0.0.0.0:8080
 balance roundrobin
 server airflow_webserver_1 auto-nn-01.embrace.com:8080 check
 server airflow_webserver_2 auto-nn-02.embrace.com:8080 check
 
listen rabbitmq-web-ui
 bind 0.0.0.0:15677
 balance roundrobin
 server rabbitmq_server_1 auto-cn-01.embrace.com:15672 check
 server rabbitmq_server_2 auto-nn-01.embrace.com:15672 check
 
listen rabbitmq-ui
 bind 0.0.0.0:5677
 balance roundrobin
 server rabbitmq_server_1 auto-cn-01.embrace.com:5672 check
 server rabbitmq_server_2 auto-nn-01.embrace.com:5672 check

# This sets up the admin page for HA Proxy at port 1936.
listen stats :1936
 mode http
 stats enable
 stats uri /
 stats hide-version
 stats refresh 30s

启动

systemctl start haproxy

关闭

systemctl stop haproxy

加入系统服务

systemctl enbale haproxy

安装配置airflow

安装

以root用户登录目标环境中的一台服务器,并执行如下命令进行安装

cd airflow_ha_install/airflow-packages
pip install --no-index --find-links . apache-airflow
pip install --no-index --find-links . apache-airflow[celery]
pip install --no-index --find-links . apache-airflow[crypto]

配置环境变量(AIRFLOW_HOME)并创建必要的目录

以airflow用户登录目标环境中的每一台服务器,执行如下命令

mkdir ~/airflow
# vi ~/.bash_profile 添加如下内容
export AIRFLOW_HOME=~/airflow

#载入环境变量
source ~/.bash_profile
#创建必须的目录

cd $AIRFLOW_HOME
mkdir dags
mkdir logs

配置airflow

该部分操作只需要在目标环境中的某一台服务器上执行即可,执行完成之后需将配置文件同步到其他服务器上

  1. 初始化数据库
    airflow initdb
    

2.修改配置文件($AIRFLOW_HOME/airflow.cfg)
* 修改执行器为CeleryExecutor
excutor=CeleryExcutor
* 修改数据库链接信息
sql_alchemy_conn = postgresql+psycopg2://airflow:airflow@$ip4addr:5432/airflow
* 设置dags初始化后为暂停状态
dags_are_paused_at_creation = True
* 不引用例子
load_examples = False
* 设置消息队列链接信息
broker_url = amqp://admin:admin@192.168.3.191:5677/
* 设置celery执行pg
celery_result_backend = db+postgresql+psycopg2://postgres:postgres@192.168.3.191:5432/airflow
* 再次运行 airflow initdb,创建相关表结构
airflow initdb

  1. 下发airflow.cfg
    将airflow.cfg到集群中的每台机器上

将airflow加入系统服务

以root用户登录目标环境中每一台服务器,执行如下命令

  1. 拷贝service文件
    cd airflow_ha_install/systemd
    cp airflow*.service /usr/lib/systemd/system
    chown airflow:airflow /usr/lib/systemd/system/airflow*.service
    #确保文件中airflow命令的路径是正确的
    
  2. copy the airflow.conf to /etc/tmpfiles.d/ or /usr/lib/tmpfiles.d/
    cd airflow_ha_install/systemd
    cp  airflow.conf  /etc/tmpfiles.d/
    
  3. 确保 /run/airflow 存在,且所有者和所属组正确 (0755 airflow airflow)
  4. 拷贝airflow至/etc/sysconfig/airflow 并修改 AIRFLOW_HOME
    cd airflow_ha_install/systemd
    cp airflow /etc/sysconfig/airflow
    
  5. 加入到开机自启动
    systemctl enable airflow-webserver
    systemctl enable airflow-wroker
    systemctl enable airflow-flower
    

安装airflow-scheduler-failover-controller

  1. Install ASFC

    cd airflow_ha_install/airflow-scheduler-failover-controller-master
    pip install -e . --no-index --find-links ../airflow-packages
    
  2. 初始化

    scheduler_failover_controller init
    
  3. 更新airflow.cfg

    scheduler_nodes_in_cluster = auto-nn-01,auto-nn-02
    #it is recommended that you use the value printed from the following command:scheduler_failover_controller get_current_host
    
  4. 启动airflow免密登录

  5. 测试联通行

    scheduler_failover_controller test_connection
    
  6. 确保运行正常

    scheduler_failover_controller metadata
    
  7. 加入到系统服务

    1. Login to each of the machines acting as Scheduler Failover Controllers

    2. Login as root

    3. Copy the scheduler_failover_controller.service file to the systemd directory. See the bellow list for the correct location based off your environment.
      ​ * /usr/lib/systemd/system/ for CentOS
      ​ * /lib/systemd/system/ for Ubuntu

    4. Edit the scheduler_failover_controller.service and change any configurations you would like
      ​ a. Change user and group options as needed to ensure that it is the same as the user and group the main airflow processes are running as

    5. Enable the service to be ran on startup of the machine
      ​ systemctl enable scheduler_failover_controller

    6. You're done!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342