本文收錄在我的博客 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=yesifcfg-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=yesifcfg-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接口的工作,但是對於不同模式等參數不一致的情況,這種方法並不能很好的工作。