エンジニアはこわくない

好きなように書く

Ansibleで長時間の処理時に反応が返ってこない問題の解決法


スポンサーリンク

f:id:tsujitaku50:20170329155107p:plain

こんにちは、つじたく(@Tsuji_Taku50)です。

この前Ansibleを使用している時に

「わりと重い処理(長時間掛かる処理)を実行するとAnsibleから反応が返ってこない」問題が起こりました。

それについての対処法を書きたいと思います。

実際に問題が起こった処理

実際にAnsibleで処理を行っている時に反応が返ってこなくなったのは

sqlのdumpファイルをリストアしている時でした。

反応の返ってこなかった問題の処理↓

# dumpファイル反映
- name: Import dump.sql
  mysql_db:
    state: import
    name: test_db
    target: /home/Users/dump.sql

test_dbという名前のテーブルにdump.sqlを反映するという処理になります。

dump.sqlファイルが1GBほどあり量が大きすぎたのが反応が返ってこない原因のようです。

対処方法

Ansibleには「async」と「poll」という設定が用意されています。

  • async : 終了まで待つ時間(秒).設定した時間を過ぎると強制的に次の処理に移行します

  • poll : チェックする間隔(秒).

この2つを利用します。

上記を利用して先程のコードを修正すると以下のようになります。

# dumpファイル反映
- name: Import dump.sql
  poll: 30
  async: 10800
  mysql_db:
    state: import
    name: test_db
    target: /home/Users/dump.sql

30秒ずつチェックして、10800秒 = 3時間過ぎても処理が終わらない場合

強制的に次の処理に移行するように設定しています。

まとめ

Ansibleはまだまだ勉強不足で知らないことが多いので、大変です。。

ただそれだけAnsibleで可能なことが多いということでもあるので頑張ります。

おわり!!