2016-11-22 10 views
3

タスクの途中でワーカーを強制終了せずに、デプロイ時にすべてのエアフローサービスを再起動する方法に関するアドバイスが必要です。新しいダッグのデプロイ手順

私は、気流や他のピップの依存関係をvirtualenvにインストールするDAGの展開手順を書いています。私のリリースディレクトリの準備ができたら、I:

  1. 停止気流花、気流労働者、気流スケジューラ、および気流ウェブサーバ
  2. 更新私の新しいリリース
  3. を指すように「現在」simlink

このデプロイメント手順の問題は、ワーカーがすぐに殺されることです。スクリプトに何らかの監視を追加して、すべてのDAGを一時停止し、アイドル状態になるのを待ってからサービスを再開しますが、通気CLIはどのダグが有効になっているか、ワーカーがアイドルであるかどうかを知る方法がありません。

多くのエアフローサービスでは、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

気流データベースにアクセスできるため、このプロセスを実行する展開スクリプトの開発を検討してください。

  • 更新DAGテーブルは、完全な実行中のすべての状態のタスク
  • 再起動エアフローサービスまで待機するTASK_INSTANCEテーブルを読んで、すべてのDAG
  • を一時停止します。
  • DAGテーブルを更新してDAGを一時停止します。
+0

ちょっとラウンドアバウトですが、賢いです。この機能が気流に焼き付けられていればいいと思います。 (CLI +待機中のグローバルな一時停止/一時停止をアイドル状態にすると言う) –

+0

機能要求の引き上げを検討する - https://issues.apache.org/jira/browse/AIRFLOW/?selectedTab=com.atlassian.jira.jira-projects -plugin:issues-panel – kvb

+0

します。また、この回答は私に90%の道を与えましたが、途中で問題が発生しました。気流スケジューラを停止する必要があります。そうしないと、作業者はすでに成功したタスクを実行し続けます。私はまた、task_instanceテーブルのデータを信頼するのではなく、セラーAPIを使用してワーカーを照会する必要がありました。 –

関連する問題