在 網路負載平衡 (NLB) 機制中有 3 種叢集操作模式,主要涵蓋了兩種封包傳輸協定,分別是 單點傳播 (Unicast) 與 多點傳送 (Multicast),要瞭解其中的差異必須對網路底層有一定的認識,否則將難以理解實際運作的差異。
對於網際網路數據交換的基本觀念我是建議閱讀 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 協定:
首先我們先看看 MAC address 的結構,共有 32bits 如下,在 IP Multicast 中的前 23 個 Bits 是固定的,源由請看【為何 IP Multicast 位址的 MAC address 必須擠到 23 位元裡面?】有詳細的說明,但是在 NLB 使用的 Multicast 模式中沒有這個限制,因為 NLB 的 Multicast 只有使用到 Layer 2 的如何區分 Unicast MAC address 與 Multicast MAC address?
|<------- 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 講的是封包從內到外如何有效減少封包的傳輸數量以加速內容傳遞
- 例如: 語音會議、視迅會議、封包廣播應用、… 需同時間傳送大量封包到多點目的的情況
相關連結
- Windows Server 2008 怎麼設定網路負載 (Network LoadBalance)
- Using NLB with ISA Server Part 2: Layer 2 Fun with Unicast and Multicast Modes
- 為何 IP Multicast 位址的 MAC address 必須擠到 23 位元裡面?
- Interdomain Multicast Fundamentals
- ftp://ftp-eng.cisco.com/ipmulticast/training/Module2.pdf
- 何謂 Layer 3 Switch (第三層交換器)
- Network Load Balancing: Frequently Asked Questions for Win2k and Win2k3
- Catalyst Switches for Microsoft Network Load Balancing Configuration Example
- Unicast vs. Multicast
- Internetworking Design Basics (非常推薦的一篇文章,觀念講得非常清楚)
- Network Load Balancing Clusters
[ 本文同步刊載於 http://blog.miniasp.com/post/2010/01/Master-NLB-Compare-Unicast-Multicast.aspx ]