以我們電信系的專業來說, multi-path (多重路徑)是不好的. 它意味著一個訊號, 分別走了很多不同的路徑,才到達接收端.在同一個環境中, 因為訊號路徑的不同,有的訊號先到, 有的晚到. 雖然大家都是 "對的", 不過路徑比較長的那一組訊號通常會比較弱, 弱的訊號又會干擾強的那組.假如我的訊號一秒鐘才變一次,那麼 multi-path 對我們幾乎沒啥影響.好比搭高鐵或是自強號從台北到高雄, 假如要求 6 小時之內到達, 訊號都能夠鎖定. 假如要求 3 小時要到, 搭自強號的訊號和搭第二班高鐵的人差不多時間到, 他就變成干擾源了.
通訊上為了消除 muti-path, 有各種不同的手法. 例如用多根天線來定位真正的主要訊號來源. 好比我在台南多設一個檢查站, 我就可以依時間差推算出誰是搭自強號, 誰搭高鐵? 當然, 我會希望找到搭高鐵的人, 因為他還精神奕奕, 訊號比較強, 也比較不容易變成速度上的瓶頸. 萬一我改成兩個小時就要到, 當然更不想要慢到的人來搗亂.
有趣的是, 這個電信上的名詞, 到了網路通訊竟然大變調. 網路通訊裡的 multi-path, 變成個好東西了. IPMP (IP Network Multipathing) 裡面的多重路徑就是備援路徑的意思. 假如我有兩張網路卡 – 當然就有兩個 MAC address, 假設其中一張卡突然被拔掉了,我希望原來屬於這張卡的 IP address 能夠無痛地轉移到另外一張網卡上面去, 這就是 IPMP 的精神.雖然是 "無痛", 那麼 IP address 是不變的, 但 MAC address 還是會變.
根據 [ref 1] 的描述, 我要對兩張網卡各自設一個正常的 IP, 和一個備援的 IP. 備援的 IP 因為有 deprecated (棄用) 的屬性, 表示它是測試專用的, 不會拿來對外使用.另外它還要有一個屬性是 -failover, 表示這個 IP 會做 fail detection. 當網卡發生問題後,測試 IP 會發現正常 IP 已經不通了. 此時系統會去 /etc 下的 hotname.xxx 裡面去查,哪一張網卡和壞掉的網卡屬於同一個 group. 然後把壞掉的 MAC address 的正常 IP 指定給同 group 中正常的 MAC address.
那麼正常的 MAC address 不就會有兩個 IP 了嗎? 此事要靠邏輯介面來解決. 雖然好的網卡只有一個實體, 此時它會模擬出 3 個邏輯介面. 標準的邏輯介面給自己正常的 IP 用, 衍生邏輯介面 1 給自己的備援 IP 用, 衍生邏輯介面 2 給受難的 IP 用. 當壞掉的卡的網線重新插回來的話, IP 也會回到自己原來的 MAC address.
上面介紹的觀念屬於有兩張網卡的例子, 實際上, IPMP 還可以延伸到 [2]:
A. Link-Based IPMP with a Single Interface
B. IPMP with Multiple Interfaces
1. ACTIVE-STANDBY
a) 2 NICs, 1 IP (Link-Based)
b) 2 NICs + 1 Logical IF, 2 IP (Probe-Based)
c) 2 NICs + 1 Logical IF and 3 IPs (Probe-Based) – Classical Solaris Active/Standby IPMP
2. Active-ACTIVE IPMP
a) 2 NICs, 1 IP (Link-Based)
b)2 NICs + Logical IF, 2 IP (Probe-Based)
c)2 NICs + 1 Logical IF and 3 IPs (Probe-Based) – Classical Solaris Active/Active IPMP
d)3 NICs + 1 IP (Link-Based)
前面介紹的那一種, 算是 ACTIVE-ACTIVE 的 2 NICs + 1 logical IF + 3 個 IPs. 只有一張網卡的時候, 符合 case A. 此時依然把這張網卡加到 group, 只是多賦予它 failover 的特性 [3] . 那 link-based 又和 probe-based 有何不同呢? Link-based 最基本的保護, [ref 2] 說它 always on. 倒是 probe-based 的偵測需要設定檢查的時間, 例如 FAILURE_DETECTION_TIME = 10 秒,這樣 in.mpathd daemon 才能每隔 10 秒送 ICMP (Internet Control Message Protocol) echo 去檢查一下網路.這看起來很有學問的 ICMP echo, 呃, 其實只會需要用到 request ping (type = 8) 和 reply ping (type = 0) 吧!
[REF]
1. Solaris10 – IP Network Multipathing (IPMP)
2. IPMP, Bonding, Link Aggregation, vLAN Tagging on Solaris, Linux, HP-UX and IBM AIX