在 網路負載平衡 (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 的運作原理

網路負載平衡在 Multicast mode 的運作原理

如何區分 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 協定:

叢集的 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 的

|<------- 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 即可判斷出來:

如果在進一步對照 NLB 的設定畫面 (如下圖),以 Windows Server 2008 的網路負載平衡管理員叢集參數的設定畫面為例,在選取不同叢集操作模式時,在畫面上預設的「網路位址 (MAC address)」就可以看出這個 bit 的變化,如下圖示:

單點傳播

 

多點傳送 

 

NLB Multicast 與 IP Multicast 一樣都要 Layer 2 switch 支援才行,但是應用的方向卻不太一樣:

相關連結

 

[ 本文同步刊載於 http://blog.miniasp.com/post/2010/01/Master-NLB-Compare-Unicast-Multicast.aspx ]