PowerRC's Blog

Posted by:
PowerRC

码农,吃货,偶尔飙车和摄影,应该属于危险人物。

5,927

Fedora 20 下设置多网卡绑定(bonding)

置过这么多linux的bonding,最麻烦的是fedora20的,我觉得主要原因如下:
fedora 20的设计理念有点类似windows,为了提供极致的易用性,所以他们就想用GUI搞掂所有linux下的设置。
fedora 20的gnome深度捆绑了fedora的NetworkManager,这玩意暂时不支持bonding,而且也不见得以后会支持。
fedora 20的网卡不再用类似eth0 , eth1这样的设备符映射,而是用了PCI总线的顺序来命名网卡端口,然后网卡就会变成类似p33p1,p4p1这种比较funny的名字了。

因为最近在测试存储服务器的性能,我的开发机的板载网卡有点吃不消(realtek 8169),所以我就加了张broadcom的5761,并设置bonding.
由于刚才上面列出的三个原因,设置就与其他linux有点不一样了。

第一步,先确定device id.
用这个命令
1
#dmesg |grep eth
找出所有网卡的device id,也许有些网卡不是ethx这种命名的,那就要自己把dmesg弄开来慢慢找吧。
我的结果是这样的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[    2.436768] r8169 0000:03:00.0 eth0: RTL8168evl/8111evl at 0xffffc90004e52000, c8:60:00:69:0b:0e, XID 0c900800 IRQ 52
[    2.436771] r8169 0000:03:00.0 eth0: jumbo features [frames: 9200 bytes, tx checksumming: ko]
[    2.448224] tg3 0000:02:00.0 eth1: Tigon3 [partno(BCM95761) rev 5761100] (PCI Express) MAC address 00:10:18:b1:f3:9e
[    2.448227] tg3 0000:02:00.0 eth1: attached PHY is 5761 (10/100/1000Base-T Ethernet) (WireSpeed[1], EEE[0])
[    2.448228] tg3 0000:02:00.0 eth1: RXcsums[1] LinkChgREG[0] MIirq[0] ASF[0] TSOcap[1]
[    2.448230] tg3 0000:02:00.0 eth1: dma_rwctrl[76180000] dma_mask[64-bit]
[    3.182441] r8169 0000:03:00.0 eth0: link down
[    3.182473] r8169 0000:03:00.0 eth0: link down
[    3.182484] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
[    4.572472] IPv6: ADDRCONF(NETDEV_UP): eth1: link is not ready
[    5.555718] r8169 0000:03:00.0 eth0: link up
[    5.555726] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
[  198.439411] bonding: bond0: Adding slave eth0.
[  198.537146] r8169 0000:03:00.0 eth0: link down
[  198.537164] r8169 0000:03:00.0 eth0: link down
[  198.537168] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
[  198.537593] bonding: bond0: making interface eth0 the new active one.
[  198.538071] bonding: bond0: enslaving eth0 as an active interface with an up link.
[  199.940464] bonding: bond0: Adding slave eth1.
[  201.318882] IPv6: ADDRCONF(NETDEV_UP): eth1: link is not ready
[  201.318913] bonding: bond0: enslaving eth1 as an active interface with an up link.
[  201.607655] r8169 0000:03:00.0 eth0: link up
[  203.739466] tg3 0000:02:00.0 eth1: Link is up at 1000 Mbps, full duplex
[  203.739472] tg3 0000:02:00.0 eth1: Flow control is on for TX and on for RX

可以看到,我两张网卡分别是eth1 和eth0

第二步.删除fedora 20的network manager配置文件。
在目录/etc/sysconfig/network-script/下,把原来的ifcfg-p4p1和ifcfg-p33p1等文件删除。(这些配置文件如果日后需要,可以通过setting->network重新自动生成)

第三步,按照老办法设置bonding
新建ifcfg-bond0 , ifcfg-eth0 , ifcfg-eth1(注意,这里的eth0和eth1要根据实际设备id而定)
我的三个文件的内容分别如下
ifcfg-bond0
DEVICE=bond0
ONBOOT=yes
BOOTPROTO=static
IPADDR=172.16.4.81
PREFIX=23
GATEWAY=172.16.4.1
DNS1=8.8.8.8
DNS2=172.16.4.6
USERCTL=no
BONDING_OPTS="mode=5 miimon=100"
NM_CONTROLLED=no
其中dns和静态ip,网关之类的需要根据实际情况来设置。重要的参数仅仅是DEVICE和BOOTPROTO.
需要注意的是,bond0是我自己设置的bonding device id,各位自己设置的时候,请根据实际需要设置,如果你这里设置了别的名字,下面几个文件的内容里,需要把我写的bond0都替换成你的实际名字。

1
2
3
4
5
6
7
8
9
ifcfg-eth0
DEVICE=eth0
TYPE="Ethernet"
BOOTPROTO=none
ONBOOT="yes"
HWADDR=C8:60:00:69:0B:0E
MASTER=bond0
SLAVE=yes
NM_CONTROLLED=no

重要参数除了DEVICE和BOOTPROTO,还有NM_CONTROLLED,必须设置成NO,否则fedora 20的networkmanager会来多管闲事。MASTER要设置成bond的device id(我这里用的是bond0)
ifcfg-eth1和0类似,就是DEVICE改成了eth1

需要在/etc/modprobe.d下新建一个文件bond0.conf,用于让系统在启动时加载bonding这个内核组件,文件内容如下
1
alias bond0 bonding
和上面类似,这里的bond0是实际的bonding device id,我这里用的是bond0

最后一步,也是最关键的一步。彻底关闭NetworkManager
运行这两个命令关闭
#service NetworkManager stop
#chkconfig NetworkManager off
再把基本网络服务打开
#chkconfig network on

done,直接重启电脑或者systemctl network.service restart就可以看到效果。

版权申明

若文中未注明,则本文由 PowerRC 原创,转载请注明出处。

分享

发表评论

*

code

back up ↑