這幾天花了好多時間在研究 Microsoft 網路負載平衡(NLB) 機制,由於當中有許多設定無法完全理解,困擾我好幾天,這幾天不止請教了 微軟技術支援中心、也拜訪了好幾位 系統工程師(SE) 的朋友討教 單點傳播(Unicast) 與 多點傳送(Multicast) 的差異,由於我對網路底層的不熟悉所以才導致無法快速理解這些概念,可見 IT 的領域真的跟 RD 差好多啊!
網路上很多文章都只講一點點或只講怎麼做,沒有深入的講解原理也沒有參考連結,這讓我找到資料後還要多方驗證彼此的邏輯性與正確性,也或者是說我對 Layer 2 / Layer 3 的 Know How 太淺薄所以才會有這麼多疑問,但最近已經都完全釐清了,這感覺真的很棒。
對於網際網路數據交換的基本觀念我這幾天是讀 Internetworking Design Basics 文章所建立的,他將原理寫的相當清楚,對我理解 NLB 的底層運作機制有非常大的幫助,也建議各位閱讀。當然我也閱讀了很多其他相關文件,我都會放在本文最下方的相關連結中。
本文專注的重點在於 單點傳播(Unicast) 與 多點傳送(Multicast) 的差異,對於如何安裝設定 NLB 也可以參考本文最下方的相關連結。
網路負載平衡在 Unicast mode 的注意事項
由於 Unicast 模式的 NLB 會先設定讓兩台主機 NLB 網路介面的 MAC 位址變成完全一樣,以至於讓兩台主機彼此無法互相連線。如果你是透過遠端桌面連線到該主機做 Unicast NLB 設定的話,建議在設定時最好每台成員伺服器都有兩張網路卡,且透過另一張網卡 (非 NLB 叢集使用的介面) 進行遠端連線,避免設定時被中斷連線。如果你只有一張網卡,在設定 Unicast 模式加入叢集後會斷線很久,那是因為兩台主機使用相同的 MAC 位址,導致 Switch 無法將封包傳遞到正確的 ports,有些 Switch 甚至無法使用 NLB 成員伺服器的 IP 連線,所以還是建議用兩張網卡進行設定。
至於「設定讓兩台主機 NLB 網路介面的 MAC 位址變成完全一樣」這個動作是在設定 NLB 成員伺服器 加入 NLB Cluster 的時候就會自動完成的工作,你可以透過 Windows 內建的 getmac 指令查詢加入叢集後的成員伺服器的 MAC 位址是否一樣。
網路負載平衡在 Multicast mode 的注意事項
如果你是透過遠端桌面連線到該主機做 Multicast NLB 設定的話,建議在設定時最好每台成員伺服器都有兩張網路卡,且透過另一張網卡 (非 NLB 叢集使用的介面) 進行遠端連線,避免設定時被中斷連線,但這是非必要的要求,你只要重新連線即可。
設定 Multicast 模式的 NLB 須注意你的 Layer 2 switch 是否支援,若不支援 Multicast 的 Switch 可能會導致 NLB 運作發生異常或無法達到負載平衡的目的。
網路負載平衡在 Unicast mode 的運作原理
- 成員伺服器加入 NLB 叢集的時候,提供給 NLB 叢集介面的 MAC Address 會先被修改成 NLB 叢集專用的 MAC Address
- NLB 叢集介面在傳送 Ethernet frame 至 switch 時會透過 MAC address masking 修改成一個假的(bogus) MAC 位址並註冊到 switch 上,Switch 會自動註冊進 mac address table 做參照
- 當封包透過 Router (Layer 3 switch) 並傳送至 Switch (Layer 2 switch),並透過 ARP 廣播查詢 NLB 叢集 IP 時會有以下判斷:
- 由於 switch 上的 mac address table 並無該 IP-MAC 的對應,所以會發送 ARP 廣播封包到所有 switch ports
- NLB 叢集電腦會透過 ARP 回應 NLB 叢集 MAC位址 (Unicast MAC address, 亦即原本Interface 的 MAC address),switch 便會將封包送至 NLB 叢集的 switch ports
網路負載平衡在 Multicast mode 的運作原理
- 成員伺服器加入 NLB 叢集的時候,提供給 NLB 叢集介面的 MAC Address 不會被修改!
- NLB 叢集介面在傳送 Ethernet frame 至 switch 時會直接用原本網卡(網路介面)的 MAC Address 註冊到 switch 上的 mac address table 做參照
- 當封包透過 Router (Layer 3 switch) 並傳送至 Switch (Layer 2 switch),並透過 ARP 廣播查詢 NLB 叢集 IP 時會有以下判斷:
- 由於 switch 上的 mac address table 並無該 IP-MAC 的對應,所以會發送 ARP 廣播封包到所有 switch ports
- NLB 叢集電腦會透過 ARP 回應 NLB 叢集 MAC位址(Multicast MAC address),switch 便會將封包送至 NLB 叢集的 switch ports [註:有些 switch 無法處理 Multicast MAC address]
如何區分 Unicast MAC address 與 Multicast MAC address ?
首先我們先看看 MAC address 的結構,共有 32bits 如下,在 IP Multicast 中的前 23 個 Bits 是固定的,源由請看【為何 IP Multicast 位址的 MAC address 必須擠到23 位元裡面?】有詳細的說明,但是在 NLB 使用的 Multicast 模式中沒有這個限制,因為 NLB 的 Multicast 只有使用到 Layer 2 的 Multicast 協定:
|<------- 23 bits ----->|
00000001-00000000-01011110-0XXXXXXX-XXXXXXXX-XXXXXXXX
01 - 00 - 5E -(00~7F) -(00~FF) - (00~FF)
如上例,要區分 Unicast MAC address 與 Multicast MAC address 最簡單的方式就是判斷 MAC 位址在最高位元組的最低位元為是否為 1 即可判斷出來:
- 如果這個 bit 為 1,那麼這個 MAC address 就屬於 Multicast MAC address
- 如果這個 bit 為 0,那麼這個 MAC address 就屬於 Unicast MAC address
如果在進一步對照 NLB 的設定畫面 (如下圖),以 Windows Server 2008 的網路負載平衡管理員中叢集參數的設定畫面為例,在選取不同叢集操作模式時,在畫面上預設的「網路位址(MAC address)」就可以看出這個 bit 的變化,如下圖示:
單點傳播
多點傳送
NLB Multicast 與 IP Multicast 一樣都要 Layer 2 switch 支援才行,但是應用的方向卻不太一樣:
- NLB Multicast 講的是封包從外到內時如何透過廣播達到負載平衡的目的
- 例如: 負載平衡應用、HA 叢集架構、… 需同時將封包傳送到多台伺服器提供服務的情況
- IP Multicast 講的是封包從內到外如何有效減少封包的傳輸數量以加速內容傳遞
- 例如: 語音會議、視迅會議、封包廣播應用、… 需同時間傳送大量封包到多點目的的情況
※ 最後,如有您覺得本文有謬誤之處或觀念講不正確或模糊不清的地方,歡迎隨時提出指正,感謝!
相關連結