技術

XenServer コマンドについて

XenServerで幾つかサーバーを運用してます。
実験的なサービスなどは非安定版のソフトウェアを使うことが多く、VMがフリーズしてしまうこともたまにあります。
(サポートされたOSで安定してるソフトウェアを使う分にはVMがフリーズした事はなく、コントロールドメイン自体もフリーズ等の問題が起きたことはないので、XenServer自体の安定性には問題はないと思います。)

例えVMがフリーズしてしまったとしても、XenServer(コントロールドメイン)自体は問題なく動いてるので、ssh接続してxsconsoleから該当のVMを強制再起動させるだけで復旧出来るので大きな問題ではないですが、外出中でノートPCもない場合(基本僕はノートPCは持ち歩きません)ssh接続自体が出来なくてオワタ\(^o^)/となります。

そこでいつも持ち歩いてるiPhoneにTouchTerm(450円:Proじゃない方)を入れて使ってみたのですが、xsconsoleが表示できなくてここでもオワタ\(^o^)/となってしまいました。
(xsconsoleはターミナルの縦横文字数が少ないとエラーを出して起動しないので、それを満たすようにTouchTermの文字サイズを小さくすることでxsconsoleはエラーを出さず起動するようになったようなのですが、全く内容が表示されないという問題が起きてしまい操作できませんでした。)

TouchTerm自体は、3G回線でも接続でき、ポートもデフォルトの22から変更することができ、鍵の生成・利用もできるので、ssh接続してコマンドを打つという用途だと過不足なく実行可能ですばらしいアプリだと思います。

で、xsconsoleを使わずにVMの強制再起動をするために、XenServerのコマンドを色々調べたのでちょっとまとめておきます。

VMのリストを表示
xe vm-list

すべてのVM(起動中か否かに関係なく)の情報を表示します。情報の内容はVMのuuid、name-label、power-state(起動中かどうかの状態)。

稼働中の(コントロールドメイン以外の)VMのすべてのパラメータを表示
xe vm-list power-state=running is-control-domain=false params=all

オプションの意味はそのまんまです。実行結果を見れば分かりますがすべてのパラメータってのがかなり多め(60個以上)。
これで表示されるパラメータをpower-state=runningみたいにVMの絞り込みのオプションに使えます。

稼働中の(コントロールドメイン以外の)VMのname-labelとuuidを表示
xe vm-list power-state=running is-control-domain=false params=name-label,uuid

paramsにallではなく、パラメータ名をカンマ区切りで指定すると、指定したパラメータの分だけ表示されます。

特定のVMについてパラメータをすべて表示
xe vm-param-list uuid=12345678-9abc-def0-1234-56789abcdef0

実はvm-listだと値を取得するのに計算リソースを食うという理由でCPU使用率等表示されないパラメータがいくつかありますが、vm-param-listでは表示されます。
その代わりuuidの指定が必要で一度に表示出来るのは一つのVMについてのみです。

特定のVMについてCPU使用率を表示
xe vm-param-get uuid=12345678-9abc-def0-1234-56789abcdef0 param-name=VCPUs-utilisation

これでCPU使用率が取得出来ます。小数点以下桁数3の数値で表示され0.000がCPU利用率0%、1.000がCPU利用率100%に相当するようです。
さらに仮想CPUコアが複数ある場合もあるため、例えば2コアの場合は、”0: 0.251; 1:0.036″のように表示されます。
1コアの場合も同じく、”0: 0.843″のように表示されます。

特定のVMについて0番目のコアのCPU使用率を表示
xe vm-param-get uuid=12345678-9abc-def0-1234-56789abcdef0 param-name=VCPUs-utilisation param-key=0

CPU使用率以外にも<key>: <value>; <key>: <value>…という形式の値になってるパラメータがありますが、param-keyに<key>を指定すれば<value>だけを抽出することができます。

特定のVMについてOS名を表示
xe vm-param-get uuid=12345678-9abc-def0-1234-56789abcdef0 param-name=os-version param-key=name

os-versionパラメータには、OS名などが<key>: <value>の形で格納されています。os-versionの場合はnameキーでOS名が取得できます。

VMの強制再起動
xe vm-reboot uuid=12345678-9abc-def0-1234-56789abcdef0 force=true

ま、見たまんまですね。

あらかじめVMのuuidを調べておけば、今回の用途で必要なのは最後の強制再起動コマンドだけですが、vm-list、vm-param-list、vm-param-getを使いこなせれば、一般的な用途で必要なVMの情報のほぼすべてが参照できるはずです。
自動でCPU使用率をモニタリングして一定時間以上100%に張り付いてたらpingなどで生存チェックして強制再起動するというスクリプトも作れるでしょう。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です



※画像をクリックして別の画像を表示

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