vSwitchにSTPが不要な理由
** 知っている人にとっては当たり前の内容です**
ESXiは多くの場合、冗長構成をとるために二つ以上のNICを利用し、それぞれ単一、もしくは別個の物理スイッチに接続されていると思います。
ESXiの物理NICはuplinkまたはvmnicとよばれ、ESXi内部にある仮想スイッチ(vSwitch)につながっています。
vSwitchはL2SWとしての役割をするため、物理スイッチをESXiの接続はスイッチ間接続となります。
図1:ネットワークトポロジ
vSwitchが物理スイッチと同等の動作をすると仮定した場合、この構成はループに相当します。
L2レベルでループがある場合は、ブロードキャストストームなどの問題が発生するためにSpanning Tree Protocol(STP)を設定する必要(最近では必ずしもそうとは言い切れないようですが。。。)があります。
ではvSwitchの場合でもSpanning Treeに参加する(ネットワークは専門外なので表現が間違っていたらすみません。。。)必要があるのでしょうか?
表題からもわかるように答えはNoです。
L2ネットワークでBPDUと呼ばれるパケットをやり取りすることでSpanning Treeが構成されますが、実際に、vSwitchではこのBPDUをDropしますので、vSwitchのUplinkがBlockされることはありません。
ではなぜ、vSwitchではトポロジ的にLoopであるにもかかわらずSpanning Treeが不要なのでしょうか?Loopによる問題は発生しないのでしょうか?
実はvSwitchはFloodingが必要な通信に対して特殊な動作をします。
その特殊動作のため、トポロジ的にLoopであっても問題は発生せず、Spanning Treeに参加する必要がないのです。
たとえば、ARPなどの外部からのブロードキャストフレームをuplink経由でvSwitchが受け取った場合、vSwitchに接続されるVMに対してはフレームを転送しますが、ほかのUplinkに対してはフレームを転送しません。
下図ではUplink1からBroadcast Packetを受信した際の動作を示しています。
Broadcast Packetは仮想スイッチに接続されるVMに対して転送されますが、uplink2へは転送されません。
図2:外部からのBroadcast PacketはほかのUplinkへ転送されない
またUnknown Unicast(フレームの宛先MACアドレスがMACアドレステーブルにない場合)を外部からUplink経由で受け取った場合、普通の物理L2SWであればFloodingして宛先を探すことになりますが、vSwitchの場合は宛先MACアドレスに一致するVMがいない場合はそのパケットをドロップし、他のUplinkからFloodingすることはありません。
このような動作をするはvSwitchがあくまで仮想マシンのための通信であって、その他のNodeとの通信を転送する必要がないためだと思われます。
その結果、STPによりBlockされるポートがないため、帯域を損なうことがありません。
言うまでもないことかもしれませんが、ESXi上で稼働するVM起因のBroadcastやUnknown UnicastはちゃんとUplinkへ転送されますのでVMの動作に問題が出ることはありません。
図3:仮想マシン(内部)からのBroadcastやUnknown UnicastはUplinkへ転送される
vSphereの仮想スイッチについて、より詳しく知りたい方は以下の資料が参考になります。
参考資料:
Networking for VMware Administrators (書籍)
Best Practices for Virtual Networking (PDF) <<< Linkが切れてしまったようです。
ネットワーク仮想化をネットワークの基本から理解する 〜 第1回:理解するために必要なことを整理する
押さえておきたいvSphere の基本~ネットワーク編 第1回~
押さえておきたいvSphere の基本~ネットワーク編 第2回~
なお、物理スイッチ側で ESXi との接続ポートを エッジポート (BPDUパケットを流さない)という設定にすることもできますが、 STP の標準ポートとして BPDU パケットを流す設定にしても基本的には問題はありません。
ただし、 標準ポートにした場合は ツリーの再構成が走るために疎通可能になるまで時間がかかる可能性があります。エッジポートにしておくことで再構成を待たずに即座に転送可能状態(Forwarding State)になります。
参考サイト:
Configuring STP Extensions Using NX-OS
Cisco Nexus - STP Extensions Command
また、Switch側のパスの切り替わりやリンクアップ検知の時間差によって、一時的な疎通断が発生する可能性があります。
つまり、ESXi側では即座にパスが切り替わっているにもかかわらず、Switch側で即座にパスが切り替わらないという状況です。
このような状況においては以下のブログで紹介されているようにESXi側でもSwitch側に合わせた遅延を挿入することで結果的にGuestOSやvmknernel port との疎通断を最小化することができます。
参考ブログ
リンクアップ通知を遅延させる - そうか、そうか (hatenablog.com)
コメント
コメントを投稿