【実務・中級編】 スタック技術(Cisco StackWise、バーチャルチャッチスイッチVSS)によるL2/L3冗長化アーキテクチャ – インフラ・物理&L2/L3ネットワーク基礎実践ガイド

物理の壁を越えろ:StackWiseとVSSで実現する「論理的一体化」の深淵

ネットワークエンジニアにとって、STP(Spanning Tree Protocol)のブロックポートを眺めるのは、ある種の「敗北」に近い感覚を覚えるものです。冗長化のためにリンクを張ったのに、片方が仕事をしていない。これほどリソースの無駄遣いはない。

今日は、そんなSTPの呪縛からインフラを解放し、複数の物理スイッチを「ただの1台」として振る舞わせる魔法、Ciscoのスタック技術(StackWise)とVSS(Virtual Switching System)について、現場の血と汗が染み込んだ知見を共有しよう。

なぜ「論理的な1台」が必要なのか?

通常、スイッチを2台並べれば、そこには2つのコントロールプレーンが存在する。ルーティングテーブルも、MACアドレステーブルも別々だ。これを冗長化するにはHSRPやVRRP、そしてL2ループを防ぐためのSTPが必須となる。

しかし、スタック技術の真骨頂は「コントロールプレーンの統合」にある。
複数のスイッチが専用のスタックケーブル(StackWise)やリンク(VSSのVSL)を通じて密結合することで、1台のマスター(Active)スイッチがすべての制御を司るようになる。

これにより、以下の劇的な変化が起きる。

  • ループフリーなトポロジー: 物理的には2台でも、論理的には1台。STPに怯える必要はない。
  • マルチシャーシEtherChannel (MEC): 2台の物理スイッチにまたがって1つのポートチャネルを組める。これが最強の冗長化だ。
  • 高速フェイルオーバー: 制御用CPUが統合されているため、片系がダウンしても通信断はミリ秒単位で収束する。

StackWiseの内部挙動を紐解く

StackWiseは、スイッチ背面のスタックケーブルでリング状(またはデイジーチェーン)に接続され、内部で独自の「StackWise Bus」を形成する。このバスは、あたかもシャーシ型スイッチのバックプレーンのように振る舞う。

現場で叩き込むべき確認コマンド

運用中に「今、どっちがマスターなのか?」「メンバーの状態は正常か?」を確認する際、まずはこのコマンドを叩く。

! 現在のスタック構成とロール(Active/Standby/Member)を確認する
show switch

! 各メンバースイッチのスタックポート状態を確認
show switch stack-ports

もし show switch の結果で Role が Master 以外のスイッチが落ちていれば、即座にスタックケーブルの物理的な疎通不良を疑え。光ファイバーやケーブルの劣化は、スタックにおいては致命傷になる。

VSSの構築:マルチシャーシEtherChannelの設計

VSS(Virtual Switching System)は、主にCatalyst 6500や4500系で使われる技術だ。VSL(Virtual Switch Link)という専用リンクを介して、2台のスイッチを論理的に結合する。

以下は、VSS構築時の設定エッセンスだ。

! VSSドメインの定義(両系で一致させる)
switch virtual domain 100
 switch 1 priority 150  ! マスターになりやすいようプライオリティを高く設定
 switch 2 priority 100

! VSLリンクの設定
interface port-channel 10
 switch virtual link 1
!
interface range tengigabitethernet 1/1 - 2
 channel-group 1 mode on

ここでのポイントは、channel-group を mode on で設定すること。LACPのネゴシエーションを待たずに即座にVSLを確立させるのが鉄則だ。

Webエンジニアが知るべき「論理冗長」の恩恵

あなたがWeb APIを設計する際、バックエンドのロードバランサーがこのスタック技術に守られていれば、インフラ側の障害を意識する必要は激減する。

例えば、PythonでAPIの疎通を確認するスクリプトを書くとき、冗長化されたインフラであれば、たとえスイッチの1台が物理的に破壊されても、セッションは維持される。

import requests
import time

# 冗長化されたゲートウェイを通るAPIへのヘルスチェック
def check_api_health(url):
    try:
        response = requests.get(url, timeout=2)
        if response.status_code == 200:
            print(f"[{time.ctime()}] 通信正常:スタック構成は健全です")
        else:
            print(f"[{time.ctime()}] 警告:APIは応答していますが、ステータスが{response.status_code}です")
    except requests.exceptions.RequestException as e:
        # ここで検知できなければ、スタックのフェイルオーバーが極めて優秀な証拠
        print(f"[{time.ctime()}] 致命的エラー:ネットワーク経路が断絶しました")

# 監視ループ
while True:
    check_api_health("http://api.internal.service/v1/health")
    time.sleep(5)

最後に:現場のエンジニアへ

スタック技術は非常に強力だが、一つだけ忘れてはならないことがある。それは「設定ミスが即座にネットワーク全域を巻き込む」というリスクだ。

1台の設定変更が、そのまま論理的な「1台」全体の設定変更になる。もし間違ったACLを適用すれば、全ポートが一瞬にして通信不能になる。だからこそ、設定変更時には必ず reload in 10(10分後にリロードを予約するコマンド)を打ち、逃げ道を作っておくこと。

これが、幾多の障害を乗り越えてきた「ネットワークの流儀」だ。技術の深淵を覗くことは、自分を守る盾を作ることでもある。さあ、今日も安定したパケットを届けようじゃないか。

コメント

タイトルとURLをコピーしました