陳爽
【摘要】
Windows NLB(網(wǎng)絡(luò )負載均衡)是 Microsoft 在Windows 2000 Server 開(kāi)始在操作系統上提供的一種負載平衡技術(shù)。NLB 使用一種分布算法將負載均衡分布到多臺主機上,從而提高基于 IP 的關(guān)鍵型服務(wù)(例如 Web、虛擬專(zhuān)用網(wǎng)絡(luò )、流媒體、終端服務(wù)、代理等等)的可伸縮性和可用性,同時(shí)可檢測主機故障并自動(dòng)將流量重新分配給其他操作主機,從而提供高可用性。
本次借客戶(hù)處Exchange環(huán)境實(shí)踐后的經(jīng)驗談?wù)刉indows NLB單播和多播區別及應用場(chǎng)景,文中除了對NLB做簡(jiǎn)要介紹外,著(zhù)重對服務(wù)器故障和NLB異常工作的現象進(jìn)行了分析。
【正文】
一、 理論簡(jiǎn)介
Windows NLB有單播與多播兩種模式,兩種模式原理各有不同。
1、單播模式下,NLB服務(wù)會(huì )重新對每個(gè)節點(diǎn)中啟用NLB的網(wǎng)卡分配MAC地址(此MAC地址稱(chēng)為群集MAC地址),并且所有的NLB節點(diǎn)均使用相同的MAC地址(均使用群集MAC地址),同時(shí)NLB會(huì )修改所有發(fā)送的數據包中的源MAC地址,這樣就導致交換機不能將此群集MAC地址綁定在某個(gè)端口上。 工作在單播模式下的NLB可以在所有網(wǎng)絡(luò )環(huán)境下正常運行(兼容性最好);
2、多播模式下,NLB不會(huì )修改NLB節點(diǎn)啟用NLB的網(wǎng)絡(luò )適配器的MAC地址,而是為它再分配一個(gè)二層多播MAC地址專(zhuān)用于NLB的通訊(此MAC地址稱(chēng)為群集MAC地址),這樣NLB節點(diǎn)之間可以通過(guò)自己原有的專(zhuān)用IP地址進(jìn)行通訊。
二、 功能特點(diǎn)
l 可伸縮性
對于 NLB 群集而言,可伸縮性是指當群集的全部負載超過(guò)其能力時(shí)逐步將一個(gè)或多個(gè)系統添加到現有群集中的功能。為支持可伸縮性,NLB 可執行以下操作:
平衡 NLB 群集上對各個(gè) TCP/IP 服務(wù)的負載請求。
平衡群集中多個(gè)主機之間的多個(gè)服務(wù)器負載請求(來(lái)自同一個(gè)客戶(hù)端或來(lái)自幾個(gè)客戶(hù)端)。
在負載增加時(shí),支持在不關(guān)閉群集的情況下向 NLB 群集中添加主機。
在負載降低時(shí),支持從群集中刪除主機。
通過(guò)全部實(shí)現管道化提高性能并降低開(kāi)銷(xiāo)。管道允許向 NLB 群集發(fā)送請求,而無(wú)需等待響應上一個(gè)發(fā)送的請求。
l 高可用性
通過(guò)最大程度地減少停機時(shí)間,高可用系統能夠可靠地提供可接受級別的服務(wù)。為提供高可用性,NLB 包括一些內置功能,這些功能可自動(dòng)執行以下操作:
檢測發(fā)生故障或脫機的群集主機并對其進(jìn)行恢復。
在添加或刪除主機時(shí)平衡網(wǎng)絡(luò )負載。
在十秒之內恢復并重新分發(fā)負載。
l 可管理性
使用 NLB 管理器,可以從單個(gè)計算機管理和配置多個(gè) NLB 群集和群集主機。
使用端口管理規則,可以為單個(gè) IP 端口或一組端口指定負載平衡行為。
可以為每個(gè)網(wǎng)站定義不同的端口規則。如果您對多個(gè)應用程序或網(wǎng)站使用相同的一組負載平衡服務(wù)器,則端口規則基于目標虛擬 IP 地址(使用虛擬群集)。
使用可選的單主機規則,可以將所有客戶(hù)端請求引導至單個(gè)主機。NLB 將客戶(hù)端請求路由到運行特定應用程序的特定主機。
可以阻止對某些 IP 端口進(jìn)行不需要的網(wǎng)絡(luò )訪(fǎng)問(wèn)。
可以在群集主機上啟用 Internet 組管理協(xié)議 (IGMP) 支持,以控制交換機廣播(在多播模式中操作時(shí))。
使用 shell 命令或腳本,可以從運行 Windows 的任何聯(lián)網(wǎng)計算機上遠程啟動(dòng)、停止和控制 NLB 操作。
可以查看 Windows 事件日志以檢查 NLB 事件。NLB 在事件日志中記錄所有操作和群集更改。
三、 案例分析
前段時(shí)間客戶(hù)處出現Exchange前端CAS無(wú)法訪(fǎng)問(wèn)的故障,排障發(fā)現前端使用的網(wǎng)絡(luò )負載均衡是用NLB實(shí)現,最終診斷問(wèn)題也是出現在此。
環(huán)境背景:兩臺Exchange前端服務(wù)器CAS,使用NLB實(shí)現負載均衡;
故障現象:客戶(hù)端無(wú)法使用OUTLOOK客戶(hù)端連接至服務(wù)器,郵件收發(fā)功能全部中斷。
大致診斷過(guò)程:故障發(fā)生時(shí),測試發(fā)現客戶(hù)端網(wǎng)絡(luò )已經(jīng)無(wú)法連接指前端CAS服務(wù)器,包括負載均衡的虛擬IP以及真實(shí)地址。測試其他同網(wǎng)段的沒(méi)有做防火墻限制的服務(wù)器也無(wú)法連接指前端,包括域控制器等。而進(jìn)一步測試發(fā)現域內客戶(hù)端和DC之間的通訊正常,由此判斷問(wèn)題出現在CAS服務(wù)器上。直接登錄CAS服務(wù)器,發(fā)現已經(jīng)無(wú)法用域管理員賬號登錄,本地管理員賬號登錄后測試兩臺前端與同網(wǎng)段服務(wù)器全部不通。在排除了網(wǎng)絡(luò )設備的影響后,檢查CAS服務(wù)器的網(wǎng)絡(luò )配置正常,查看NLB負載均衡器時(shí)發(fā)現問(wèn)題,聚合IP正常情況下是兩個(gè)實(shí)體地址虛擬出一個(gè)虛擬IP地址,然而當時(shí)在NLB負載均衡器管理器上只能看到一臺服務(wù)器的IP顯示。
檢查NLB的設置,均為正常。值得注意的是此處使用了單播的方式進(jìn)行處理,由于單播下所有綁定群集的網(wǎng)絡(luò )適配器的MAC都相同,所以在單網(wǎng)卡的情況下,各節點(diǎn)之間是不能通訊的,這也是單播推薦雙網(wǎng)卡配置的原因之一。為了避免交換機的數據洪水,單播應該結合VLAN使用,即將兩個(gè)實(shí)際節點(diǎn)的網(wǎng)線(xiàn)接到同一個(gè)VLAN下使用。網(wǎng)絡(luò )設備上確認的確是這么實(shí)現。然而此時(shí)聚合無(wú)法實(shí)現,管理器上只能顯示一個(gè)實(shí)際IP,也無(wú)法直接添加IP成功聚合。
進(jìn)一步研究發(fā)現通過(guò)這種方式聚合時(shí)兩臺服務(wù)器是不能直接通過(guò)聚合的實(shí)體IP進(jìn)行通訊的,因為兩個(gè)網(wǎng)卡此時(shí)表現出來(lái)具有相同的MAC地址。此時(shí)的內部通訊需要使用心跳線(xiàn),這樣兩臺服務(wù)器才能有效的確認對方是否處于在線(xiàn)狀態(tài)。后來(lái)查看監控告警發(fā)現,心跳IP此前出現過(guò)不通的現象,如果心跳IP不通,兩臺服務(wù)器將認定對方下線(xiàn),IP聚合也會(huì )分解,這樣外來(lái)的數據包傳遞到虛擬地址時(shí)已經(jīng)無(wú)法正常的傳遞到相應的實(shí)體地址了。這個(gè)現象有點(diǎn)類(lèi)似故障轉移群集里面的腦裂現象。究其原因就是兩臺計算機的內部通訊異常。
解決辦法:最后解決是通過(guò)重新建立新的聚合,舍棄以往的配置,故障成功解決。后續也針對可能的“腦裂”現象對服務(wù)器配置進(jìn)行了優(yōu)化:包括添加對方的額host記錄,讓兩臺服務(wù)器能正常通訊;調整生產(chǎn)IP和心跳IP網(wǎng)卡的主次順序,讓服務(wù)器設置更加規范化;也建議客戶(hù)使用硬件產(chǎn)品做負載均衡用,排除一些軟件的不穩定性和不全面帶來(lái)的影響。
【總結】
由于所有的NLB節點(diǎn)具有相同的MAC地址,所以NLB節點(diǎn)之間不能通過(guò)自己原有的專(zhuān)用IP地址進(jìn)行通訊。節點(diǎn)之間無(wú)法ping通。此時(shí)可以采用雙網(wǎng)卡來(lái)解決節點(diǎn)間通信問(wèn)題,一塊網(wǎng)卡用于啟用負責均衡,一塊網(wǎng)卡用于節點(diǎn)間通訊。
由于NLB所使用的群集MAC地址沒(méi)有綁定在某個(gè)具體的交換機端口上,所以所有的NLB通訊均通過(guò)在交換機的所有端口上廣播進(jìn)行。為了避免泛洪現象,需要將所有NLB節點(diǎn)添加到一個(gè)VLAN中。
在使用NLB在做負載均衡的時(shí)候,單播環(huán)境下保證第二張網(wǎng)卡能正常通訊是很重要的,直接點(diǎn)說(shuō)就是做心跳IP的host記錄很有必要性。
聯(lián)系客服