【Linux】Bonding配置,管理

楊奇龍發表於2011-11-27
1 透過Ifenslave手動配置Bonding 
該方法適用於某些發行包,它們的網路初始化指令碼(sysconfig或initscripts包)沒有bonding相關的知識。SuSE Linux Enterprise Server 版本8就是這樣的一個發行包。 
對於這些系統一般的方法是,把bonding模組的引數放進/etc/modules.conf或者/etc/modprobe.conf(針對不同的安裝發行包),然後在系統的全域性初始化指令碼里增加modprobe和/或ifenslave命令。對於sysconfig,全域性初始化指令碼是/etc/init.d/boot.local,而對於initscripts,它是/etc/rc.d/rc.local。 
比如,如果你想要實現一個簡單的帶兩個e100裝置(比如eth0和eth1)的bond,而且希望它在重啟後還能存在,那麼編輯對應的檔案(/etc/init.d/boot.local或/etc/rc.d/rc.local),在裡面加上: 
modprobe bonding mode=balance-alb miimon=100 
modprobe e100 
ifconfig bond0 192.168.1.1 netmask 255.255.255.0 up 
ifenslave bond0 eth0 eth1 
把示例裡bonding模組引數以及bond0的網路配置(IP地址,掩碼等)修改為對應系統的正確配置,不幸的是,這個方法不提供對bond裝置上的ifup和ifdown指令碼支援,為了重新載入bonding配置,你必須執行初始化指令碼,比如: 
# /etc/init.d/boot.local 
或者 
# /etc/rc.d/rc.local 
針對這種情況,理想的做法是,建立一個獨立的指令碼用於初始化bonding配置,然後在boot.local中呼叫這個獨立的指令碼,這樣就可以不重啟整個全域性初始化指令碼就開啟bonding。 
為了關閉bonding裝置,你首先需要把bonding裝置標記為正在關閉,然後移除對應的裝置驅動模組。針對我們上面的例子,你可以這樣關閉: 
# ifconfig bond0 down 
# rmmod bonding 
# rmmod e100 
同樣的,方便起見,最好把這些命令建立在一個獨立的指令碼里。 
2 手動配置多個Bonds 
針對那些網路初始化指令碼缺少對多bonds配置支援的系統,這裡介紹了透過不同的選項配置多bonding裝置的方法。 
如果你需要配置多bonding裝置,但所有裝置使用同樣的選項,你可能希望使用"max_bonds"模組引數,就像上文描述的一樣.為了建立多個不同選項的bonding裝置,需要多次載入bonding驅動。要說明的是,當前版本的sysconfig網路初始化指令碼自動處理這些,如果你的發行包這些指令碼,你不需要額外的操作,參看上文的"配置Bonding驅動",如果你不確定你的網路初始化指令碼是否支援。 
為了載入模組的多個例項,需要為每個例項指定一個不同的名字(模組載入系統需要每個載入的模組有唯一的名字,即便它們是同一個模組的不同例項)。這可以透過在/etc/modprobe.conf中指定多個bonding選項,比如: 
alias bond0 bonding 
options bond0 -o bond0 mode=balance-rr miimon=100 
alias bond1 bonding 
options bond1 -o bond1 mode=balance-alb miimon=50 
這將會兩次載入bonding模組。第一個例項命名為"bond0",將會以balance-rr模式建立bond0裝置,同時使用引數miimon為100。
第二個例項命名為"bond1",將會以balance-alb模式建立bond1裝置,同時使用引數miimon為50。 
在某些情況下(通常是較老的發行包),上述引數不能工作,第二個bonding例項不會用到它的選項。在這種情況下,第二個選項可以用如下的選項替換: 
install bond1 /sbin/modprobe --ignore-install bonding -o bond1 \ 
mode=balance-alb miimon=50 
這些選項可以重複任意次,以指定任意多個bonding例項,只需要為每個依次的例項指定一個唯一的名字,以替換bond1即可。 
3 透過Sysfs手工配置Bonding 
從版本3.0開始,Channel Bonding可以透過sysfs介面進行配置。sysfs介面允許在不解除安裝模組的情況下動態配置所有bonds,它也可以在執行時增加和移處bonds。Ifenslave已經不再需要了,儘管它還被支援。使用sysfs介面允許你在不重新載入模組的情況下,對多個bonds使用不同的配置;也允許你使用多個不同配置的bonds,在bonding被編譯進核心的時候。 
   你必須mount了sysfs檔案系統,以配置bonding。本文裡的示例假定你標準的sysfs的mount點,即/sys,如果你的sysfs檔案系統被mount在其他地方,你需要對應地調整示例裡的路徑。 
建立和銷燬Bonds 
增加一個新的bond(foo): 
# echo +foo > /sys/class/net/bonding_masters 
移除一個已存在的bond(bar): 
# echo -bar > /sys/class/net/bonding_masters 
顯示所有存在的bonds: 
# cat /sys/class/net/bonding_masters 
注意:由於sysfs檔案的4K大小限制,如果你好多bonds,這個列表可能被截斷。這在通常的情況下並不常見。 
增加和移除Slaves 
透過使用檔案/sys/class/net//bonding/slaves,我們可以把網路介面從屬於某個bond,這個檔案的語義和bonding_masters檔案是完全相同的。 
把eth0加入bond(bond0): 
# ifconfig bond0 up 
# echo +eth0 > /sys/class/net/bond0/bonding/slaves 
從bond(bond0)裡移除eth0: 
# echo -eth0 > /sys/class/net/bond0/bonding/slaves 
  注意:bond必須在slave加入之前啟動,所有slave必須在bond介面斷開前移除。 
  當一個網路介面加入某個bond,sysfs檔案系統裡會在兩者間建立符號連結,在這時,你可以看到/sys/class/net/bond0/slave_eth0指向/sys/class/net/eth0,而/sys/class/net/eth0/master指向/sys/class/net/bond0。 
  這意味著你可以透過檢視master的符號連結很快地知道一個介面有沒有被加入。這樣的話: 
# echo -eth0 > /sys/class/net/eth0/master/bonding/slaves 
將會把eth0正確地從它所從屬的bond上移除,而不需要指定bond介面的名字。 
改變Bond的配置 
每個bond可以獨立地配置,透過操縱位於/sys/class/net//bonding下的檔案。 這些檔案的名字直接對應於本文裡描述的命令列引數,除了arp_ip_target是個例外,它們總是接受同樣的值。你可以直接把對應檔案cat出來看當前的設定。 
把bond0配置為balance-alb模式: 
# ifconfig bond0 down 
# echo 6 > /sys/class/net/bond0/bonding/mode 
- 或者 - 
# echo balance-alb > /sys/class/net/bond0/bonding/mode 
  注意:在修改模式前,請先斷開bond介面。 
在bond0上啟用MII監控,使用1秒的時間間隔: 
# echo 1000 > /sys/class/net/bond0/bonding/miimon 
  注意:如果ARP監控被啟用,當MII監控啟用時它會被禁止,反之亦然。 
增加ARP目的地址: 
# echo +192.168.0.100 > /sys/class/net/bond0/bonding/arp_ip_target 
# echo +192.168.0.101 > /sys/class/net/bond0/bonding/arp_ip_target 
  注意:最多可以指定十個目的地址。
移除ARP目的地址: 
# echo -192.168.0.100 > /sys/class/net/bond0/bonding/arp_ip_target 
配置示例 
為了生成一個簡單的帶兩個e100裝置(假定為eth0和eth1)的bond,而且希望它在重啟後依然存在,你可以編輯對應的檔案(/etc/init.d/boot.local or /etc/rc.d/rc.local),加入如下內容: 
modprobe bonding 
modprobe e100 
echo balance-alb > /sys/class/net/bond0/bonding/mode 
ifconfig bond0 192.168.1.1 netmask 255.255.255.0 up 
echo 100 > /sys/class/net/bond0/bonding/miimon 
echo +eth0 > /sys/class/net/bond0/bonding/slaves 
echo +eth1 > /sys/class/net/bond0/bonding/slaves 
下面增加第二個bond,帶有兩個e1000介面,工作於active-backup模式,使用ARP監控,把如下內容加入到你的初始化指令碼里: 
modprobe e1000 
echo +bond1 > /sys/class/net/bonding_masters 
echo active-backup > /sys/class/net/bond1/bonding/mode 
ifconfig bond1 192.168.2.1 netmask 255.255.255.0 up 
echo +192.168.2.100 /sys/class/net/bond1/bonding/arp_ip_target 
echo 2000 > /sys/class/net/bond1/bonding/arp_interval 
echo +eth2 > /sys/class/net/bond1/bonding/slaves 
echo +eth3 > /sys/class/net/bond1/bonding/slaves 
我自己的測試:
[root@rac4 network-scripts]# echo -eth1 > /sys/class/net/bond0/bonding/slaves 
[root@rac4 network-scripts]# cat /proc/net/bonding/bond0 
Ethernet Channel Bonding Driver: v3.2.4 (January 28, 2008)
Bonding Mode: load balancing (round-robin)
MII Status: up
MII Polling Interval (ms): 0
Up Delay (ms): 0
Down Delay (ms): 0
Slave Interface: eth0
MII Status: up
Link Failure Count: 0
Permanent HW addr: 00:50:56:8f:22:48
[root@rac4 network-scripts]# echo +eth1 > /sys/class/net/bond0/bonding/slaves  
[root@rac4 network-scripts]# cat /proc/net/bonding/bond0                 
Ethernet Channel Bonding Driver: v3.2.4 (January 28, 2008)
Bonding Mode: load balancing (round-robin)
MII Status: up
MII Polling Interval (ms): 0
Up Delay (ms): 0
Down Delay (ms): 0
Slave Interface: eth0
MII Status: up
Link Failure Count: 0
Permanent HW addr: 00:50:56:8f:22:48
Slave Interface: eth1
MII Status: up
Link Failure Count: 0
Permanent HW addr: 00:50:56:8f:7d:6f
bond yql 只是一個例子,沒有相對應的配置檔案
[root@rac4 network-scripts]# echo +yql > /sys/class/net/bonding_masters 
[root@rac4 network-scripts]# cat /sys/class/net/bonding_masters    
bond0 yql
[root@rac4 network-scripts]# cat /proc/net/bonding/yql 
Ethernet Channel Bonding Driver: v3.2.4 (January 28, 2008)
Bonding Mode: load balancing (round-robin)
MII Status: down
MII Polling Interval (ms): 0
Up Delay (ms): 0
Down Delay (ms): 0
4 檢視Bonding配置 
每個bonding裝置對應於一個只讀檔案,存在於/proc/net/bonding目錄,檔案內容包括bonding配置的資訊,選項以及每個slave的狀態。 
例如,在使用引數mode=0,miimon=1000時,載入驅動後,/proc/net/bonding/bond0的內容為: 
[root@rac4 ~]# cat /proc/net/bonding/bond0 
Ethernet Channel Bonding Driver: v3.2.4 (January 28, 2008)
Bonding Mode: load balancing (round-robin)
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Slave Interface: eth0
MII Status: up
Link Failure Count: 0
Permanent HW addr: 00:50:56:8f:22:48
Slave Interface: eth1
MII Status: up
Link Failure Count: 0
Permanent HW addr: 00:50:56:8f:7d:6f
根據你配置、狀態、以及bonding驅動版本的差異,上述內容的精確格式和內容有可能不同。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22664653/viewspace-712170/,如需轉載,請註明出處,否則將追究法律責任。

相關文章