一、引言現今幾乎各行各業內部都建立了自己的服務器,由於服務器的特殊地位,它的可靠性、可用性及其 I/O 速度就顯得非常的重要, 保持服務器的高可用性和安全性是企業級IT 環境的重要指標,其中最重要的一點是服務器網絡連接的高可用性,
為實現這些要求,現在服務器大都采用多網卡配置,系統大都采用現在非常流行的 linux 作為服務器工作的環境。現在帶寬已經不是服務質量提高的瓶頸了,相對的網絡設備和服務器的處理能力就漸漸成為新的瓶頸。為提高服務器的網絡連接的可用性和可靠性,目前Sun公司的Trunking技術、3Com 公司的 DynamicAccess 技術、Cisco 公司的Etherchannel技術等等都在研究將服務器的多個網卡接口綁定在一起的鏈路聚集技術, 鏈路聚集技術將多個鏈路虛擬成一個邏輯鏈路進而提供了一種廉價、有效的方法擴展網絡設備和服務器的帶寬,提高網絡的靈活性與可用性。
本文介紹 linux 下的 bonding 技術,linux 2.4.x 的內核中采用了這種技術,利用 bonding 技術可以將多塊網卡接口通過綁定虛擬成為一塊網卡,在用戶看來這個聚合起來的設備好像是一個單獨的以太網接口設備,通俗點講就是多塊網卡具有相同的 IP 地址而並行連接聚合成一個邏輯鏈路工作。現在在關於linux bonding 技術中,有幾種算法來實現負載均衡的要求,此文針對這些算法,在此進行簡單分析與研究,討論其不足,並提出另外一種在此基礎上改進的一種基於傳輸協議的負載均衡實現方法。討論如何實現多個網絡接口的分在均衡及其故障接管。
二、負載均衡技術和高可用技術介紹
2.1 負載均衡技術負載均衡技術的主要思想就是如何根據某種算法將網絡的業務流量平均分配到不同的服務器和網絡設備上去,以減輕單台服務器和網絡設備的負擔, 從而提高整個系統的效率。負載均衡既可以由有負載均衡功能的硬件實現,也可以通過一些專用的軟件來實現,負載均衡是一種策略,它能讓多台服務器或多條鏈路共同承擔一些繁重的計算或者 I/O 任務,從而以較低的成本消除網絡瓶頸,提高網絡的靈活性和可靠性。
2.2 高可用技術實現負載均衡首先是基於網絡的高可用性提出來的,高可用技術是容錯技術的一個分支。實現系統的高可用性最簡單的一個辦法就是冗余。完整的網絡負載均衡和高可用性網絡技術有兩個方面構成,一是多服務器的綁定和負載均衡,二是一個服務器內部的多網卡綁定的負載均衡,這裡主要討論一個服務器內部的多網卡綁定時的負載均衡。
三、Linux 的 bonding 技術中負載均衡的簡單實現
3.1 Linux的bonding技術Linux的bonding技術是網卡驅動程序之上、數據鏈路層之下實現的一個虛擬層,通過這種技術,服務器接在交換機上的多塊網卡不僅被綁定為一個 IP,MAC 地址也被設定為同一個,進而構成一個虛擬的網卡,工作站向服務器請求數據,服務器上的網卡接到請求後,網卡根據某種算法智能決定由誰來處理數據的傳輸。 Bonding技術可以提高主機的網絡吞吐量和可用性。
3.2 Linux的幾種發送均衡算法目前 Linux 的發送算法最主要的有三種:輪轉算法(Round-Robin) 、備份算法(Active-Backup) 、MAC 地址異或算法(MAC-XOR) .下面對目前這三種主要算法進行簡單分析。
3.2.1 輪轉算法該算法是基於公平原則進行的,它為每個將要被發送的數據包選擇發送接口,算法的主要思想是首先第一個數據包由一個接口發送,另一個數據包則由另外一個接口發送,下面依次進行循環選擇。通過分析我們可以看出這種算法比較比較簡單,在發送數據方面也比較公平,能保證網卡發送數據時候的負載均衡,資源利用率很高。但是我們知道如果一個連接或者會話的數據包從不同的接口發出的話,中途再經過不同的鏈路,在客戶端很有可能會出現數據包無序到達的問題,而無序到達的數據包需要重新要求被發送,這樣網絡的吞吐量就會下降。
3.2.2 備份算法該算法將多個網卡接口中的一個接口設定為活動狀態,其他的接口處於備用狀態。當活動接口或者活動鏈路出現故障時,啟動備用鏈路,由此可見此算法的優點是可以提供高網絡連接的可用性,但是它的資源利用率較低,只有一個接口處於工作狀態,在有 N 個網絡接口的情況下,資源利用率為1/N. 3.2.3 MAC地址異或算法該算法的主要思想是:由服務器的 MAC 地址和客戶端的MAC 地址共同決定每個數據包的發送端口號,由源 MAC 地址和目的 MAC 地址進行異或計算,並將異或結果對接口數求余計算。由於發送到同一個客戶端的數據流經過同一個鏈路,因此數據包能夠有序到達客戶端。此算法在只有一個客戶機訪問服務器或者服務器和客戶機不在同一子網的情況下,由算法思想得知這種情況下負載不會均衡,在只有一個客戶機訪問服務器的時候,資源的利用率也是1/N(N為接口數)。