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カードは検証で色々変更中)
上記テスト環境で動いたカード
- 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バイトセクタしか対応していないみたいです。