Ansible Tower のバックアップリストア

皆さんこんにちは、Red Hat ソリューションアーキテクトの岡野です。

前回 Ansible Tower の可用性の一つということでクラスターについて書かせていただきました。
今回は、よりお手軽に利用可能なバックアップリストアについてご説明したいと思います。

#前回同様この記事は Ansible Tower 3.6をベースに動作確認を行っています。
 将来のバージョンでは異なる動きとなる可能性もありますのであらかじめご了承ください。

Ansible Tower の可用性の担保を考えた場合、バックアップリストアは凄くお手軽に実装・運用できる手段です。
Ansible Tower インストールの際に使うコマンド、setup.sh の引数を "-b" とすればバックアップ、"-r" とすればリストアとなります。

手順は以下の通り簡単です。

1. バイナリの入手と解凍
 インストール用のバイナリと同じものを使用します。入手先は以下参照。
 https://releases.ansible.com/ansible-tower/setup/
 ※入手するバイナリはバックアップホストと同じバージョンかつ最新のマイナーバージョンのものを入手します
  例えば、3.4.0 や 3.4.2 を使っている場合は、3.4.5 (ansible-tower-setup-3.4.5-1.tar.gz) を入手してください

2. バックアップを取得
 解凍した inventory ファイルを環境に合わせて編集し、以下のコマンドを実行します

# ./setup.sh -b

 バックアップデータは 1 つのファイルとなります

3. リストア先にバックアップファイルを転送

4. inventory ファイルの編集
 手順 1 で取得したバイナリファイルから今度はリストア先の環境に合わせて inventory ファイルを編集します

5. リストア
 バックアップファイルを指定してコマンドを実行します。

# ./setup.sh -e  'restore_backup_file=/path/to/nondefault/backup-data.tar.gz' -r  

これだけです。先日ご説明したクラスター環境も同様にバックアップリストア可能です。

なお、バックアップリストアに関しては、以下の様な条件があります。

・リストア先はバックアップ元と同じバージョンとする
・リストアに利用するバイナリは最新のマイナーバージョンを利用(上記の通り)

手順3で作成されたバックアップデータは日付、時間を含む、 "tower-backup-YYYY-MM-DD-HH:MM:SS.tar.gz" という圧縮ファイルとなります。このファイルさえ保存しておけば、万が一の Ansible Tower 障害の際、PostgreSQLのデータ含め、一部の例外を除き丸ごと復旧することが可能です。

リストアに関しては、

・既存の Ansible Tower 上にリストア
・新規ホストへのリストア

というケースが考えられますが共に可能です。

但し、リストアは、Ansible Tower の新規インストールは行いません。このため、特に、新規ホストへのリストアの際は、あらかじめリストア先に Ansible Tower をインストールしておく必要があります。この際、バックアップ元とリストア先は、同じ Ansible Tower のバージョンで準備するようお願いします。

留意点
基本的には丸ごとリストアでほぼ同じ環境となるのですが、以下はリストアの際に失われる可能性があります。
・インスタンスグループ
・/var/lib/awx/projects/ 配下の Playbook (Ansible Tower をクラスター構成している場合のみの制限)
・/var/log/tower/ 配下のログファイル
 ※リストア先が既存ホストか、新規ホストかによって異なりますが、無くなる可能性があるということでご理解ください。

PostgreSQLのバックアップは pg_dump を利用。このため、バックアップ取得開始時点のスナップショットであり、DBとして内部的に整合性のとれたデータとなっています。ただ、Ansible Tower にはジョブ実行時のキューの情報などもあります。これがリストア時にどうなるのか実機で試してみました。

テスト内容
ジョブテンプレートを実行しながらバックアップを取得し他のホストにリストア

結果
バックアップジョブが失敗としてリストアされる。 右がバックアップ元の Ansible Tower のジョブの結果、左がリストアした Ansible Tower のジョブ結果です。このジョブは成功したのですが、リストアしたホストでは失敗ジョブとして記録されています。

f:id:hokn5:20200304132326j:plain

エラー内容を見てみると・・・、

f:id:hokn5:20200304132523j:plain

稼働中のジョブとして記述されているが、該当するキューがないとのこと。なるほど、という感じですね。

この結果から、リストアした時には実際には成功している直前のジョブが失敗として表記される可能性があります。 ま、それほどクリティカルな問題だとは思いませんが、もし気になる場合は、実行されているジョブがない時にバックアップを取得ください。

まとめ
Ansible Tower のバックアップリストアは追加のソフトウェアも必要なく、かつ、オペレーションは極めて簡単です。あらかじめスタンバイホストとして Ansible Tower を新規で準備しておけば RTO も非常に短くなります。Ansible Tower の可用性の向上をお考えの方は是非ご検討ください。

Ansible Tower のバイナリーと評価ライセンスは以下から取得可能です。是非使ってみてください!!

・Ansible Tower バイナリーダウンロードはこちらから
・Ansible Towerの評価ライセンスリクエストはこちらから

* 各記事は著者の見解によるものでありその所属組織を代表する公式なものではありません。その内容については非公式見解を含みます。