2016-11-22 43 views
3

我需要一些建议,指导如何在部署时重启所有气流服务,而不会在任务中间杀死工人。为新dags部署程序

我已经为我的DAG编写了一个部署过程,这些过程在virtualenv中安装气流和任何其他pip依赖项。一旦我的发布目录是准备好了,我:

  1. 停止气流花,气流工人,气流调度,以及气流Web服务器
  2. 更新“当前” simlink指向我的新版本
  3. 启动气流花,气流工作者,气流调度程序和气流网络服务器

此部署过程的问题是工作人员立即死亡。我想为脚本添加某种监控来暂停所有DAG,等待工作人员闲置,然后重新启动服务,但气流CLI无法知道启用了哪些dag,也无法了解工作人员是否处于闲置状态。

我知道许多气流服务可以自动检测dags文件夹中的更改,但我希望每个部署都有自己的virtualenv。如果我不重新启动所有服务,那么新的部署将不会在我的requirements.txt文件中找到新行。

+0

我有同样的问题掉队,你有没有找到一种方法,或者你必须实现在接受的答案中提到的一切吗? – s7anley

+0

我其实注意到工人们会优雅地从SIGINT中退出。我相应地更新了我的systemctl脚本 –

回答

1

气流工作人员优雅地从SIGINT退出。更新您的进程监视器以​​使用SIGINT而不是默认值退出。如果您使用systemctl,那么它会是这个样子:

... 
[Service] 
EnvironmentFile=/etc/sysconfig/airflow 
User=airflow 
Group=airflow 
Type=simple 
ExecStart=... 
KillSignal=SIGINT 
Restart=on-failure 
RestartSec=10s 

... 
+2

这不是真正的原始问题的答案。使用Systemd单元文件优雅地关闭Airflow工作人员是一个很好的答案。 – DetDev

3

您可以访问Airflow数据库,所以请考虑开发一个为您执行此过程的部署脚本。

  • 更新DAG表暂停所有的DAG
  • 阅读TASK_INSTANCE表要等到所有正在运行状态的任务完成
  • 重启气流的服务。
  • 更新DAG表以取消暂停DAG。
+0

有点迂回,但很聪明。如果这个功能被烘焙到气流中,会很好。 (说一个全局暂停/从CLI中取消暂停+ wait_for工作者闲置) –

+0

考虑提出功能请求 - https://issues.apache.org/jira/browse/AIRFLOW/?selectedTab=com.atlassian.jira.jira-projects - 插件:问题面板 – kvb

+0

会做。此外,这个答案让我有90%的途径,但我遇到了一些问题。需要停止气流调度程序,否则工作人员将继续运行已经成功的任务。我还必须使用celery API来查询工作者,而不是信任task_instance表中的数据。 –