系列文章:
負載均衡詳解第三篇:服務器負載均衡的基本概念-使用負載均衡器的服務器群
負載均衡詳解第四篇:服務器負載均衡的基本概念-負載均衡時數據包流程
負載均衡詳解第六篇:服務器負載均衡的基本概念-網絡地址轉換(NAT)
負載均衡詳解第七篇:服務器負載均衡的基本概念-服務器直接返回
到目前為止,我們已經詳細討論了使用負載均衡器來提高服務器群可擴展性、可用性、可管理性的幾種功能和特性。本章我們主要討論負載均衡器部署的問題,討論在現有的網絡中部署負載均衡器的幾種方案。我們還將討論如何設計高可用的方案,以實現整個網絡中不同網絡組件的容錯處理,包括負載均衡器在內。
在討論網絡結構之前,我們需要了解一些基本概念。首先討論是否把負載均衡器當作二層交換機或三層路由器來使用,這在網絡設計中是非常關鍵的。然后從不涉及到高可用性的簡單的網絡結構入手,延伸到負載均衡器如何實現雙機的高可用性,並將討論不同的高可用性設計和必需的條件。本章將詳細描述網絡結構由簡單到復雜的變化過程,而不只是提供一個特定的網絡設計方案。
1把負載均衡當作二層交換機還是三層路由器
交換機的基本功能就是在接收端口接收數據包,選擇輸出端口並將數據包發送出去。如何選擇輸出端口取決於交換機的具體類型。
二層交換機利用數據鏈路層的MAC地址來決定數據包的輸出端口。三層交換機,也就是路由器,利用網絡層的信息來決定數據包的輸出端口。當采用IP協議時,三層交換機利用數據包中的IP地址來決定數據包的輸出端口。
客戶端和服務器,通常被稱為主機,會把管理員提供的路由器的IP地址設置為缺省網關。當給不同網段的IP地址發送數據包時,主機會把數據包發送給缺省網關。路有器作為缺省網關會利用路由協議根據數據包的IP地址來決定如何轉發數據包。
負載均衡器一般在四層或者四層以上工作,這取決於我們使用的功能特性。當接收到目地址是VIP並以負載均衡器的MAC地址為其目的MAC地址的數據包后,負載均衡器根據數據包中四層以上的信息實現負載均衡功能。
通過利用數據包中的信息和服務器健康檢查的結果以及服務器負載的狀態,負載均衡器選擇一台真實的服務器來提供服務,並將請求轉發到這台服務器。同時負載均衡器會修改數據包中的相關信息,例如目的IP地址、TCP或者UDP端口號碼。修改數據包之后,負載均衡器需要確定輸出端口並發送這個數據包,負載均衡器可以象二層交換機或路由器那樣轉發數據包。
負載均衡器只對特定的數據包提供四層以上的交換,那就是以VIP為目的地址並有相應服務器回應的數據包。所有其他的數據包均在二層或三層交換,這取決於負載均衡器的配置。
圖1是負載均衡器在二層工作模式下數據包轉發和IP尋址的過程。
服務器和負載均衡器的缺省網關都指向路由器。所有的服務器都在同一個網段內,這樣,服務器之間可以通過負載均衡器直接通訊,而不需要經過路由器。需要注意的一點是,從服務器端返回的數據包的目的MAC地址是M1,即路由器的MAC地址。但是由於服務器采用公網IP地址,無法節省IP地址資源,所以這種方案沒有吸引力。
這樣也無法防止用戶直接訪問服務器,除非在路由器或負載均衡器上設置訪問控制列表。可以讓服務器使用私網IP地址,但是這樣就有需要在路由器同一個接口上面配置兩個網段。
負載均衡器使用公網IP地址在一個網段,服務器使用私網IP地址在另外一個網段。我們需要在路由器跟負載均衡器相連的接口上定義兩個IP地址:一個IP地址在VIP的網段,而另外一個IP地址在服務器的網段。有些負載均衡產品提供一些特殊的功能,可以避免在路由器接口上設置多個IP地址。
服務器的缺省網關指向負載均衡器時,數據包的流程和IP尋址過程如圖2所示,負載均衡器象路由器一樣轉發數據包。缺省網關的地址為:10.10.10.1,定義在負載均衡器連接服務器的接口上。本文中使用網關IP來表示服務器缺省網關的IP地址。
因為缺省網關指向負載均衡器,服務器回應的數據包的目的MAC地址是M2,也就是負載均衡器的MAC地址,如圖2所示。
有人會問,為什么不用VIP來做服務器的缺省網關?當然可以,但是可能會有多個VIP,每個VIP為不同的客戶和應用提供服務,而服務器的缺省網關只能有一個。所以,采用單獨的IP地址作為缺省網關,跟VIP地址分開是比較合理的。另外,網關IP地址必須與服務器在同一網段。如果服務器分布在不同的網段,每個網段都需要定義一個缺省網關。所以,把VIP和缺省網關分開會比較方便。
路由和交換功能跟整個負載均衡功能是分開的,路由和交換功能就是根據IP地址或者MAC地址來決定下一跳和輸出端口,而負載均衡功能在OSI模型中的更高層工作。如果真實服務器和負載均衡器在同一個網段或者廣播域,負載均衡器可以通過第二層交換把數據包發送到真實服務器上。如果服務器和負載均衡器不在同一個廣播域,如何轉發數據包就取決於負載均衡器是在二層工作還是在三層工作。如果負載均衡器是一個三層交換機,它會根據路由表來決定下一跳的地址。如果負載均衡器是一個第二層交換機,負載均衡器會把數據包發送到缺省網關,由缺省網關把數據包路由到真實的服務器。
如果負載均衡器是以三層路由器的方式進行工作,還有一個好處,服務器可以把缺省網關指向負載均衡器。這樣就保證了在特定的網絡環境中服務器回應的數據經過負載均衡器,例如單臂網絡環境中。
我們接下來要討論的一些網絡設計中會用到這種功能。另外,負載均衡器能夠對外部交換機和路由器隱藏服務器的私有IP地址。如果服務器在不同的網段,它們可以通過負載均衡器互相通信。不過,負載均衡器以三層路由的方式進行工作時,在配置和管理上要比二層工作方式稍微復雜一點。通常,只要求負載均衡器進行簡單的路由,不會運行BGP之類復雜的路由協議。
在后續部分,假定負載均衡器以三層路由的方式進行工作,所以服務器的缺省網關都指向負載均衡器。