本文探討了分布式網絡服務器使用的負載均衡技術及負載分配的策略,並基於網絡地址轉換在FreeBSD上實現了負載均衡網關,應用於我們的Internet網絡服務器上,將負載分給多個服務器分擔,以解決Internet服務器面臨的大量並發訪問造成的CPU或I/O的高負載問題。 為了達到最佳的負載均衡效果,負載控制器需要根據各個服務器的當前CPU和I/O狀態來分配負載,這就需要動態監視服務器的負載,並應用優化的負載分配策略,達到平均分配負載的目的。
關鍵字:
負載均衡,網絡地址轉換,FreeBSD
1. 引言
Internet的快速增長使多媒體網絡服務器面對的訪問數量快速增加,服務器需要具備提供大量並發訪問服務的能力,服務器的處理和I/O能力成為了提供服務的瓶頸。由於單台服務器的性能總是有限的,必須采用多服務器和負載均衡技術才能滿足大量並發訪問的需要。
最早的負載均衡技術是通過DNS來實現的,在DNS中為多個地址配置同一個名字,因而查詢這個名字的客戶機將得到其中一個地址,從而使得不同的客戶訪問不同的服務器,達到負載均衡的目的[1]。DNS負載均衡是一種簡單而有效的方法,但是它不能區分服務器的差異,也不能反映服務器的當前運行狀態。
反向代理服務器可以將請求轉發給內部Web服務器,如果代理服務器能夠將請求均勻轉發給多台內部服務器,就能達到負載均衡的目的[2]。反向代理方式下能應用優化的負載均衡策略,每次訪問最空閒的內部服務器來提供服務。但是隨著並發連接數量的增加,代理服務器本身的負載也變得非常大,最後反向代理服務器本身會成為服務的瓶頸。
支持負載均衡的地址轉換網關中可以將一個外部IP地址映射為多個內部IP地址,對每次TCP連接請求動態使用其中一個內部地址,達到負載均衡的目的[3]。很多硬件廠商將這種技術集成在他們的交換機中,作為他們第四層交換的一種功能來實現,一般采用隨機選擇、根據服務器的連接數量或者響應時間進行選擇的負載均衡策略來分配負載。然而硬件實現的負載控制器靈活性不強,不能支持更優化的負載均衡策略和更復雜的應用協議。
除了這三種負載均衡方式之外,有的協議內部支持與負載均衡相關的功能,例如HTTP協議中的重定向能力等,但它依賴於特定協議,因此使用范圍有限。根據現有的這些負載均衡技術,我們選擇了使用軟件方式實現網絡地址轉換的負載均衡的方式,以彌補硬件負載均衡器的不靈活,並應用優化的均衡策略來實現後端服務器負載分擔的最優狀態。