ESXCLIは、ESXiホストや仮想マシンなどの仮想インフラを管理するためにBroadcom社がサポートしているコマンドラインインターフェースです。ニーズに合ったESXCLIコマンドを選択して、VMware仮想マシン間でのLifeKeeper STONITH の使用に適用できます。
要件
パッケージ
- ESXCLIパッケージ version 8(vSphere 8以降はvSphere CLIパッケージ、vSphere SDK for Perlパッケージはサポートされなくなりました。)
※Broadcom社のESXCLI を参考にしてください。
監視対象の各仮想マシン
- VMware Tools
事前確認
esxcliコマンドを使用してVMの電源をOFFにする際に使用する手順を確認します。
以下はesxcliコマンド実行時に使用するパラメーターです。 <world_id>
以外の情報をあらかじめ収集しておく必要があります。
パラメーター | 説明 |
---|---|
<esxi_host> |
電源をOFFしたいVMを管理しているESXiホストです。IPアドレス、または名前解決していればホスト名で指定します。 |
<username> |
<esxi_host> で指定したESXiホストの管理アカウント名です。 |
<password> |
<username> で指定した管理アカウントのパスワードです。 |
<thumbprint> |
認証機能を使用している場合にそれに対応する必要がありますが、--thumbprint オプションを指定した方法が最も簡単ですのでここではthumbprintを指定します。thumbprintの値は、shellから --thumbprint オプション指定なしでesxcliコマンドを実行すると出力されます。 |
<world_id> |
後述のesxcli … vm process list の実行結果から得られる、電源をOFFしたいVMのWorld IDの値となります。 |
以下、電源をOFFするために必要な手続きとなります。
<esxi_host>
が管理し、かつ稼働中のVM情報一覧を取得します。これは対象のVMのWorld IDを取得するためです。
# esxcli ––server=<esxi_host> ––username=<username> ––password=<password> --thumbprint=<thumbprint> vm process list
- 取得したVM情報一覧から、電源をOFFしたいVMのWorld IDを確認します。仮にlk-node1を対象とした場合、このVMの情報は以下のように出力されます。(各種値は例です。)
lk-node1 World ID: 2699949 Process ID: 0 VMX Cartel ID: 2699948 UUID: 42 25 89 28 3d 58 94 0c-74 bc fd 21 6a 01 bc 32 Display Name: lk-node1 Config File: /vmfs/volumes/5305d4dc-5c59219f-b2a1-2c44fd8341b4/lk-node1/lk-node1.vmx
出力されているWorld IDを次のコマンドで使用します。
- 確認したWorld IDを使用して対象のVMの電源をOFFします。
# esxcli ––server=<esxi_host> ––username=<username> ––password=<password> --thumbprint=<thumbprint> vm process kill ––type=hard ––world-id=<world_id>
<world_id>
のVMの電源がOFFされることを確認します。
STONITHのインストール
次のコマンドを実行して、LifeKeeper がインストールされ、すべてのサーバーへのコミュニケーションパスが構成されている 各サーバー に LifeKeeper STONITH スクリプトをインストールします。
# /opt/LifeKeeper/samples/STONITH/stonith-install
esxcli-stonith.pl の作成
VMのWorld ID抽出時の実装が簡潔になるのでperlで作成します。以下のSTONISHスクリプトを作成し、 /usr/local/bin/esxcli-stonith.pl に置きます。
#!/usr/bin/perl $ENV{'HOME'} = `cd ~; pwd`; chomp($ENV{'HOME'}); my $esxcli_cmd="esxcli --server=$ARGV[0] --thumbprint=$ARGV[1] --username=$ARGV[2] --password=$ARGV[3]"; my $vm_process_list=`$esxcli_cmd vm process list`; $vm_process_list =~ /[\n]*$ARGV[4]\n\s+World\s+ID:\s*(\d+)\n/s; my $world_id = $1; `$esxcli_cmd vm process kill --type=hard --world-id=$world_id`;
注意
- LifeKeeper経由で実行されると環境変数
HOME
が未設定となる影響でesxcliコマンドが失敗します。そのためスクリプト中で設定し直しています。
- World IDはVMが再起動すると変更されます。STONITHが実行される際に動的にWorld IDを抽出する必要があります。
- スクリプト中ではWorld IDを抽出するため正規表現を使用していますが、VM名に「アルファベット」「数字」「-」(ハイフン)以外の文字が使用されていると正確に抽出できない可能性があります。その場合は適切にWorld IDを抽出できるロジックに修正してください。
実行権限を与えます。
# chmod 755 /usr/local/bin/esxcli-stonith.pl
/opt/LifeKeeper/config/stonith.conf の更新
クラスターを構成するノードをlk-node1、lk-node2とし、それぞれのノードでstonith.confを以下のように設定します。
lk-node1 /usr/local/bin/esxcli-stonith.pl <esxi_host(has lk-node1)> <thumbprint> <username> <password> lk-node1 lk-node2 /usr/local/bin/esxcli-stonith.pl <esxi_host(has lk-node2)> <thumbprint> <username> <password> lk-node2
このトピックへフィードバック