2016-11-22 39 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表中的數據。 –