天天看點

Linux的bonding技術中負載均衡詳述

負載均衡技術的使用能夠在不對網絡中各種裝置進行重大改造的條件下提高各種服務的品質,是解決目前網絡業務迅猛增加和更新硬體設施之間沖突的一個有效措施,本文簡單描述了關于負載均衡方面的研究現狀,重點介紹了現今Linux bonding技術及其基于bonding技術的幾種負載均衡的算法,并對此進行了簡要的分析與研究,提出了其不足之處,針對這些不足提出了一種多網卡情況下基于傳輸協定的發送方面的算法,并對此進行了簡單的實作,最後對此進行了測試,測試結果表明該方法的可用性。

1 引言

現今幾乎各行各業内部都建立了自己的伺服器,由于伺服器的特殊地位,它的可靠性、可用性及其I/O速度就顯得非常的重要,保持伺服器的高可用性和安全性是企業級IT環境的重要名額,其中最重要的一點是伺服器網絡連接配接的高可用性,為實作這些要求,現在伺服器大都采用多網卡配置,系統大都采用現在非常流行的Linux作為伺服器工作的環境。現在帶寬已經不是服務品質提高的瓶頸了,相對的網絡裝置和伺服器的處理能力就漸漸成為新的瓶頸。為提高伺服器的網絡連接配接的可用性和可靠性,目前Sun公司的Trunking技術、3Com公司的DynamicAccess技術、Cisco公司的Etherchannel技術等等都在研究将伺服器的多個網卡接口綁定在一起的鍊路聚集技術, 鍊路聚集技術将多個鍊路虛拟成一個邏輯鍊路進而提供了一種廉價、有效的方法擴充網絡裝置和伺服器的帶寬,提高網絡的靈活性與可用性。

本文介紹Linux下的bonding 技術,Linux 2.4.x的核心中采用了這種技術,利用bonding技術可以将多塊網卡接口通過綁定虛拟成為一塊網卡,在使用者看來這個聚合起來的裝置好像是一個單獨的以太網接口裝置,通俗點講就是多塊網卡具有相同的IP位址而并行連接配接聚合成一個邏輯鍊路工作。現在在關于Linux bonding 技術中,有幾種算法來實作負載均衡的要求,此文針對這些算法,在此進行簡單分析與研究,讨論其不足,并提出另外一種在此基礎上改進的一種基于傳輸協定的負載均衡實作方法。讨論如何實作多個網絡接口的分在均衡及其故障接管。

2 負載均衡技術和高可用技術研究介紹

2.1 負載均衡技術

負載均衡技術的主要思想就是如何根據某種算法将網絡的業務流量平均配置設定到不同的伺服器和網絡裝置上去,以減輕單台伺服器和網絡裝置的負擔,進而提高整個系統的效率。負載均衡既可以由有負載均衡功能的硬體實作,也可以通過一些專用的軟體來實作,負載均衡是一種政策,它能讓多台伺服器或多條鍊路共同承擔一些繁重的計算或者I/O任務,進而以較低的成本消除網絡瓶頸,提高網絡的靈活性和可靠性。

2.2 高可用技術

實作負載均衡首先是基于網絡的高可用性提出來的,高可用技術是容錯技術的一個分支。實作系統的高可用性最簡單的一個辦法就是備援。完整的網絡負載均衡和高可用性網絡技術有兩個方面構成,一是多伺服器的綁定和負載均衡,二是一個伺服器内部的多網卡綁定的負載均衡,這裡主要讨論一個伺服器内部的多網卡綁定時的負載均衡。

3 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為接口數)。

實作負載均衡方法:

第一步、編輯虛拟網絡接口配置檔案。

       建立 /etc/sysconfig/network-scripts/ifcfg-bond0 檔案

       内容如下:

      DEVICE=bond0

       IPADDR=192.168.0.253

       NETMASK=255.255.252.0

       BROADCAST=192.168.0.255

       NETWORK=192.168.0.253

第二步、編輯真實網卡的配置檔案(建議修改之前做好備份)(我這裡兩塊網卡,故隻要做以下幾步就可以了)

     1、編輯eth0網卡

      vi /etc/sysconfig/network-scripts/ifcfg-eth0

       内容如下:

      DEVICE=eth0

       BOOTPROTO=none

       TYPE=Ethernet

       MASTER=bond0

       slave=yes

     2、編輯eth1網卡

     vi /etc/sysconfig/network-scripts/ifcfg-eth1

     内容如下:

     DEVICE=eth1

     BOOTPROTO=none

     TYPE=Ethernet

     MASTER=bond0

     slave=yes

(   注意:真實網卡不能再設定ip位址了,按需要把所要綁定的真實網卡都按這個設定,主要是MASTER=bond0 和 slave=yes 一定不要弄錯(簡單的方法就是修改一個然後拷貝再修改   )

第三步、修改/etc/modprobe.conf 檔案加入如下兩行:(建議做好備份)

     alias bond0 bonding

     options bond0 miimon=100 mode=1

(   注:1、miimon 是鍊路監測的時間間隔機關是毫秒,miimon=100的意思就是,每100毫秒檢測網卡和交換機之間是否連通,如不通則使用另外的鍊路。

         2、mode=0 表示負載均衡方式,兩塊網卡都工作。 mode=1 表示備援方式,網卡隻有一個工作,一個出問題啟用另外的。)

第四步、在/etc/rc.d/rc.local 加入如下一行(啟動時執行此行指令)

       ifenslave bond0 eth0 eth1

第五步、重新啟動後負載平衡已經能正常工作