Ansibleで長時間の処理時に反応が返ってこない問題の解決法
こんにちは、つじたく(@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で可能なことが多いということでもあるので頑張ります。
おわり!!