airflow作为调度工具,由Webserver、Scheduler、Worker三个组件互相配合完成工作。三个组件之间没有强依赖关系,依靠共用数据库和消息队列完成调度任务。因此,在多台机器上部署airflow,配置相同的元数据库和消息队列,以此来实现airflow的集群模式。
1) airflow启动时,会将dag中的相关信息写入数据库。
2) scheduler会按照指定频次查询数据库,检测是否有需要触发的任务。
3) 当scheduler检测到需要触发的任务时,会向消息队列发送一条Message。
4) Celery会定时查询消息队列中,是否有Message。当检测到Message时,会将Message中包含的任务信息下发给Worker,由Worker执行具体任务。
1) 启动多个webserver,通过HAProxy做LB。
2) 启动多个Worker。
3) 使用airflow-scheduler-failover-controller实现scheduler的高可用。
4) Mysql做主从备份。
5) RabbitMQ集群并配置Mirrored模式。
airflow本身没有对scheduler监控的组件,本处采用了GitHub上的第三方组件。
1) 下载
git clone https://github.com/teamclairvoyant/airflow-scheduler-failover-controller
2) 使用pip进行安装
cd {AIRFLOW_FAILOVER_CONTROLLER_HOME}
pip install -e .
3) 初始化failover
scheduler_failover_controller init
注:初始化时,会向airflow.cfg中追加内容,因此需要先安装airflow。
4) 更改failover配置
scheduler_nodes_in_cluster = host1,host2
注: host name 可以通过scheduler_failover_controller get_current_host命令获得
5) 配置安装failover的机器之间的免密登录,配置完成后,可以使用如下命令进行验证:
scheduler_failover_controller test_connection
6) 启动failover
scheduler_failover_controller start