第11期 2006 / 07 / 05 出刊

講師專長
Linux系統規劃建置 Mail Web FTP SQL、企業網路規劃建置與管理、Windows系列電腦課程、Office系列電腦課程、Macromedia Flash、Dreamweaver Uled Photoimpact
講師經歷
資訊工業策進會產品開發處助理工程師、IBM OS/2 大專院校巡迴演講主講人、中央銀行電腦課程講師、台灣土地銀行電腦課程講師、僑務委員會電腦課程講師、聯成電腦補習班專任講師、87,88,90年勞委會職訓局大專軟體第二專長培訓班導師及講師(網路資料庫班、程試設計師班)。台北縣醫師工會電腦課程講師、SCO/CALDERA/NOVELL認證LINUX講師
專業證照
Linux LPI-1、NCLP、CNI

目前網路卡的發展已經由早期的 10MBit/100MBit進入了 1000MBit 的時代,甚至也已經發展到 10000MBit 傳輸的網路卡。目前主流網路卡為 100MBit,實際上傳輸速度大約為 10MB ~ 12MB。若是希望可以有更高傳輸量的劃,可以考慮使用 1000MBit 的網路卡來替代。

目前市面上 1000M 網路卡價格部份還不是很便宜,為了該功能去購買1000M 的網路卡似乎有點不划算。不過就 Linux 系統來說,到是有個功能稱呼為 bonding,也就是可以提供兩張網路卡合併的機制,讓多張網路卡合併進而達成頻寬輸入與輸出倍增的效益。

所以這次我們就來談如何在 Linux 系統上實作提供該功能。

Linux 的 BONDING 介紹

Linux 系統的 BONDING 功能,最原本是來自於 Lnux Kernel 2.0 由 Donald Becker 提供核心修補檔案所納入的,後來逐漸就成為 Linux Kernel 正式的一個部份。
Linux BONDING 功能,提供的功能點可以分數個層面來看:

1.合併增加機器本身網路輸入與輸出的的總存取頻寬
2.線路與網路設備備援的機制

而 bonding 功能,一般又稱呼為 Port Trunking。

合併增加機器本身網路輸入與輸出的的總存取頻寬

首先來介紹第一點,也就是倍增的機制。早期網路卡本身速度並不快,一般只有 10MBit/100MBit 的速度,在一些特殊環境裡面,比方大流量的 ftp 站台來說,尤其學校的大型 mirror 站台來說,100MBit 網路卡對外有時候可能會遇到傳輸的瓶頸,導致大量連線存取時輸出的頻寬不夠的問題。

要解決該問題的話,這時候 Linux 本身所提供的 bonding 功能倒是可以派上一些用場,也就是該主機安裝兩張甚至多張的 100MBit 網路卡後搭配 Linux 的 bonding 的配置,如此主機本身網路頻寬存取到 switch 網路設備這端,也就可以有倍增的效益。

示意圖如下:
不過這邊要特別說明的是,該網路卡連結的網路設備,不可以使用一般的 HUB,因為買的 100MBit 的 HUB Port 整個傳輸量最高只有 100MBit,需要採用 SWITCH 的設備才可以搭配使用 bonding 功能,要不然無法達成所謂倍增合併的效益。而若是談備援的話,使用 HUB 倒是可以接受,只是實際上 bonding 應用都會搭配 SWITCH 網路設備而不是 HUB。


線路與網路設備備援的機制

下面要來談的就是備援的機制。一般機器要提供網路對外,本身就是安裝一張網路卡然後連結到實體的 HUB/SWITCH 網路設備上,後續該機器就可以連結存取網路服務。在一些特殊環境內,有時後會考量的是擔心機器本身網路卡故障或者是網路線斷裂導致網路不通的問題,會考慮再加裝另外一張網路卡與實體的 HUB/SWITCH 連結,如此有問題時就有備援的網路卡可以派上用場。

示意圖如下:
也就是說,平時只有使用一張網路卡對外提供服務,該連結線路出問題時自動啟用另外一個網路卡連結,這樣達成備援效果。

Linux 的 BONDING 設定使用

要使用 linux bonding 之前,前提當然是主機要有多張網路卡可以連結到實體的 SWITCH 上面,所以假定目前網路環境有兩張網路卡,系統已經驅動配置可以使用,那結果顯示如下:
要配置使用 bonding 功能,首先要掛入 bonding 的 kernel module:

# modprobe bonding miimon=100

其中 miimon 是提供 bonding module 要多久透過 MII 的介面檢查網路卡狀態,100 表示 100 milliseconds。

當掛入成功之後,執行 lsmod 可以查閱是否已經掛入,或者是執行 dmesg 也可以檢閱相關核心提示載入成功資訊。

當載入成功後,系統會建立 bond0 介面,如此即可配置該介面 IP:

# ifconfig bond0 192.168.1.1 netmask 255.255.255.0

完成 bond0 介面的 IP 配置後,後續要告訴系統哪幾個網路介面要綁入到bond0 介面,作法如下:

# ifconfig eth0 down
# ifconfig eth1 down
# ifenslave bond0 eth0 eth1

上面作法,也就是先先確認 eth0 與 eth1 網路介面關閉,然後將 eth0 與eth1 介面放入 bond0 內,告訴系統 bond0 是使用實體 eth0 與 eth1 網路卡提供該實際連結服務。

所以說,整個流程就是使用的命令操作如下:

# modprobe bonding
# ifconfig bond0 192.168.1.1 netmask 255.255.255.0
# ifconfig eth0 down
# ifconfig eth1 down
# ifenslave bond0 eth0 eth1
另外由於 Linux 目前已經逐漸使用 ip 工具取代了 ifconfig 與 route 等指令操作,所以原本上面使用 ifconfig 的指令,可以換成 ip 指令操作。下面也提供使用 ip 指令操作的方式。

# modprobe bonding miimon=100
# ip addr add 192.168.1.1/24 dev bond0
# ip link set eth0 down
# ip link set eth1 down
# ifenslave bond0 eth0 eth1

不過要注意到,這樣只有內部網路通了而已,一般還要配置 default gateway 才可以連結對外,所以不要忘記還要使用像是:

# route add default gw 192.168.1.254 dev bond0

或者是使用 ip route 取代 route 指令

# ip route add default via 192.168.1.254 dev bond0

Linux 的 BONDING 設定檔案

上面已經談完手動配置方式後,下面來談如何在 suse linux 上面設定每次開機都能夠自動完成該組態配置。

目前系統的 eth0 網路卡資訊與配置檔案如下:
 
而另外一張 eth1 網路卡資訊與配置檔案如下:
其中設定檔案名稱都是以 ifcfg-eth-id- 開頭的,後面接網路卡的卡號,所以檔案分別為 ifcfg-eth-id-00:0c:29:05:e1:d9 與ifcfg-eth-id-00:0c:29:05:e1:e3。這些檔案組成就是應對到 eth0 與 eth1 的設定,內容主要是設定如下:

BOOTPROTO=none
STARTUPMODE=off


也就是該介面開啟不要開啟,這樣才可以正常給 bond0 介面套入使用,所以整個結果就是:
後續要建立的就是 ifcfg-bond0 的介面設定檔案,還有配置掛入 bonding 的 kernel module,作法就是於 /etc/sysconfig/network/ 目錄建立 ifcfg-bond0,與修改 /etc/modprobe.conf 檔案達成該需求。

檔案項目,/etc/sysconfig/network/ifcfg-bond0 檔案內容如下:

IPADDR=192.168.1.1
NETMASK=255.255.255.0
BOOTPROTO=static
STARTUPMODE=onboot
BONDING_MASTER=br0
BONDING_SLAVE0=eth0
BONDING_SLAVE0=eth1


檔案項目,由於 /etc/modprobe.conf 會引入 /etc/modprobe.conf.local,所以直接於 /etc/modprobe.conf.local 放置如下內容:

aias bond0 bonding

都完成後,配置的結果如下:
若是要傳給 bonding module 的參數的話,通常可以在於該檔案加上:

options bonding miimon=100

最後測試方式,執行 /etc/init.d/network restart,或者是 rcnetwork restart,確認 bond0 介面是否起來,有的話就表示成功了。
Linux 的 BONDING 模式

前面有提到 bonding 的應用有區分合併 nic 頻寬與備援兩大種功能,剩下來談談這部份與 bonding 核心配置的搭配使用。

在 linux kernel bonding 的 kernel module 內,可以依據傳入 mode=X 的方式來決定運作模式,其中數值可能結果依據官方文件說明如下:

mode=0 (balance-rr)

Round-robin policy: Transmit packets in sequential order from the first available
slave through the last. This mode provides load balancing and fault tolerance.

mode=1 (active-backup)

Active-backup policy: Only one slave in the bond is active. A different slave
becomes active if, and only if, the active slave fails. The bond's MAC address is externally visible on only one port (network adapter) to avoid confusing the switch. This mode provides fault tolerance. The primary option affects the behavior of this mode.

mode=2 (balance-xor)

XOR policy: Transmit based on [(source MAC address XOR'd with destination
MAC address) modulo slave count]. This selects the same slave for each destination MAC address. This mode provides load balancing and fault tolerance.

所以可以依據實際需求決定要使用哪種模式來提供 bonding 功能。一般所謂合併與平衡負載功能部份,選擇 mode=0,而若是要達成 active-backup 架構的話,則選擇使用 mode=1 即可。

設定檔案配置,於 /etc/modprobe.conf.local 放置如下內容即可決定類型:

aias bond0 bonding
options bond0 miimon=100 mode=1
未經授權禁止轉貼節錄 聯成電子報 版權所有 © 2006 All Rights Reserved.