リンクアップ通知を遅延させる
本日は、『vSphere仮想化基盤でトラブル』とその時取った解決策をご紹介しようかと思います。
トラブルって嫌ですよね。。
かくいう私も、VMware vSphereの仮想化基盤設計・構築に長く携わりましたが、時折、よくわからないトラブルにぶち当たりました。
「発生した事例」と「原因」、「解決方法」をご紹介しますが、
環境依存なところもありますので、「発生した事例」よりは、「解決方法」の方にご注目いただきたいです。
発生した事例
vSphere 6.0の仮想化基盤を導入し、チーミング試験をしていた時でした。
チーミング試験の内容は、
「仮想化基盤上の仮想マシンから、pingを打ち続けてESXiのネットワーク結線を1本引っこ抜いて、長時間pingが切れないこと」
「仮想化基盤上の仮想マシンから、pingを打ち続けて抜いたESXiのネットワーク結線を、元に戻した時に長時間pingが切れないこと」
というものでした。
ちなみに、ここでいう長時間 = ping 1発分 程度ぐらいの感覚です。
今まで、チーミング試験を数多やってきましたが、ネットワーク機器の設定とESXiのチーミング設定がきっちりかみ合っているのであれば、まず切れるのはping 1発分ぐらいがほとんどでした。
ところがぎっちょん!
僕「よっしゃ!pingも打ったし、抜線は問題なかったし、元に戻したろ!(ブスー)」
僕「どれどれ、pingの状況はと…」
xxx.xxx.xxx.xxx からの応答:バイト数=32 時間=1ms TTL=64
xxx.xxx.xxx.xxx からの応答:バイト数=32 時間=1ms TTL=64
宛先ホストに到達できません。
宛先ホストに到達できません。
宛先ホストに到達できません。
宛先ホストに到達できません。
宛先ホストに到達できません。
xxx.xxx.xxx.xxx からの応答:バイト数=32 時間=1ms TTL=64
xxx.xxx.xxx.xxx からの応答:バイト数=32 時間=1ms TTL=64
xxx.xxx.xxx.xxx からの応答:バイト数=32 時間=1ms TTL=64
・
・
・
僕「ホゲー」
何故か実際は、pingが5発ぐらい切れるじゃありませんか!
え?切れすぎじゃない?
と焦る私。
まぁこういうこともあるのか?と思い、何度か試したのですが、何度やろうとも同じ結果になるじゃありませんか!
一度、通信が通ってしまえばその後切れることもなく安定して通信してくれるのですが、やっぱ5発は多くね?
というところで、原因追及に乗り出しました。
原因
結論から言うと、「スイッチとESXiのリンクアップ時間の差異」が原因のようでした。
当時、ESXiと接続されるサーバースイッチとして、CiscoのスイッチCatalyst4506Eという機種を使っておりました。
抜線したLANケーブルを結線した際に、VMwareが「リンクアップした」と認識されるのが、1秒未満。
対して、対向スイッチの4506Eは、「リンクアップした」と認識されるのに2~3秒程度、時間を要していたのです。
つまり、私が結線したとき、↓のような状況だったわけですね。
なるほどー。
VMware側は早々にリンクアップし、使用できる状態であると判断されているので、通信に利用しする。
↓
しかし、対向スイッチはまだ受け入れ状態ではないので通信ができない。
という状態になっていたというわけですね。
早く来るわけでもないのにエレベータのボタンを連打しまくっているような状況ということですね。
解決策
スイッチ側の受け入れ状態ができてから、ESXi側リンクアップしてくれる、というのが理想でしょう。
それを実現させるためには、
対策1:対向スイッチ側のリンクアップを早くする
対策2:ESXi側のリンクアップを遅くする
かどちらかでしょう。
後者が、実はVMwareの詳細オプションにあります!
Net.teampolicyupdelay
このオプションは、「リンクアップ通知を遅延させる」という設定です。
既定では、100ミリ秒。つまり、0.1秒です。
は、早い・・・
この値を例えば5000とかにすると、5000ミリ秒 = 5秒、リンクアップの通知が遅延します。
これを使って、対向スイッチがリンクアップするまでに十分な秒数を設定しおけば、
対向スイッチのリンクアップ
↓
ESXiのリンクアップ
という順序を成立させることがきます。
これを使ったところ、pingが5発切れてしまう問題は解消しました。
うーん、いいね。