エンジニアはこわくない

自分の好きな音楽とか雑記とかエンジニアっぽい内容を好きなように書く場所。

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で可能なことが多いということでもあるので頑張ります。

おわり!!

広告を非表示にする