Skip navigation
2013

Virtual SAN(VSAN)で、ESXi 追加の実験をしてみました。

VSAN は、ESXiのローカルディスクと、同じくESXi 自身に接続されたSSD(キャッシュとして利用)して
複数台のESXi にまたがる分散データストアを構築する機能です。

 

この機能は、(当然のことながら)データストアの空き領域が不足したら
ESXi に(物理的に)HDDを追加して、VSANのディスクグループに追加すれば
領域拡張ができます。

 

そして、VSANクラスタ内でのCPU処理性能、メモリ容量といったリソースが不足した場合、
ディスクリソースに容量、性能的な余裕があるなら

ディスクを持たないESXi を追加することもできるそうです。
(と、vForum2013で聞きました・・・)

 

下記のようなイメージです。

vsan_add_node.png

 

そこで、実際に データストア用のディスクを持たないESXi を
VSANクラスタに追加してみました。
※ただし今回は、ESXi 自身をインストールするディスク領域は持たせています。

 試せていませんが、ステートレスのAutoDeployと組み合わせれば

 ESXi のインストール領域も不要かもしれません。


最初は 2台のESXi でVSANクラスタを構築しています。

vsan_add_node1.png

 

このクラスタに、3台目のESXi(データストア用SSDなし)を追加します。
クラスタ内のESXi は3台になりますが、3台目はデータディスクをもっていません。

※vCenter5.5 & WebClient 5.5 なので、ESXi のドラッグ&ドロップでクラスタに追加してみました。
vsan_add_node2.png

 

クラスタにESXi が追加されましたが、

このESXi には、VSANで使用するためのローカルディスクがありません。

vsan_add_node3.png

 

しかし、クラスタに追加した3台目のESXi ホストも、

VSANの分散データストア(vsanDatastore)に接続できるようになっています。

vsan_add_node4.png

 

3台目のESXi の追加前、追加後のVSANクラスタのリソースを比較してみます。

今回のESXi のスペック は、1台あたり CPUは6.8GHz弱(約3.4GHz x 2コア)、メモリは4GBです。

 

ESXi 追加前のCPUリソース

この時点では、このクラスタはESXi 2台分のリソースを持っています。

vsan_add_node5-0.png

 

ESXi 追加前のCPUリソース

ESXi の追加により、このクラスタはESXi 3台分のリソースを持ちました。

CPU容量とメモリ容量にはESXi 1台分のリソースが追加されましたが、

VSAN用ディスクを持たないESXi を追加してみたので、期待通り
ストレージ(データストア)の容量はほぼ変わっていません。(認識の都合か、若干増加しました)
vsan_add_node5-1.png


3台目のESXi でもデータストアが本当に利用できるか、

ためしに、VM を vMotion で移動してみました。

 

1台目のESXi で稼働しているVMを・・・
vsan_add_node6-1.png

 

追加したESXi にvMotionしてみました。

vMotion での移行先は、VSAN用ディスクをもたないESXi です。

※残念ながら、vMotion はドラッグ&ドロップではできませんでした。
vsan_add_node6-2.png

vMotion 中・・・

vsan_add_node6-3.png

 

vMotion が完了し、ちゃんと 3台目のESXiでもVMが稼働しています。
vsan_add_node6-4.png

 

以上、VSANクラスタへのデータディスクなしESXi の追加でした。

以前にESXi 5.x で 普通のHDD をSSD に見せかける方法をポストしました。


しかし下記の記事によれば、ネステッドESXi で なんちゃってSSD をやりたい場合は
もっといい方法があるそうです。

virtuallyGhetto
Emulating an SSD Virtual Disk in a VMware Environment
http://www.virtuallyghetto.com/2013/07/emulating-ssd-virtual-disk-in-vmware.html#sthash.6UTetKIX.dpuf

 

そこで、さっそく試してみました。
ネステッドESXi の VM に対して、下記の設定をします。

  1. 仮想マシンバージョン を 8 以上 にする。(ESXi 5.x はデフォルトで 8以上)
  2. 仮想ディスクに関する、下記の構成パラメータを設定する。
    scsiX:Y.virtualSSD = 1

 

たとえば、下記の画面のように
SCSI(0:2) に接続された仮想ディスクをSSDに見せるのであれば、
nesxi_ssd1.png

「scsi0:2.virtualSSD = 1 」と設定します。

※デフォルトでは表示されていないパラメータなので、「行の追加」で入力します。
nesxi_ssd2.png

ネステッドESXi のVMを起動すると、

「SCSI 0:2」 に相当するデバイスが SSD として認識されていました。

nesxi_ssd3.png

 

これは、仮想ディスクのVPD(Vital Product Dataの略で、製品情報のこと。)
の一部を書き換えることでSSDに見せかけているそうです。

本来であれば、ディスクの回転数を示すフィールドを
「回転しないストレージデバイス」(たとえばSSDみたいな)とすることで

実現しているみたいです。

 

前回の、SATP(ストレージ アレイ タイプ プラグイン)のルールを設定する方法と

今回の構成パラメータ(VMXパラメータ)で設定する方法を比較してみました。

NestedESXi_SSD.png

SATPルールで設定する方法 は、
一度ネステッドESXi 側でVMDKファイルを仮想ディスクとして認識してから
ストレージデバイスの特性を決めるルールでSSDに見せかけます。


SATPルールで設定する場合のコマンドライン

~ # esxcli storage nmp satp rule add --satp VMW_SATP_LOCAL --device mpx.vmhba1:C0:T2:L0 --option=enable_ssd

~ # esxcli storage core claiming reclaim -d mpx.vmhba1:C0:T2:L0

 

一方、構成パラメータで設定する方法 は、
ネステッドESXi に対して、VMDKファイルをそのままSSDとして認識させます。

 

並べてみると、詳細な内部動作まではわかりませんが
SATP よりも scsiX:Y.virtualSSD での設定の方が
簡単、かつネステッドESXi からSSDっぽく見えそうな気がします。

 

以上、ネステッドESXi になんちゃってSSDを見せる方法でした。

vSphere 5.5 から登場した、VSANを試してみました。

 

ただし、VSANは現在まだテクニカルプレビューという位置づけで、

ベータプログラムが実施されています。

 

VSANを有効化するときは、クラスタで「仮想SAN」をオンにします。

 

「ストレージへのディスクの追加」は、

「自動」にしておくとESXi をVSANクラスタに追加したときにディスクがVSANで使われるようになります。

最初は「手動」にしておいた方が、VSANの仕組みを理解しやすいかもしれません。

vsan_beta1.png

 

VSANを使用するには、現時点ではベータプログラムに参加してVSAN評価用のキーを入手して、クラスタに対して適用します。

適用すると、「ライセンスキー」(下記の空欄の赤枠のところ)にキーが表示されます。

vsan_beta2.png

 

VSAN用の通信で、VMkernel ポートを使用します。

これは、vmkポートのプロパティで「仮想 SAN トラフィック」にチェックを付けると設定できます。

vMotionやFTログのトラフィックと同様、他の通信と同じvmkポートを使用することもできます。

vsan_beta3.png

 

VSANはESXi 3台以上で構成する必要があるらしいですが、

一応、2台のクラスタでも動作しました。

 

「ストレージへのディスクの追加」を「手動」にしている場合は、

「ディスク管理」 → 「ディスクの要求」ボタン から

VSANのディスクグループにディスク(非SSDのSASやSATAディスクや、SSD)を登録することができます。

 

ボタンをクリックして・・・

vsan_beta4.png

 

VSANで使用するディスクにチェックを入れます。

※SSDは容量が小さいと受け付けてもらえませんでした。

 128MBや512MBくらいだとNGでしたが、4GBにしたところOKでした。

 ネステッドESXi(ESXi 5.1 のVMとして ESXi 5.5 を起動)環境で試しているため、

 今回の検証で使っているSSDは、実はVMDKファイルです。

vsan_beta5.png

 

ディスクが、VSANのディスクグループに追加されました。

vsan_beta6.png

ストレージのインベントリ画面に、

VSANのデータストア(デフォルトだと「vsanDatastore」)が表示されました。

容量は、VSANに使用する「データ ディスク」(キャッシュ用途のSSDではないディスク)の合計容量です。

いくらか管理のために容量を取られます。

vsan_beta7.png

ためしに新規VMを作成してみると、

下記のように「ストレージの選択」画面で VSANのデータストアを選択することができます。

そしてデータストアの「アクセス」欄を見ると「複数のホスト」になっていて、

共有データストアであることがわかります。

 

画面の上の方にある「仮想マシン ストレージ ポリシー」をあらかじめ作成しておき、

ここで選択することでVMDKの冗長性や領域確保ができるようです。

(こちらはまだ試していません・・・)

vsan_beta8.png

以上です。VSANを試してみた話でした。

最近の vSphere の新機能では、SSD を前提としたものがいくつかあり、
たとえば、vSphere 5.5 からの新機能「VSAN(Virtual SAN)」でも SSD を必要とします。

 

しかし、ちょっと動作検証をしたいときにSSDを用意するのは、
結構ハードルが高いと思います。

 

そこで、
SSDではないハードディスク(SATA/SASなど)をSSDに見せかけて
使用する方法を試してみました。


今回試したESXiのバージョンは、ESXi 5.5 です。

~ # vmware -v
VMware ESXi 5.5.0 build-1331820

 

まず、WebClientからみると このESXiは非SSDだけを持っています。
しかもこれはネステッドESXiなので、
実際はVMDK(Local VMware Disk)ファイルです。

 

今回は、ここに表示されている 「mpx.vmhba1:C0:T2:L0」 を SSD に見せかけてみます。
hdd_ssd1.png

 

まず、SSH で ESXi に直接ログインして、
これから SSD に見せかける HDD の状態を確認します。
まだ 非SSD です。

~ # esxcli storage core device list -d mpx.vmhba1:C0:T2:L0 | grep SSD
   Is SSD: false

 

SATP要求ルール(ストレージデバイスの特性を設定できるもの)の設定で、
HDD を SSD に見せかける設定をします。
ちなみに SATP とは、正式には Storage Array Type Plugin とよばれる
ESXiを色々なストレージに対応させるためのモジュールです。

オプションに「enable_ssd」とつけることで、SSDとしてタグ付けできます。

~ # esxcli storage nmp satp rule add --satp VMW_SATP_LOCAL --device mpx.vmhba1:C0:T2:L0 --option=enable_ssd
~ # esxcli storage core claiming reclaim -d mpx.vmhba1:C0:T2:L0

 

さきほどと同様に確認すると、SSD として認識するようになりました。

~ # esxcli storage core device list -d mpx.vmhba1:C0:T2:L0 | grep SSD
   Is SSD: true

 

Web Client からも、画面を更新するとSSDとして認識するようになっています。

hdd_ssd2.png

 

SSD に見せかけているだけなので、性能がUPするわけではありませんが、
これで 普通の HDD で SSD 必須の機能が試せるようになるので便利です。

(しかもネステッドESXiでもOK)

 

この記事は下記を参考にしました。

 

virtuallyGhetto
How to Trick ESXi 5 in seeing an SSD Datastore
http://www.virtuallyghetto.com/2011/07/how-to-trick-esxi-5-in-seeing-ssd.html

 

ESXi および vCenter Server 5.5 のドキュメント > vSphere ストレージ > SSD の有効化
デバイスに SSD とタグ付け
http://pubs.vmware.com/vsphere-55/topic/com.vmware.vsphere.storage.doc/GUID-99BB81AC-5342-45E5-BF67-8D43647FAD31.html

 

KB#2013188: Enabling the SSD option on SSD based disks/LUNs that are not detected as SSD by default
http://kb.vmware.com/kb/2013188


以上、HDDをSSDに見せかける方法でした。

前回 vSphere HA + Guest SDK でのアプリケーション監視についてポストしました。

 

今回は、ためしに Guest SDK に含まれるコマンド「vmware-appmonitor」で、

Apache HTTP Server (httpd) をアプリケーション監視してみます。

ちなみに試したのは、vSphere 5.1 環境です。

 

今回の監視対象プロセスは、この httpd です。

[root@vm01 ~]# ps ax | grep httpd | grep -v grep

1626 ?        Ss     0:00 /usr/sbin/httpd

1628 ?        S      0:00 /usr/sbin/httpd

1629 ?        S      0:00 /usr/sbin/httpd

1630 ?        S      0:00 /usr/sbin/httpd

1631 ?        S      0:00 /usr/sbin/httpd

1632 ?        S      0:00 /usr/sbin/httpd

1633 ?        S      0:00 /usr/sbin/httpd

1634 ?        S      0:00 /usr/sbin/httpd

1635 ?        S      0:00 /usr/sbin/httpd

 

まず、簡単な監視スクリプトを作ってみました。

 

★アプリケーション監視を開始するスクリプト

 

vSphereHA_app_check_start.sh

#!/bin/sh

PROCESS_NAME=$1
INTERVAL=$2

[ "$#" -lt 2 ] && { echo 'no args.' ; exit 1 ; }

 

SDK_HOME_DIR=/opt/vmw/GuestSDK
SDK_LIB_DIR=${SDK_HOME_DIR}/lib/lib64
SDK_BIN_DIR=${SDK_HOME_DIR}/bin/bin64
START_SCRIPT_NAME=vSphereHA_app_check_start.sh

 

export LD_LIBRARY_PATH=${SDK_LIB_DIR}:${LD_LIBRARY_PATH}

 

# Start Monitoring.
${SDK_BIN_DIR}/vmware-appmonitor enable

 

while :
do
    ps ax | grep ${PROCESS_NAME} | grep -v -e grep -e ${START_SCRIPT_NAME} 1> /dev/null
    [ $? -eq 0 ] && ${SDK_BIN_DIR}/vmware-appmonitor markActive
    sleep ${INTERVAL}
done

 

★アプリケーション監視を停止するスクリプト

 

vSphereHA_app_check_stop.sh

#!/bin/sh

SDK_HOME_DIR=/opt/vmw/GuestSDK
SDK_LIB_DIR=${SDK_HOME_DIR}/lib/lib64
SDK_BIN_DIR=${SDK_HOME_DIR}/bin/bin64
START_SCRIPT_NAME=vSphereHA_app_check_start.sh

 

export LD_LIBRARY_PATH=${SDK_LIB_DIR}:${LD_LIBRARY_PATH}

 

# Stop Monitoring.
${SDK_BIN_DIR}/vmware-appmonitor disable

ps awx | grep ${START_SCRIPT_NAME} | grep -v grep | awk '{print $1}' | while read PID
do
    echo "Stop process: ${PID}"
    kill ${PID}
done

 

それでは、アプリケーションの監視をしてみます。

 

★アプリケーション監視を開始

上記の開始スクリプトに実行権限を付けた上で、下記のように実行します。

※監視間隔の秒数は、vSphere HA の監視感度よりも短くしておきます。

# chmod +x ./vSphereHA_app_check_start.sh  ★スクリプトファイルに実行権限つける。

# ./vSphereHA_app_check_start.sh <監視するプロセス名> <監視間隔(秒)>

 

実際にスクリプトを実行すると、下記のようになります。

スクリプトをバックグラウンドで実行するため、「&」を付けています。

[root@vm01 ~]# ./vSphereHA_app_check_start.sh httpd 10 &
[1] 23715

監視が開始され、

イベントに、「~ アプリケーションハードビートのステータスの緑への変更 ~」と表示されます。
ha_app1.png

 

★アプリケーション監視を終了

開始スクリプト同様、実行権限を付けた上で実行します。

こちらは、スクリプトの引数なしです。

[root@vm01 ~]# ./vSphereHA_app_check_stop.sh
Stop process: 23715

 

監視がOFFになり、

イベントに、「~ アプリケーションハードビートのステータスの灰色への変更 ~」と表示されます。
ha_app2.png

 

★障害を起こしてみると・・・

 

上記の要領で、アプリケーションの監視を開始してから httpd を停止すると

・・・ vSphere HA により VM がリセットされます。

[root@vm01 ~]# pkill httpd
→少し待つとアプリケーション障害が検知されて vSphereHA によりVMがリセットされる!

 

ちゃんと、vSphere HA に障害検知されて、VM がリセット(Power OFF → ON)されました。

ha_app3.png


「うちのチームしか使っていない文書管理システム」みたいな、高いサービスレベルを求められない VM であれば
Guest SDK が十分に使えそうな気がしました。

 

以上、Guest SDK での vSphere HA アプリケーション監視でした。

vSphere HA では、ESXi と VM の障害を検知して、VM を他のホストで自動的に再起動してくれます。

 

さらに vSphere HA では、VM で稼働しているゲスト OS 上の障害を検知することも可能です。

ただし、この設定でアプリケーションの障害を検知するためには、
vSphere HA のアプリケーション障害検知に対応しているサードパーティのソフトウェアを利用するか、

「VMware Guest SDK」での作りこみが必要になります。

 

この「VMware Guest SDK」を使用して、vSphere 5.1 環境で
ためしに簡易的なアプリケーション監視 HA を作動させてみました。

利用したバージョンは VMware Guest SDK 9.4.0 です。

 

ちなみに、今回のゲスト OS は 64bit の Red Hat 互換 の Linux です。

[root@vm01 ~]# cat /etc/oracle-release

Oracle Linux Server release 6.2

[root@vm01 ~]# uname -a

Linux vm01 2.6.32-300.3.1.el6uek.x86_64 #1 SMP Fri Dec 9 18:57:35 EST 2011 x86_64 x86_64 x86_64 GNU/Linux

    


1. まず、vSphere HA クラスタを作成します。
guest_ha0.png

 

2. HA クラスタの設定で、アプリケーションの監視を有効にします。
vSphere HA の設定で「仮想マシンとアプリケーションの監視」を選択します。
guest_ha1.png

 

3. VMware の Webサイト(MyVMware)から、Guest SDK をダウンロードします。
今回は、「vSphere Guest SDK for Linux」を使います。
ファイル名は、 VMware-GuestSDK-9.4.0-1280544.tar.gz です。

 

4. ゲストOSの適当な場所にGuest SDK を配置します。
今回は、/opt/vmw ディレクトリを作成し、その配下にファイルを解凍します。

[root@vm01 ~]# mkdir /opt/vmw
[root@vm01 ~]# cd /opt/vmw
[root@vm01 vmw]# tar zxf /root/VMware-GuestSDK-9.4.0-1280544.tar.gz
[root@vm01 vmw]# ls
GuestSDK
[root@vm01 vmw]# ls GuestSDK/
bin  docs  include  lib  vmGuestLibJava

    

 

5. 環境変数を設定します。
ライブラリを読み込めるように、環境変数(LD_LIBRARY_PATH)を設定します。
今回は、64bit のLinux を使用しています。(32bit の場合は、末尾が lib32 になります。)
LD_LIBRARY_PATH を設定した後に、vmware-appmonitor を実行すると、使用方法が表示されます。

[root@vm01 ~]# export LD_LIBRARY_PATH=/opt/vmw/GuestSDK/lib/lib64:$LD_LIBRARY_PATH

[root@vm01 ~]# /opt/vmw/GuestSDK/bin/bin64/vmware-appmonitor

Usage: /opt/vmw/GuestSDK/bin/bin64/vmware-appmonitor {enable | disable | markActive | isEnabled | getAppStatus | postAppState [appStateOk|appStateNeedReset]}

    

 

6. vmware-appmonitor でアプリケーション監視を有効にします。

Guest SDK に含まれる vmware-appmonitor で、監視を有効化します。

[root@vm01 ~]# cd /opt/vmw/GuestSDK/bin/bin64/
[root@vm01 bin64]# ./vmware-appmonitor isEnabled
false ★まだ無効
[root@vm01 bin64]# ./vmware-appmonitor enable
[root@vm01 bin64]# ./vmware-appmonitor isEnabled
true  ★有効になった→このままだと数秒後にVMが再起動するので要注意。

    

有効化すると、vSphere Client のイベント画面に

「ステータスの緑への変更~」と表示されます。

guest_ha2.png

 

7. 定期的に、アプリケーションの正常性を vSphere HA に伝えます。
「vmware-appmonitor markActive」と実行すると、
vSphere HA にアプリケーションが正常であることを伝えられます。

  • 逆に「vmware-appmonitor enable」実行後は、なにもしないと 障害検知して VM がリセットされてしまいます
  • この間隔を HA クラスタの「監視感度」設定よりも短くします。
  • 実際は、別のアプリケーション監視コマンド等の結果をもとに、このコマンドを実行することになります。


ためしに 10秒ごとに markActive を実行して「アプリケーションが無事」と伝え続けます。

[root@vm01 bin64]# while : ; do ./vmware-appmonitor markActive; sleep 10; done

    

これを Ctrl+C で停止すると、下記のイベントが検知されて、数秒後に VM が再起動されます。
guest_ha3.png

 

「アラーム」タブでも「vSphere HA の仮想マシン監視アクション」がトリガーされています。

これは 右クリック→「クリア」 で消すことができます。

guest_ha4.png

 

ちなみに vSphere 5.5 では、新たに App HA というアプリケーション監視ソリューションも提供されています。

(しかし App HA は vSphere 6.0 で消えてしまいました)

 

つづきはこちら

 

以上、vSphere HA + GuestSDK のアプリケーション監視機能についてでした。