vmk疎通不能時のリストア方法についてまとめます。VSS(標準仮想スイッチ)やVDS(分散仮想スイッチ)の設定誤りによってvCenterやvmkへの疎通不能の事故はよくある話です。また、ESXiと接続されるネットワーク機器について、ESXi側かネットワーク機器側のどちらでタグをつけるかの認識相違による事故もよくある話です。このページでは、このような疎通不能事故に冷静に対応できる手法をまとめます。
リモート環境の疎通不能は心理的に焦るものがありますので、今すぐ復旧できる環境にて「わざと間違った設定を入れる」練習をしておくことをオススメします。
ネットワーク設定のロールバック
ロールバックの動作確認
ESXiはvmkへの疎通不能が生じると、一定時間後に設定がロールバックされます。ロールバックが発生する条件は「vSphere ネットワーク ロールバック」を参照ください。
動作確認のため、vmkへ疎通不能となるようなポートグループの設定誤りを投入します。すると、タスクが75%くらいで止まります。
「操作が完了できません」とのメッセージが出力されます。このような場合は、一定時間後にロールバックが実行され、疎通が回復します。
ロールバックの無効化
場合によってはロールバックを無効化したい事もあるかもしれません。例えば、ESXiを設定変更した後に、ネットワーク機器を操作するようなシナリオです。このような場合は、ESXiを設定変更した後に疎通不能になるのは意図した挙動ですので、一時的にロールバックを無効にするのも操作例のひとつになります。
ロールバックを無効にするには、「vCenter名」「設定」「詳細設定」「設定の編集」の順に押下します。
「config.vpxd.network.rollback」を「false」に変更し、「保存」を押下します。
DCUI経由の復旧
VDS(分散仮想スイッチ)のバックアップおよびリストアの有名な方法は「vSphere Distributed Switch 構成のバックアップとリストア」で紹介されるようなvCenter経由での操作です。しかし、vmkすら疎通できない状況になれば、iLOやiDRACのようなコンソール経由での復旧が必要です。以下、コンソール経由の復旧方法をまとめます。
Restore Network Settings
DCUI(ダイレクト コンソール ユーザ インターフェース)経由での復旧も可能です。この操作をすると、VSS(標準仮想スイッチ)とvmkが1つずつ作成されます。
コンソール接続し「F2」押下で以下画面を表示させます。その後、「Network Restore Option」を選びます。
「Restore Network Settings」を選びます。
「Restore Standard Switch」「Restore vDS」はvCenterでVDS(分散仮想スイッチ)を作成している場合のみ表示されるメニューです。
「F11」で設定を反映させます。
Restore vDS
DCUI(ダイレクト コンソール ユーザ インターフェース)経由の操作で、「Restore Standard Switch」または「Restore vDS」を選ぶと、作成済のVSSまたはVDSに対してmvkを付与することができます。
コンソール接続し「F2」押下で以下画面を表示させます。その後、「Network Restore Option」を選びます。
「Restore vDS」を選びます。
「Select vDS uplinks」を選びます。
アップリンクをスペースキーで選んで、エンターでOKです。
「アップリンク 1」のような日本語デフォルト設定のアップリンク名の場合は文字化けします。文字化けを避けるならば英名を使用ください。
「Please enter a valid VLAN ID (1-4096)」にVLAN IDを入力します。「0」を入力した場合は、VLANタグなしです。その後、「F11」押下で設定反映です。
再確認の画面です。エンターで設定反映です。
シェルコンソールを用いたバックアップ
リストア操作を試みる前に、ESXiがどのような状態になっていたかの記録を残したいと思うこともあるかもしれません。そのような場合は、シェルコンソールを使うとよいでしょう。
シェルコンソールを使用するためには、予めTMS(ESXi Shell)を有効にする必要があります。ESXiへhttpsでログインし、TMSを起動し、さらに自動起動を有効にします。
ヴイエムウェア社はセキュリティ上の理由によりTMS-SSHおよびTSMを無効化することを推奨しています。セキュリティ周りの設定は政治層や宗教層への影響を慎重に考える必要がありますので、このサイトで紹介する手法が顧客に受け入れられるかは、顧客文化に大きく依存します。
以下の画面で「Alt + F11」を押下します。すると、シェルコンソールの画面に切り替わります。
シェルコンソールへのログイン後、コマンドライン操作が可能です。
TSM無効の場合は、ログインコンソールが現れません。
「esxcfg-vswitch -l」「esxcfg-vmknic -l」でvSwtichとvmkを設定が標準出力されます。これのスクリーンショットを収めることで設定のバックアップとなるでしょう。
esxcfg-vswitch -l esxcfg-vmknic -l
もし、1画面に収まらないならば、ファイル出力しておけばネットワークの復旧後に、復旧前の設定を追跡することができます。
esxcfg-vswitch -l > /tmp/vswitch.txt esxcfg-vmknic -l > /tmp/vmknic.txt
vmkの手動復旧
設定誤りの復旧は、可能な限り、自動のロールバックに任せた方が良いでしょう。しかし、状況をよく確認せずに、ESXi設定誤り後にvCenterやネットワーク機器まで変更してしまい収集がつかない状況に遭遇することもあるかもしれません。
そんな状況に備え、コマンドラインでvmkを任意のポートグループに付与する復旧手法を紹介します。想定される障害シナリオとしては、vCenterがESXiより先に移行してしまい、なんとかESXiの設定変更をしてvCenterとESXi間の疎通を回復する(Layer3接続できる)状況を考えます。
詳細説明は「KB1008127」を参照ください。
状況確認
まずは現在の仮想スイッチの設定を確認します。「KB1008127」によると、「esxcli network vswitch dvs vmware list」による確認を勧めていますが、一画面に収まらないため操作に苦戦すると思われます。
[root@esxi142:~] esxcli network vswitch dvs vmware list DSwitch01 Name: DSwitch01 VDS ID: 50 3c ce 2a 4e a7 5b 0c-cc bb a6 db 62 df 11 bf Class: cswitch Num Ports: 2560 Used Ports: 5 Configured Ports: 512 MTU: 1500 CDP Status: listen Beacon Timeout: -1 Uplinks: vmnic1, vmnic0 VMware Branded: true DVPort: Client: vmnic0 DVPortgroup ID: dvportgroup-18 In Use: true Port ID: 14 Client: vmnic1 DVPortgroup ID: dvportgroup-18 In Use: true Port ID: 15 DSwitch02 Name: DSwitch02 VDS ID: 50 3c fb 4a 12 e9 84 78-85 e0 90 df 9d 56 2a 39 Class: cswitch Num Ports: 2560 Used Ports: 6 Configured Ports: 512 MTU: 1500 CDP Status: listen Beacon Timeout: -1 Uplinks: vmnic2, vmnic3 VMware Branded: true DVPort: Client: vmnic2 DVPortgroup ID: dvportgroup-21 In Use: true Port ID: 10 Client: vmnic3 DVPortgroup ID: dvportgroup-21 In Use: true Port ID: 11 Client: vmk0 DVPortgroup ID: dvportgroup-22 In Use: true Port ID: 0 [root@esxi142:~]
ヴイエムウェア非推奨であるものの、ここはESXi4.X時代以前のコマンドラインesxcfgを使った方が読みやすい出力になります。適宜、旧コマンドを使用した方が操作しやすい場面もあるかと思います。
[root@esxi142:~] esxcfg-vswitch -l DVS Name Num Ports Used Ports Configured Ports MTU Uplinks DSwitch01 2560 5 512 1500 vmnic1,vmnic0 DVPort ID In Use Client 14 1 vmnic0 15 1 vmnic1 DVS Name Num Ports Used Ports Configured Ports MTU Uplinks DSwitch02 2560 6 512 1500 vmnic2,vmnic3 DVPort ID In Use Client 10 1 vmnic2 11 1 vmnic3 0 1 vmk0 [root@esxi142:~]
vDSからのアップリンク削除
もし物理NIC数に余裕がない場合や物理結線を変更できない場合は、vDSに対するアップリンクを削除し、物理NICの余剰を作らなければなりません。前述の出力の場合を想定し、vmnic0とvmnic1の割り当てを削除する例を紹介します。
構文は以下の通りです。
esxcfg-vswitch -Q <NIC名> -V <ポートID> <分散仮想スイッチ名>
vmnic0とvmnic1を削除します。
esxcfg-vswitch -Q vmnic0 -V 14 DSwitch01 esxcfg-vswitch -Q vmnic1 -V 15 DSwitch01
物理NIC割り当てが解除されたことを確認します。
[root@esxi142:~] esxcfg-vswitch -l DVS Name Num Ports Used Ports Configured Ports MTU Uplinks DSwitch01 2560 1 512 1500 DVPort ID In Use Client 14 0 15 0 DVS Name Num Ports Used Ports Configured Ports MTU Uplinks DSwitch02 2560 6 512 1500 vmnic2,vmnic3 DVPort ID In Use Client 10 1 vmnic2 11 1 vmnic3 0 1 vmk0 [root@esxi142:~]
標準仮想スイッチの作成
もし、標準仮想スイッチが存在しない場合は、リストア時に一時的に使用する標準仮想スイッチとポートグループを作成できます。以下はvlan2のポートグループを作成する例です。
esxcli network vswitch standard add --vswitch-name=vss_tmp esxcli network vswitch standard portgroup add \ --portgroup-name=pg_tmp \ --vswitch-name=vss_tmp esxcli network vswitch standard portgroup set \ --portgroup-name=pg_tmp \ --vlan-id=2
ポートグループが作成されたことを確認します。
[root@esxi142:~] esxcfg-vswitch -l Switch Name Num Ports Used Ports Configured Ports MTU Uplinks vss_tmp 2560 1 128 1500 PortGroup Name VLAN ID Used Ports Uplinks pg_tmp 2 0 DVS Name Num Ports Used Ports Configured Ports MTU Uplinks DSwitch01 2560 1 512 1500 DVPort ID In Use Client 14 0 15 0 DVS Name Num Ports Used Ports Configured Ports MTU Uplinks DSwitch02 2560 6 512 1500 vmnic2,vmnic3 DVPort ID In Use Client 10 1 vmnic2 11 1 vmnic3 0 1 vmk0 [root@esxi142:~]
前述の手順で作成した標準仮想スイッチにアップリンクを割り当てます。
esxcli network vswitch standard uplink add \ --uplink-name=vmnic0 \ --vswitch-name=vss_tmp esxcli network vswitch standard uplink add \ --uplink-name=vmnic1 \ --vswitch-name=vss_tmp
アップリンクが割り当てられたことを確認します。
[root@esxi142:~] esxcfg-vswitch -l Switch Name Num Ports Used Ports Configured Ports MTU Uplinks vss_tmp 2560 5 128 1500 vmnic0,vmnic1 PortGroup Name VLAN ID Used Ports Uplinks pg_tmp 2 0 vmnic0,vmnic1 DVS Name Num Ports Used Ports Configured Ports MTU Uplinks DSwitch01 2560 1 512 1500 DVPort ID In Use Client 14 0 15 0 DVS Name Num Ports Used Ports Configured Ports MTU Uplinks DSwitch02 2560 6 512 1500 vmnic2,vmnic3 DVPort ID In Use Client 10 1 vmnic2 11 1 vmnic3 0 1 vmk0 [root@esxi142:~]
vmkの作成
以下のようなコマンドでvmkを作成します。
esxcli network ip interface add --interface-name=vmk1 --portgroup-name=pg_tmp esxcli network ip interface ipv4 set \ --interface-name=vmk1 \ --ipv4=192.168.2.141 \ --netmask=255.255.255.0 \ --type=static
設定を確認します。
[root@esxi142:~] esxcli network ip route ipv4 list Network Netmask Gateway Interface Source ----------- ------------- ----------- --------- ------ default 0.0.0.0 192.168.1.1 vmk0 MANUAL 192.168.1.0 255.255.255.0 0.0.0.0 vmk0 MANUAL 192.168.2.0 255.255.255.0 0.0.0.0 vmk1 MANUAL [root@esxi142:~]
疎通のためにstatic routeが必要ならば、以下のようなコマンドで操作します
esxcli network ip route ipv4 add \ --network=192.168.0.0/20 \ --gateway=192.168.2.1
設定を確認します。
[root@esxi142:~] esxcli network ip route ipv4 list Network Netmask Gateway Interface Source ----------- ------------- ----------- --------- ------ default 0.0.0.0 192.168.1.1 vmk0 MANUAL 192.168.0.0 255.255.240.0 192.168.2.1 vmk1 MANUAL 192.168.1.0 255.255.255.0 0.0.0.0 vmk0 MANUAL 192.168.2.0 255.255.255.0 0.0.0.0 vmk1 MANUAL [root@esxi142:~]
適当なホストからvmkへの疎通が可能であることを確認します。
nec-ix01(config-GigaEthernet1.2)# ping 192.168.2.141 PING 192.168.2.1 > 192.168.2.141 56 data bytes 64 bytes from 192.168.2.141: icmp_seq=0 ttl=64 time=0.846 ms 64 bytes from 192.168.2.141: icmp_seq=1 ttl=64 time=0.450 ms 64 bytes from 192.168.2.141: icmp_seq=2 ttl=64 time=0.453 ms 64 bytes from 192.168.2.141: icmp_seq=3 ttl=64 time=0.411 ms --- 192.168.2.141 ping statistics --- 4 packets transmitted, 4 packets received, 0% packet loss round-trip (ms) min/avg/max = 0.411/0.540/0.846 nec-ix01(config-GigaEthernet1.2)#