ESXi


ESXi関連のメモ帳

 本番サーバ環境

  • CPU Intel Xeon X3440
  • HP ML110 G6
  • Memory DDR3 ECC 1333 4GB x4
  • NIC Card Mellanox MHQH29B-XTR(Port2 10GbEモード) + Intel 1000CT Desktop Adapter+ OnBoard HP NC107i
  • Infiniband Card Mellanox MHQH29B-XTR(Port1 IBモード,Port2 ethモード)
  • データストアはOpenIndianaのSRP Targetに接続している。

 乗っけてるOS

  • Windows 2008 R2 x 2
  • FreeBSD 8.2 x64
  • Ubuntu 10.04 LTS Server x64
  • NexentaCore 3.01
  • Solaris 11 Express
  • Debian sid 32bit x 2

 テスト環境

  • CPU Intel Xeon E-1235
  • SuperMicro X9SCM-F (Bios 1.10)
  • Memory DDR3 ECC 1333 4GB x4
  • NIC Card OnBoard Intel 82954L + Intel 82959L(標準のドライバでは認識せず)
  • Infiniband Card Mellanox MHQH29B-XTR/MHGH28-XTC/MHGH29-XTC/MHEA28-XTC/MHEA28-XTC/MHGS18-XTC

(InfiniBandカードは検証で色々変更中)

  • ESXi 4.1u2だったり、ESXi 5.0だったり色々と変更して検証中。

上記テスト環境で動いたカード

  • IBM M1015(LSI 9220-8i) RAIDモード(RAID0のVDEVだったら普通に動いた) StrageAdapterとして4.1u2は特にドライバの変更無く動作。5.0だとドライバいれても認識せず。
  • IBM M1015(LSI 9210-8i) HBAモード StrageAdapterとして標準ドライバで認識。しかし、PX-128M2Pを複数台接続すると、PX-128M2PがWNN持っていない為に一台しか認識せず。(厳密には認識しているんだけど、4台ともWWNが有効な為にmultipathとして認識される為一台しかストレージデバイスでは見えない)。5.0だとドライバ入ってても見えないと言う状況。5.0はOEM物に対して制限きつくなってる?
  • Adaptec ASR-6445 2011/12に新ファームが出たので嬉々として入れ替えたら、ドライブを一台しか認識しない状態に。PX-128M2Pが対応してくれないと駄目ね。(OS関係無くなので、テスト出来ず) 後日一台だけの接続でチェックはしてみる予定
  • Adaptec ASR-6405E こちらもファームの最新がでてるけど、借り物の為設定変更を行わずにテスト。4.1u2だと正常に動作。ただ、正規のESXiドライバが出てないのでESX用のドライバCDのoffline-bundleフォルダの中身を取り出して、「vihostupdate」を使用してアップデート。5.0はまだ未検証(Adaptecに対応ドライバはあり)。
  • Adaptec ASR-5405 借り物だけど、ASR-6405Eと同じようにESX用のドライバを利用して検証したが、特に問題なく動作。5.0はまだ未検証(Adaptechに対応ドライバはあり)。

 InfiniBand設定

  • Mellanoxからドライバ落としてきて入れるだけだが、ドライバのインストール順に注意。ESXi 4.1u1での場合はパッチ適用後にドライバをインストールするとイントールに失敗する(他のバージョンでは未検証) 後日パッチが提供された模様。
  • ConnextXの場合はドライバインストール後のデフォルト起動はethになっている為、esxiへsshで接続かサービスコンソールでログインし、
# esxcfg-module -s 'port_type_default=1' mlx4_en       #設定
# esxcfg-module -g mlx4_en                                        #確認
mlx4_en enabled = 1 options = 'port_type_default=1'

で、各ポートの初期値をibへ変更・確認し再起動。

  • ConnectX 2のDual PortカードでPort2をethとして使用する設定
# esxcfg-module -s 'port_types=1,1,1,1,2,2' mlx4_en

1,1,1,1,2,2の内訳は、最初の1はPCIのポート番号、二番目の1はカードのポート1、三番目の1はibの指定の1、四番目の1はPCIのポート番号、五番目の2はカードのポート2、六番目の2はeth指定の2となる。
PCIのポート番号は、lspciコマンドで出てくるのでそれを指定。
うちだと、こんな表示になる。

000:001:00.0 Serial bus controller: Mellanox Technologies MT26428 [ConnectX VPI - 10GigE / IB QDR, PCIe 2.0 5GT/s] [vmnic1.p1]
  • うちの設定(MHQH19-XTC・InfiniHost系用)
~ # esxcfg-module  -g mlx4_en
mlx4_en enabled = 1 options = 'num_eq=4 port_type_default=1 rx_ring_size=512 tx_ring_size=512 set_4k_mtu=1 skb_heap_max=36000000'

~ # esxcfg-module  -g ib_basic
ib_basic enabled = 1 options = 'mthca_msi_x=1 skb_heap_max=36000000'

~ # esxcfg-module  -g ib_ipoib
ib_ipoib enabled = 1 options = 'ipoib_netqueue=1 ipoib_recvq_size=1024 ipoib_rx_ring_num=8 ipoib_sendq_size=1024 skb_heap_max=36000000 '

~ # esxcfg-module  -g ib_srp
ib_srp enabled = 1 options = 'dead_state_time=5 heap_max=36000000 srp_can_queue=32 srp_cmd_per_lun=16'
  • うちの設定(MHQH29B-XTR用)
~ # esxcfg-module -g mlx4_en
mlx4_en enabled = 1 options = 'port_types=1,1,1,1,2,2 num_eq=2 port_type_default=1 rx_ring_size=512 tx_ring_size=512 set_4k_mtu=1 heap_max=536870912 log_rdmarc_per_qp=7 log_num_cq=13 log_num_mtt=20 log_num_mpt=17 log_num_mcg=13'

~ # esxcfg-module -g ib_basic
ib_basic enabled = 1 options = 'skb_heap_max=36000000'

~ # esxcfg-module -g ib_ipoib
ib_ipoib enabled = 1 options = 'ipoib_netqueue=1 ipoib_rx_ring_num=2 ipoib_uplink_num=2 ipoib_recvq_size=1024 ipoib_sendq_size=1024 skb_heap_max=36000000'

~ # esxcfg-module -g ib_srp
ib_srp enabled = 1 options = 'dead_state_time=60 heap_max=36000000 srp_can_queue=32 srp_cmd_per_lun=16'

 IPoIBでのNICチーミングテスト

単純なフェイルオーバーをテストしてみた。
設定は画像参照

切り替わりに15秒くらいかかる模様。

 コマンドラインから設定する項目

モジュールのオプション設定

~ # esxcfg-module -i myri10ge
esxcfg-module module information
 input file: /usr/lib/vmware/vmkmod/myri10ge.o
 License: Dual BSD/GPL
 Version:
 Name-space:
 Required name-spaces:
  com.vmware.vmkapi@v1_1_0_0
 Parameters:
  heap_initial: int
   Initial heap size allocated for the driver.
  heap_max: int
   Maximum attainable heap size for the driver.
  myri10ge_adapt_big_thresh: int
   Bulk latency limit, in bytes per second
  myri10ge_adapt_med_thresh: int
   Low latency limit, in bytes per second
  myri10ge_allow_degraded_pcie: int
   Allow degraded pcie
  myri10ge_bus: array of int
   Only consider devices on these PCI buses
  myri10ge_dca: int
   Enable DCA if possible
  myri10ge_deassert_wait: int
   Wait when deasserting legacy interrupts
  myri10ge_debug: int
   Debug level (0=none,...,16=all)
  myri10ge_ecrc_enable: int
   Enable Extended CRC on PCI-E
  myri10ge_esx_autotune: int
   Autotune buffers/rings on ESX; overrides myri10ge_{small_bytes,max_slices,skb_limit}
  myri10ge_fill_thresh: int
   Number of empty rx slots allowed
  myri10ge_flow_control: int
   Pause parameter
  myri10ge_force_firmware: int
   Force firmware to assume aligned completions
  myri10ge_force_nvidia_msi: int
   Enable MSI on Nvidia chipset
  myri10ge_fw_name: charp
   Firmware image name
  myri10ge_initial_mtu: int
   Initial MTU
  myri10ge_intr_coal_delay: int
   Interrupt coalescing delay
  myri10ge_lro: int
   Enable large receive offload
  myri10ge_lro_max_pkts: int
   Number of LRO packets to be aggregated
  myri10ge_mac: charp
   Only consider device with this MAC
  myri10ge_max_irq_loops: int
   Set stuck legacy IRQ detection threshold
  myri10ge_max_slices: int
   Max tx/rx queues
  myri10ge_msi: int
   Enable Message Signalled Interrupts
  myri10ge_napi_weight: int
   Set NAPI weight
  myri10ge_reset_recover: int
   Number of recoveries allowed from NIC hw reset
  myri10ge_rss_hash: int
   Type of RSS hashing to do
  myri10ge_rx_skbs: int
   Receive into skbs rather than pages
  myri10ge_skb_limit: int
   Max # of big skbs to alloc
  myri10ge_small_bytes: int
   Threshold of small packets
  myri10ge_tso6: int
   Enable TSO for IPv6
  myri10ge_tx_hash: int
   Type of TX hashing to do
  myri10ge_vlan_csum_fixup: int
   Force VLAN Checksum fixup
  myri10ge_watchdog_timeout: int
   Set watchdog timeout
  skb_heap_initial: int
   Initial private socket buffer heap size allocated for the driver.
  skb_heap_max: int
   Maximum attainable private socket buffer heap size for the driver.
~ # esxcfg-module -s 'myri10ge_esx_autotune=1 myri10ge_initial_mtu=9000 myri10ge_lro=1 myri10ge_tso6=1' myri10ge
~ # esxcfg-module -g myri10ge
myri10ge enabled = 1 options = 'myri10ge_esx_autotune=1 myri10ge_initial_mtu=9000 myri10ge_lro=1 myri10ge_tso6=1'

vmknicの設定

~ # esxcfg-vmknic -l
Interface  Port Group/DVPort   IP Family IP Address                              Netmask         Broadcast       MAC Address       MTU     TSO MSS   Enabled Type
vmk0       Management Network  IPv4      192.168.11.52                           255.255.255.0   192.168.11.255  00:25:90:73:85:62 1500    65535     true    STATIC
vmk1       VMkernel            IPv4      192.168.17.52                           255.255.255.0   192.168.17.255  00:50:56:70:86:6c 9000    65535     true    STATIC
~ # esxcfg-vmknic -m 9000 "Management Network"
[2012-11-28 15:06:00 'NotifyDCUI' warning] Notifying the DCUI of configuration change
~ # esxcfg-vmknic -l
Interface  Port Group/DVPort   IP Family IP Address                              Netmask         Broadcast       MAC Address       MTU     TSO MSS   Enabled Type
vmk1       VMkernel            IPv4      192.168.17.52                           255.255.255.0   192.168.17.255  00:50:56:70:86:6c 9000    65535     true    STATIC
vmk0       Management Network  IPv4      192.168.11.52                           255.255.255.0   192.168.11.255  00:25:90:73:85:62 9000    65535     true    STATIC

vswitchの設定


 コンソールからデータストアを追加する方法

vSphere Client立ち上げるのがめんどーって場合に。
基本的にLinuxとかと似たような流れ。
fdisk -> ファイルシステムフォーマット
ESXiのコンソールで追加したディスクを再スキャン

# esxcfg-rescan --all

追加されてるか確認

# ls -l  /dev/disks

追加されてたら、fdiskでVMFS(0xfb)パーティション作成

# fdisk  /dev/disks/naa.600144f071d8c30000004e2f97310006

フォーマット

# vmkfstools -C vmfs3 -b 8M -S data  /vmfs/devices/disks/naa.600144f071d8c30000004e2f97310006:1

で、追加完了。

 vmのディスクイメージのコピー

vmkfstoolを使って作業する。普通にcpでコピーするよりも大分高速です。

~ # vmkfstools -i /vmfs/volumes/data/vSphere\ Management\ Assistant\ \(vM/hoge.vmdk /vmfs/volumes/移行先データストア/fuga.vmdk

上記vmのディスクイメージのコピーした後の処理

thickでコピーされるのでvmkfstoolを使ってthinへ変換する。

~ # vmkfstools -i /vmfs/volumes/移行先データストア/fuga.vmdk -d /vmfs/volumes/移行先データストア/fuga-thin.vmdk

上記vmのディスクイメージのコピーを同時に実行する

thickでコピーされるのでvmkfstoolで指定してthinへ変換する。

 ~ # vmkfstools -i /vmfs/volumes/data/vSphere\ Management\ Assistant\ \(vM/hoge.vmdk -d thin /vmfs/volumes/移行先データストア/fuga.vmdk

 物理LANインターフェイスをLACPで統合

10GbEに変更したので使わず。

 仮想マシンのVLANを使用してLANを分離する

VMWareでは、以下の種類のVLANがある。
今回、こちらで使用してるのは、VGTを利用してる。
WindowsVMだと、VLAN毎にInterfaceが増えるのでちょっとだるい気が。
まぁ、実機でも一緒だけどね。

  • EST (External Switch Tagging)

おおざっぱに言うとネットワークごとにNICを分けるタイプ。

  • VST (Virtual Switch Tagging)

NICの先に802.1qが使えるL2またはL3スイッチを使って、仮想スイッチにポートグループを作成して、ポートグループにVLANタグをつける。

  • VGT (Virtual Guest Tagging)

NICの先に802.1qが使えるL2またはL3スイッチを使い、仮想スイッチでは何もせず、仮想マシンへVLANタグをつけたまま送り、仮想マシンでVLANタグを判別する。
ポートグループのVLAN-IDは4095を設定する。

 ESXi5でのドライバ追加・パッチ適用

ここら辺から必要なドライバをダウンロード
中のvibファイルを、ESXi5のデータストアなりにscpでコピー。
sshでコンソールログインして、vibなら以下のコマンドを実行

# esxcli software vib install -v /tmp/scsi-megaraid-sas-5.34-1vmw.500.0.0.406165.x86_64.vib

パッチなら以下のコマンド

# esxcli software vib install -d /vmfs/volumes/data1/vmware-data/ESXi500-201111001.zip

 データストアに8kセクタを指定してみた

結果は駄目。
ストレージの追加中に以下のメッセージがでて追加できませんでした。

現状では512バイトセクタしか対応していないみたいです。