網路負載平衡 NLB 跨網域問題

上一篇架設好 MOSS 叢集後,發現子網站 (SitesXXX) 無法在其他外點被讀取,花了好幾天來 Debug,包括整個 MOSS 及資料庫刪掉重練,重新匯出匯入網站,調整了好幾天的備用存取對應(Alternate Access Mappings),都無法在分點正常的運作,最終終於找到正確的解法,令人出乎意料的解決方式。

首先說明一下 Load Balance 在微軟的平台有三種方式可以達成,分別是做 (1) Network Load Balance (NLB, 如同前一篇文章), (2) DNS Round Ribon, (3) 軟/硬體式的負載平衡器,其中(2)無法自動偵測機器當機而自動略過故障主機,(3)還需要額外的費用或資源,想當然耳還是(1)比較經濟實惠。


設定好之後再本地端測試一切都很正常,所有的分子網站也都能正常的顯示,在異地端測試主網站卻不能正常地顯示,調整 AAM 後勉強能夠讓各個MOSS (我有三台, 其中兩台做 NLB)都能分別顯示正常,但是一旦使用 NLB 的 IP 或名稱都無法正常連線。

在 AAM 增加 NLB 的名稱指定對應到其中一台 MOSS 主機上是可以看得到網站,但是這樣的作法不就沒有做到 NLB,萬一網站掛了還要手動去調整,一點都沒有達到目的,測試到此一定是有個關卡沒有設定好,必須要把 Root cause 找出來才能解決這個問題。

接下來就Down 到最基本的測試開始,由Ping <NLB ip>指令來確認網路是否是通的,當然在本地端 Ping 是正常的,但是在異地端卻產生 Request time out,先前在設定 NLB 就有查閱到在虛擬主機上使用 Unicast mode 會出現問題,必須要改採 Multicase Mode,這是一個已知的問題並在VMWare網站有說明, 可參考以下連結。
為減少問題所以我在架設時選擇 Multicast mode,請參考VMWare 文件, 來避免掉這個問題,但是卻發生虛擬出來的 MAC address 跨 Router 存取會找不到,導致 ARP 這個通訊協定無法找出正確的地址回傳到另外一端(異地端),解決的方式只要在 Router 上加入一筆靜態的 ARP 紀錄即可,請參考Vmware文件微軟文件,其問題是出在網路這一層而非軟體的設定,讓我白花了很多時間去調整設定,希望這篇文章可以節省大家一點除錯的時間。

後記:

  • 本來以為是 MOSS 的 AAM 設定問題,調整過幾次不同的設定方法,雖問題不再這邊,但是多次設定也多了解了一點AAM的設定邏輯
  • 我也測試過 DNS Round Robin 的方式,號稱是不用複雜設定的平衡方式,但還是遇到跨網段無法 Ping 到 NLB 虛擬IP 的問題。
  • 就算我把 NLB 改成 Unicast mode,上述的問題還是會存在。
  • 網路上也有人抱怨微軟的 NLB 弄得很複雜,有興趣的人可以觀看一下

 

發表迴響