linux如何創建和管理多個不同模式的bond的以及一些細節問題

本文收錄在我的博客  http://www.sskywatcher.com/blog/

 

 本文主要討論一下linux下bonding驅動生成的bond網卡的一些生效的機制,並且描述了通過命令行和配置文件實現管理bond網卡的方法。尤其是需要使用多種不同模式的bond網卡時,只能使用該種配置方式!希望對大家在使用到linux的bond接口時起到一定的幫助。




首先,明確一些關於使用NetworkManager daemon管理bond接口的工作機制

以下將創建的bond接口稱爲master接口,成員物理網卡被稱爲slave接口。

1. 啓動master接口時不會自動去啓動slave接口;

2. 啓動slave接口時總會自動去啓動master接口;

3. 關閉master接口時同時自動關閉slave接口;

4. 沒有任何成員slaves接口的master接口可以配置一個靜態的IP地址並啓動;

5. 一個沒有任何slave接口的master接口,在啓動一個dhcp連接時會等待slave接口;

6. 一個配置了dhcp連接的master接口,將有載波的slave接口加入時,master會等待slave狀態完成纔會啓動完成;

7. 一個配置了dhcp連接的master接口,將一個沒有載波的slave接口加入時,master會一直保持等待slave的狀態正常纔會啓動完成;

使用bonding的前置工作

首先請檢查系統中是否加載了bonding內核模塊,在frdora的發行版中,bonding模塊I默認是沒有加載的,root用戶加載模塊的命令如下:


~]# modprobe --first-time bonding


注意:這種操作是沒有持久化的,即系統重啓後不會自動去加載該模塊。如果想要通過持久化配置來保證開機自動加載改模塊,可以通過在systemd-modules-load.service 的配置文件目錄 /etc/modules-load.d/添加相應模塊的配置文件的發放來是系統啓動時自動加載該模塊。 該配置文件是一個文本文件,在配置文件中每一行列出一個你想要加載的模塊名稱。比如我們先加一個配置文件:bonding.conf,文件內容如下

#insmod bonding when the system is start
bonding

執行下列命令可以查看bonding模塊的信息:

~]$ modinfo bonding

當然,採用本文下面即將描述的方法,並不需要讀者去關注該項配置,只要在相關網卡的配置文件中正確指定了參數,在啓動網卡時即會自動去加載bonding的驅動。

如何修改配置

那麼進入正題,多個不同模式的bonding master接口如何編寫配置文件,需要編寫哪些配置文件?

答案不復雜,就是需要:①每個bonding master的網卡配置文件ifcfg-bondN;②每個成員slave接口的配置文件ifcfg-ethx。

爲了創建一個bonding接口,首先在 /etc/sysconfig/network-scripts/ 目錄創建建master接口的配置文件ifcfg-bondN, 當然了,請將N替換爲你要爲你的bond接口的編號數字,比如 0.注意,在該文件中需要指定3個重要參數,這三個參數是區別與其他網卡類型的關鍵。如下:

TYPE=Bond                                                                 
BONDING_MASTER=yes
BONDING_OPTS="bonding parameters separated by spaces"

BONDING_OPTS支持的的參數

BONDING_OPTS支持的的參數很多,可以使用modinfo查看模塊支持的加載參數列表與說明,常用的有:

miimon=time_in_milliseconds      
mode=value    
至於mode的每個數字代表什麼意思,請諸君自行百度。。

示例

假設我們要創建一個bond0,該master是模式1,那麼配置文件 ifcfg-bond0 示例:


DEVICE=bond0  
NAME=bond0  
TYPE=Bond  
BONDING_MASTER=yes  
IPADDR=192.168.1.1  
PREFIX=24  
ONBOOT=yes  
BOOTPROTO=none  
BONDING_OPTS="mode=1 miimon=100"



完成了master接口配置文件,接下來需要爲每個slave接口配置配置文件了。在slave接口的配置文件中,不同於普通的ethernet網卡的配置項(也就是我們將要加上的配置項)只有一個,那就是:  


MASTER=bond0



假設我們bond0對應了2個slave接口:eth0與eth1,那麼eth0與eth1的配置文件示例:  

ifcfg-eth0:

DEVICE=eth0  
NAME=bond0-slave  
TYPE=Ethernet  
BOOTPROTO=none  
ONBOOT=yes  
MASTER=bond0  
SLAVE=yes
ifcfg-eth1:
DEVICE=eth1  
NAME=bond0-slave  
TYPE=Ethernet  
BOOTPROTO=none  
ONBOOT=yes  
MASTER=bond0  
SLAVE=yes
自此,配置文件完成!  

如何啓用

接下來是啓用網卡,參考文章開頭的一些機制,只要啓動slaves,那麼master自動就激活啦。


~]#ifup eth0  
~]#ifup eth1


當然,下列命令也是可以的。
~]#systemctl restart network.service 

多個bonding

什麼?你說沒有提到多個bonding master?ok,那麼我們還需要一個bond1,模式是2,怎麼辦?好吧,我們只需要把前面bond0的工作重複一下,稍微修改一些東西(可恥的複製粘貼來了)。
我們要額外創建一個bond1,該master是模式2,那麼配置文件 ifcfg-bond1 示例:
DEVICE=bond1  
NAME=bond1  
TYPE=Bond  
BONDING_MASTER=yes  
IPADDR=192.168.2.1  
PREFIX=24  
ONBOOT=yes  
BOOTPROTO=none  
BONDING_OPTS="mode=2 miimon=100"

完成了master接口配置文件,接下來需要爲每個slave接口配置配置文件了。在slave接口的配置文件中,不同於普通的ethernet網卡的配置項(也就是我們將要加上的配置項)只有一個,那就是:  


MASTER=bond1

假設我們bond1對應了2個slave接口:eth2與eth3,那麼eth0與eth1的配置文件示例:  

ifcfg-eth2:

DEVICE=eth2  
NAME=bond0-slave  
TYPE=Ethernet  
BOOTPROTO=none  
ONBOOT=yes  
MASTER=bond1  
SLAVE=yes
ifcfg-eth3:
DEVICE=eth3  
NAME=bond0-slave  
TYPE=Ethernet  
BOOTPROTO=none  
ONBOOT=yes  
MASTER=bond1  
SLAVE=yes

接下來同理啓動slave接口或者直接重啓網絡服務,就ok啦。

最後,特別注意

請不要使用在模塊加載默認參數配置文件  /etc/modprobe.d/bonding.conf 中指定任何參數,甚至不要創建這個文件,雖然通過這個文件可以配合slave接口的配置文件來完成創建多個相同模式的bonding master接口的工作,但是對於不同模式等參數不一致的情況,這種方法並不能很好的工作。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章