Ansible Tower + ZabbixでESXi障害時のVM復旧をやってみる


ESXi障害時のVM復旧をvCenterを使わずにAnsible Tower(or AWX) + Zabbixで出来たら面白そうだと思いやってみました。

やりたかったこと

ESXiダウン(障害)をZabbixが検知したら、そのESXi上で稼働していたVMを他のESXi上に移動させて復旧させます。

環境

項目 バージョン
Ansible Tower 3.4.2
Ansible 2.7.8
RHEL 7.6
Zabbix 4.0.5-1
CentOS 7.6.1810
ESXi 6.7.0 Build 8169922

考えなくてはいけないこと

ZabbixがESXiの障害を検知して且つそのESXi上で稼働していたVMの特定と移動先のESXiを指定する必要があります。
そこで、ここでは以下のようにしてみたいと思います。

  • 障害検知用でESXiへのping監視
  • 障害検知用でVMへのping監視
  • ESXiの障害且つVMの障害が発生したらVMを移動させる
  • 移動先のESXiはVMのホストインベントリのタグに設定しておく

出来れば人間が意識せず動的に移動先ESXiを自動で識別できる仕組みを作れればいいんですが、ここでは静的に記述します。

準備

Zabbix側準備

tower-cli を使ってAnsible Towerのテンプレートを実行するためインストールします。

Ansible Tower側準備

Ansible Tower側にはプロジェクトを作成します。
プロジェクト用ディレクトリを作成します。

使用するためのモジュールを準備します。
ここでは以下のモジュールを使用します。

モジュール 説明
vmware_guest_register_operation ストレージにあるVMをESXiに登録するためのモジュール
vmware_guest_powered_on_operation_question VM移動後に電源をつけた時に問われる質問に自動で回答してくれるモジュール
zabbix_host_facts コミュニティにある標準モジュール

Ansible 2.7.xのzabbix_host_factsモジュールだとホストインベントリが取得できませんでした。
そのため、アップストリームにホストインベントリが取得できるオプションをPRしたところマージしてくれたので、それを使います。
今回は devel ブランチからダウンロードしますが、Ansible 2.8から適応されます。
それ以外はコミュニティにないため、自作モジュールになります。

Playbookを作成します。

ここでは vm_password はVaultで暗号化しています。
必要であれば zabbix_password もVaultで暗号化してもいいと思います。

設定

Zabbix設定

ESXi監視

ESXi監視設定は以下のようになっています。

ホスト

アイテム

トリガー

VM監視

ホスト

VMの監視にはマクロを登録しています。

マクロ 説明
{$ANSIBLE_PASSWORD}} Ansible Towerのパスワード
{$ANSIBLE_TOWER} Ansible Towerのホスト名またはIPアドレス
{$ANSIBLE_USER} Ansible Towreのユーザー名
{$PASSWORD} ESXiのパスワード
{$URL} ESXiのAPI URL
{$USERNAME} ESXiのユーザー名
{$ZBX_PASSWORD} Zabbixのパスワード
{$ZBX_URL} ZabbixのURL
{$ZBX_USER} Zabbixのユーザー

VMのホストインベントリです。
ここでは、タグに移動先ESXiを登録しています。

アイテム

稼働しているESXiの記録を残しておくために HyperVisor というアイテムを登録しています。
もし、移動した場合に移動前はどのESXiで稼働していたかを確認する目的で入れています。

トリガー

トリガーはESXiのping断且つVMのping断が発生したら VM移動トリガー を発生させます。
VM断の判断条件は必ず最初に入れてください。
トリガーに設定された条件式に書いてある最初の条件のホストのマクロが使われるからです。

アクション

アクションの設定は以下のようにしています。

コマンドは以下のように設定しています。

Ansible Tower設定

プロジェクト

テンプレート

extra_varsが受け取れるように追加変数の 起動プロンプト にチェックを入れます。

実行

ESXiをダウンさせると障害をZabbixが検知しAnsible Tower経由でVMの復旧がされます。

move the vm to ESXi from faile ESXi from sky_joker on Vimeo.

これで、vCenterを使わなくてもESXi単体でVMの復旧ができました 🙂

Leave a Reply

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください