講師前言:
在傳統的雙核心設計中,我們常遇到一個兩難:為了備援連接了兩條線,結果為了怕廣播風暴 (Loop),STP 協定把其中一條線給封鎖了,導致一半的頻寬被浪費。今天我們來探討如何利用 ExtremeXOS 的 MLAG 技術,結合 VRRP,不僅解決風暴問題,還能讓兩台核心交換器同時工作 (Active-Active)!
二、運作原理與痛點解決 (Mechanism)
傳統架構的痛點:廣播風暴與資源浪費
- 為何會形成迴圈? 兩台 Core 交換器為了確認對方是否存活 (VRRP Heartbeat),必須建立一條橫向的互連線路。這條線路加上兩台 Core 分別下接到 Access Switch 的線路,三者在物理上就圍成了一個封閉的三角形 (Loop)。
- 廣播風暴風險:廣播封包 (Broadcast) 會順著這個三角形路徑無限循環。若沒有 STP 機制,只需幾秒鐘就能癱瘓整個網路。
- STP 的代價:為了防止風暴,STP 會強制 Block (阻斷) 其中一條鏈路。結果是:雖然買了兩條線、兩台設備,卻只有一台在工作,另一台純待命,浪費 50% 效能。
- VRRP 的限制:標準 VRRP 只有 Master 會轉發封包,Backup 收到的封包會被丟棄 (Drop),無法達成負載平衡。
ExtremeXOS MLAG 的解決方案
關鍵技術詳解:ISC Link (Inter-Switch Connection)
MLAG 的核心在於兩台 Core Switch 之間的這條 ISC 連線。它不僅僅是一條線,而是一個複雜的通道:
- 物理組成 (LACP Trunk):為了避免這條關鍵鏈路成為單點故障或頻寬瓶頸,我們通常使用多個實體介面綁定成 LACP 來建立 ISC。
- VLAN 結構 (ISC + User VLANs):這條 Trunk 裡面跑了兩類 VLAN:
- ISC VLAN (Control):專用 VLAN,用來同步兩台設備的 MLAG 狀態表與 VRRP 狀態。
- User VLANs (Data):這點最重要!ISC 必須同時承載所有使用者的 VLAN (如 vlan 10, 20)。
- 環狀形成的根本原因:正因為 ISC Link 承載了 User VLAN,加上兩台 Core 下接到 Access Switch 的線路也承載了同樣的 User VLAN,這三條路徑在物理上對 User VLAN 形成了一個完美的環狀 (Ring)。
這就是為什麼我們需要 MLAG!MLAG 協定透過特殊的控制機制,將這個物理環狀「隱藏」起來,讓下層設備與 STP 誤以為這是一條直線,從而避免了 Block,同時解決了廣播風暴。
- 邏輯虛擬化:L3-A 與 L3-B 透過 ISC 同步狀態,將兩台實體設備模擬成單一邏輯節點。因此,物理上的「三角形」在邏輯上變成了「直線」,消除了 L2 迴圈,不再需要 STP Block 端口。
- VRRP 狀態同步:L3-A 與 L3-B 透過 ISC 傳遞 VRRP Hello 封包,不需要經過下層網路,避免了風暴風險。
- Active-Active 轉發 (關鍵技術):在 ExtremeXOS 中,啟用 Fabric Routing 後,VRRP Backup 也能轉發封包。這意味著,無論流量流向 L3-A 還是 L3-B,兩台都能同時進行路由轉發,頻寬利用率達到 100%。
// ExtremeXOS 關鍵參數設定範例
# 設定 ISC 的 LACP 與 VLAN Tag
enable sharing 1 grouping 1-2 algorithm address-based L2 <-- 建立 ISC LACP Trunk
configure vlan "ISC_Vlan" add ports 1 tagged <-- 加入 Control VLAN
configure vlan "User_Vlan" add ports 1 tagged <-- 加入 User VLAN (形成環狀的主因)
# 設定 MLAG Peer
create mlag peer "peer_To_SW2"
configure mlag peer "peer_To_SW2" ipaddress 192.168.100.2 vr VR-Default
enable mlag port 10 peer "peer_To_SW2" id 10
三、架構視覺化 (Visuals)
1. 問題場景:傳統 VRRP 的物理迴圈
為了讓兩台 L3 Core 交換 VRRP 狀態,必須連接一條橫向線路。這與下方的 Access Switch 形成了一個物理三角形 (Loop)。
若無 STP 介入,廣播封包將在此迴圈無限繞行 (紅色路徑);若 STP 介入,則必須阻斷一邊 (橘色虛線),造成浪費。
flowchart TD
%% 定義節點
subgraph Core_Layer ["Core Layer (L3)"]
direction LR
L3_A["L3 SW-A
(VRRP Master)"]
L3_B["L3 SW-B
(VRRP Backup)"]
end
subgraph Access_Layer ["Access Layer (L2)"]
L2_User["Access Switch
(L2)"]
end
%% 定義連線與迴圈路徑
L3_A <==>|1. VRRP Keepalive Link| L3_B
L3_A <==>|2. Uplink Main| L2_User
L3_B -.-x|3. STP Blocking| L2_User
%% 樣式設定
style L3_A fill:#d1fae5,stroke:#059669,stroke-width:2px
style L3_B fill:#fee2e2,stroke:#b91c1c,stroke-width:2px
style L2_User fill:#e0f2fe,stroke:#0284c7,stroke-width:2px
%% 強調迴圈的連線顏色
linkStyle 0 stroke:#ef4444,stroke-width:3px,color:#b91c1c
linkStyle 1 stroke:#22c55e,stroke-width:3px,color:#15803d
linkStyle 2 stroke:#f59e0b,stroke-width:2px,stroke-dasharray: 5 5,color:#b45309
2. 解決方案:MLAG + VRRP Active-Active
特別注意 VRRP 角色: 雖然系統仍有 Master 與 Backup 之分 (控制層面),但在資料層面 (Data Plane),兩者皆能主動轉發流量。
graph TD
subgraph "Logical Core (MLAG Domain)"
%% 這裡明確標示 VRRP 角色
L3_A["L3 SW-A
(VRRP Master)"]
L3_B["L3 SW-B
(VRRP Backup)"]
%% ISC 詳細描述
ISC[("ISC Link (LACP Trunk)
VLANs: ISC + User Data")]
L3_A <==> ISC <==> L3_B
end
subgraph "Access Layer"
L2_User[User Access Switch]
end
L3_A == "LACP Member 1 (Active)
Carrying User VLAN" ==> L2_User
L3_B == "LACP Member 2 (Active)
Carrying User VLAN" ==> L2_User
%% Logic representation
note[下層 L2 Switch 看到的是單一個 LACP Trunk]
L2_User -.-> note
style ISC fill:#fef3c7,stroke:#d97706,stroke-width:4px
style L3_A fill:#d1fae5,stroke:#059669
style L3_B fill:#d1fae5,stroke:#059669
3. 進階架構:多網段 VRRP 分流 (VRRP Load Balancing)
當網路環境有多個網段 (Subnet) 時,我們可以將不同的 VLAN Master 角色分配給不同的核心交換器。
雖然 MLAG 已經允許雙主動轉發,但這種設計可以平衡控制層面 (Control Plane) 的負載 (如 ARP 請求處理),避免單一設備 CPU 過忙。
graph TD
subgraph "Core Layer (MLAG Domain)"
%% 定義 L3-A 的角色
L3_A["L3 SW-A
(Master: VLAN 10)
(Backup: VLAN 20)"]
%% 定義 L3-B 的角色
L3_B["L3 SW-B
(Backup: VLAN 10)
(Master: VLAN 20)"]
%% ISC 明確標示 VLAN 10, 20
ISC[("ISC Link
(LACP Trunk)
VLANs: ISC, 10, 20")]
L3_A <==> ISC <==> L3_B
end
subgraph "Different Network Segments"
%% 網段 1 (VLAN 10)
SW_10["Access SW (VLAN 10)
Gateway: 192.168.10.254"]
%% 網段 2 (VLAN 20)
SW_20["Access SW (VLAN 20)
Gateway: 192.168.20.254"]
end
%% 連線關係
L3_A == "MLAG Link" ==> SW_10
L3_B == "MLAG Link" ==> SW_10
L3_A == "MLAG Link" ==> SW_20
L3_B == "MLAG Link" ==> SW_20
%% 樣式
style L3_A fill:#e0e7ff,stroke:#4338ca,stroke-width:2px
style L3_B fill:#e0e7ff,stroke:#4338ca,stroke-width:2px
style SW_10 fill:#dcfce7,stroke:#166534
style SW_20 fill:#ffedd5,stroke:#9a3412
style ISC fill:#fef3c7,stroke:#d97706,stroke-width:4px