如何在 SLES 下配置 Bonding

如何在 SLES 下配置 Bonding
[| 不指定 2008/11/18 22:34]
大 | 中 | 小
转自: https://www.360docs.net/doc/3d5313413.html,/u/5724/showart_217582.html

Novell TID: 3929220


注意:本文档结尾除含有免责条款。


软件环境
Novell SUSE Linux Enterprise Server 9
Novell SUSE Linux Enterprise Server 10


需求
你想要把几个物理网卡虚拟成一个逻辑上的网卡。 这篇文章并非针对 bonding 所有选项和特性的详细介绍,而是关于如何在 SLES 上配置 bonding 的简单介绍。关于 bonding 的更多资料请参阅内核文件 /usr/src/linux/Documentation/networking/bonding.txt 或访问 bonding 项目的主页。


配置方法
注意:开始配置之前,请参阅下面的 additional notes 小节里的配置前需了解的信息。

在这里我们假设如下的配置脚本,共有两块网卡,它们会被绑定成一块逻辑网卡,这块逻辑网卡工作在 mode=1 (主-从) 方式。目前,YaST2 无法配置 bonding 设备,
因此,我们必须手工编辑 YaST2 所创建的配置文件来生成所需的配置文件。在将来也许会有 YaST2 模块协助我们创建 bonding 相关的配置。

1- 使用 YaST2 配置物理网络设备,配置设备使用DHCP,这样可以少输入一些内容。

2- 编辑已创建的配置文件 /etc/sysconfig/network/ifcfg-eth-id-xx:xx:xx:xx:xx:xx, 并作如下修改:
BOOTPROTO='none'
STARTMODE='off'
留意这些配置文件里的 pci-ids . pci-ids 在配置文件里的表现形式为:
_nm_name+'bus-pci-0000:06:08.1'

3- 为绑定设备在 /etc/sysconfig/network 下创建新的配置文件。将配置文件命名为 ifcfg-bond0。此配置文件应依据实际的用户环境作出相应修改。以下仅是一个例子:
BOOTPROTO='static'
BROADCAST='192.168.1.255'
IPADDR='192.168.1.1'
NETMASK='255.255.255.0'
NETWORK='192.168.1.0'
STARTMODE='onboot'
BONDING_MASTER='yes' ###Note: the line BONDING_MASTER='yes' indicates that the device is a bonding master device.
BONDING_MODULE_OPTS='mode=1 miimon=100 use_carrier=0'
BONDING_SLAVE0='bus-pci-0000:06:08.1'
BONDING_SLAVE1='bus-pci-0000:06:09.1'

BONDING_MODULE_OPTS 是本实例的 bonding 模块参数。可在此传递绑定类型,链路监控等参数。上面的例子里使用 MII 链路检测方法。其它检测方法包括:
netif_carrier 方法
BONDING_MODULE_OPTS='miimon=100 mode=1 use_carrier=1'

ARP monitoring 方法
BONDING_MODULE_OPTS='arp_interval=2500 arp_ip_target=192.168.1.1 mode=1'

为每个从设备准备一个 BONDING_SLAVEn='slave_device' 变量赋值。 'slave_device' 既可为接口名,如: 'eth0',也可为网络设备描述符。 设备名很容易使用,但是这个名字由于是逻辑名因此并非持久命名。它会因网络驱动的加载顺序而改变。设备描述符 'bus-pci-0000:06:08.

1' 指向特定的物理网络设备,除非设备在总线上的位置发生变化(在机器里更换插槽)否则是不会因驱动加载顺序而改变的。


4- 重启网络服务。
rcnetwork restart


检查配置是否生效,执行如下命令:

1- 打开终端,执行命令监控系统日志文件:
tail -f /var/log/messages

2- 打开另外一个终端,ping 绑定接口的 ip 地址:
ping 192.168.1.1

3- 拔掉工作在主模式下的网卡接口的网线

如果配置正确,你会看到 ping 会继续,无论哪个接口处于连接状态。在日志里,会有一个接口链路断掉,另外一个接口被设为主设备的消息。重复插拔网线(也测试另外一根网线)观察日志信息以了解发生的状态转化。



需注意的方面
additional notes
为避免错误发生,建议所有的网卡用相同驱动来驱动。如果使用不同驱动,请考虑如下条件:

* 共有三个驱动相关的选项可用于监测网卡链路状态:MII 链路状态检测,驱动中的 netif_carrier 寄存器和 ARP 监控。

注意使用所有驱动都支持的同种链路监测手段,如果实际情况下不具备这种条件,唯一的解决方案是使用另外的网卡替换现有的网卡。

要想了解所使用的驱动支持哪种监测方法,请参照以下步骤:
MII 链路状态可以由工具 mii-tool 或 ethtool 的输出来判断。

驱动对 netif_carrier 和 ARP 监控方式的支持需要通过访问源代码才能了解。因此需要安装内核源代码。
* 想了解驱动是否支持 netif_carrier,在驱动源代码里搜索关键字:grep netif_carrier $driver_name.c
* 想了解驱动是否支持 ARP 监控方式,驱动必须支持 last_rx 或 trans_start 两个寄存器之一。在驱动源代码里搜索关键字:grep "last_rx\|trans_start" $driver_name.c

在确认过这些信息之后才能开始配置工作。

Linux 绑定驱动提供将多个网络接口绑定聚合成为一个逻辑绑定设备的方法。逻辑绑定设备的行为依赖于其工作模式。简单来讲,可供选择的工作模式包括主-从模式和负载均衡模式。此外,链路完整性检测方法同时应该指明。

绑定可以作哪些工作?通过绑定,可以主要做以下两件工作:
* 将两个或多个网络设备聚合并在虚拟设备上实现负载均衡。有多种均衡算法可对网络流量进行负载均衡。
* 配置两个或多个网络设备当设备失效时在设备间进行切换 (主-从)。

绑定设备从用户的角度来看,与其它常规的网络设备并无区别。例如,可以:

* 在绑定设备上设置 802.1q VLANs。
* sniff 网络通信。
* 等等...

绑定无法胜任哪些任务?绑定在工作时基于对失效链路的检测,如果无法检测出所有出现的网络失效。例如,如下情况

发生,绑定将无法执行正常的功能:

* 链路检测无法正常工作。
* 网卡驱动有 bug 或停止工作。
* 交换机功能在链路出问题的情况下错误的报告链路状态正常。
* 所使用的服务 out of order。
* 路由存在问题。

有时会遇到系统重启之后,不是所有的网络接口都被激活的情况。为避免这种情况发生,在重启的过程中,需要在启动初期即加载所需的模块。如下的手段可用于此种目的:

1. 编辑文件 /etc/sysconfig/kernel 并添加行:MODULES_LOADED_ON_BOOT="$driver_name"。
2. 重启服务器并用 lspci 和 ifconfig 命令检查所有网络设备的状态。
3. 如果这种方法不工作,编辑 /etc/sysconfig/kernel 文件并删除第一步插入的行。修改包含 INITRD_MODULES 语句的行; 添加 driver_name 到此变量赋值中。 如下为此行的例子:INITRD_MODULES="cdrom scsi_mod ide-cd ehci-hcd reiserfs driver_name".
4. 调用 mkinitrd 命令。
5. 重启机器并作检查。

另外一种方法是延迟网络接口的激活时间,一直等到模块被正确加载:

1. 编辑 /etc/sysconfig/network/config 文件并修改变量 WAIT_FOR_INTERFACES 为需要延迟的时间(单位为秒)。要延迟3秒,输入:WAIT_FOR_INTERFACES="3"。
2. 重启服务器检查延迟是否生效。

文档
文档 ID: 3929220
创建日期: 2006-09-12 13:26:45.0
修改日期: 2006-09-12 13:25:34.0
适用Novell产品: SUSE Linux Enterprise Server

转自:https://www.360docs.net/doc/3d5313413.html,/u/5724/showart_34505.html

保持服务器的高可用性接的高可用性是企业级IT 环境的重要因素。其中最重要的一点是服务器网络连环境的重要因素。其中最重要的一点是服务器网络连接的高可用性。网卡(NIC)绑定技术有助于保证高可用性特性并提供其它优势以提高网络性能。


我们在这介绍的Linux双网卡绑定实现就是使用两块网卡虚拟成为一块网卡,这个聚合起来的设备看起来是一个单独的以太网接口设备,通俗点讲就是两块网 卡具有相同的IP地址而并行链接聚合成一个逻辑链路工作。其实这项技术在Sun和Cisco中早已存在,被称为Trunking和 Etherchannel技术,在Linux的2.4.x的内核中也采用这这种技术,被称为bonding。bonding技术的最早应用是在集群—— beowulf上,为了提高集群节点间的数据传输而设计的。下面我们讨论一下bonding的原理,什么是bonding需要从网卡的混杂 (promisc)模式说起。我们知道,在正常情况下,网卡只接收目的硬件地址(MACAddress)是自身Mac的以太网帧,对于别的数据帧都滤掉, 以减轻驱动程序的负担。但是网卡也支持另外一种被称为混杂promisc的模式,可以接收网络上所有的帧,比如说tcpdump,就是运行在个模式下, bonding也运行在

这个模式下,而且修改了驱动程序中的mac地址,将两块网卡的Mac地址改成相同,可以接收特定mac的数据帧。然后把相应的数据 帧传送给bond驱动程序处理。

说了半天理论,其实配置很简单:
绑定的前提条件:芯片组型号相同,而且网卡应该具备自己独立的BIOS芯片


SUSE LINUX Enterprise Server 9下的配置步骤


1. 编辑虚拟网络接口配置文件,指定网卡IP

[sles9:/etc/sysconfig/network]# cp /etc/sysconfig/network/ifcfg.template ifcfg-bond0
[sles9:/etc/sysconfig/network]# vi /etc/sysconfig/network/ifcfg-bond0


2. #vi ifcfg-bond0

#将STARTMODE设置为'onboot'
STARTMODE='onboot'
#将BOOTPROTO设置为'static'
BOOTPROTO='static'
#设置IPADDR
IPADDR=172.31.0.13
#设置子网掩码
NETMASK=255.255.252.0
#设置广播地址
BROADCAST=172.31.3.255



这里要主意,不要在单个网卡的配置文件中指定IP地址设定信息如:地址、子网掩码或网卡ID。将上述信息指定到虚拟(bonding)配置文件ifcfg-bond?中即可。
将IPADDR,NETMASK,BROADCAST的设置从网卡配置文件 /etc/sysconfig/network/ifcfg-eth-id-xx:xx:xx:xx:xx:xx 中删除掉,其中 xx:xx:xx:xx:xx:xx 是要配置bonding 的网卡的 MAC 地址。将BOOTPROTO设置为'static',STARTMODE设置为'onboot'。


3. 编辑/etc/modprobe.conf文件,加入如下内容,系统在加载bonding模块时,使用文件里指定的参数:

alias bond0 bonding
options bond0 miimon=100 mode=1
#options bond0 arp_interval=100 arp_ip_target=xxx.xxx.xxx.xxx mode=1

# if have multi bonding interface, un comment next two lines
#alias bond1 bonding
#options bond1 miimon=100 mode=1
##options bond0 arp_interval=100 arp_ip_target=xxx.xxx.xxx.xxx mode=1

说明:miimon是用来进行链路监测的。比如:miimon=100,那么系统每100ms监测一次链路连接状态,如果有一条线路不通就转入另一条线 路;mode的值表示工作模式,他共有0,1,2,3四种模式,常用的为0,1两种。bonding可以通过两种机制进行链路监控,miimon需要驱动 支持,arp_interval/arp_ip_target不需要驱动支持,arp_interval指定arp检查的时间间隔, arp_ip_target是要反向查询arp的ip地址列表,最多16个,以逗号分隔,例如:arp_interval=100 arp_ip_target=192.168.100.5,192.168.100.6,表示每100毫秒作一次arp检查,如果 192.168.100.5和192.168.100.6的arp检查的结果都失败了,则链路状态为断开,bonding的active interface作出切换。
mode=0表示load balancing(round-robin)为负载均衡方式,两块网卡都工作。
mode=1表示fault-tolerance(active-backup)提供冗余功能,工作方式是主备的工作方式,也就是说默认情况下只有一块网卡工作,另一块做备份。
bonding只能提供链路监测,即从主机到交换机的链路是否接通。如果

只是交换机对外的链路down掉了,而交换机本身并没有故障,那么bonding会认为链路没有问题而继续使用



4 # vi /etc/rc.d/boot.local
加入下面几行
# probe ethernet card kernel module first
/sbin/modprobe e1000

# probe first bonding kernel module
/sbin/insmod bonding miimon=100 mode=1
#/sbin/insmod bonding arp_inerval=100 arp_ip_target=192.168.100.5,192.168.100.6

#if have multi bonding interface, uncomment next line
#/sbin/insmod bonding -o bond1 miimon=100 mode=1

这里我们假设用户只有两块Intel e1000 网卡,首先加载网卡的驱动e1000,如果是其他的网卡使用不同的驱动,然后加载bonding驱动。
实际上在这个阶段需要作的操作是首先按照网卡的逻辑顺序加载网卡驱动,然后在所有网卡的驱动都按所需的顺序成功加载之后再用合适的参数加载bonding驱动。
例如:在逻辑上的 eth0 eth1 为 Intel e1000,eth2 eth3 为 BCM5700,
这种情况下/etc/rc.d/boot.local :

# probe first, second ethernet card kernel module
/sbin/modprobe e1000

# probe third, fourth ethernet card kernel module
/sbin/modprobe bcm5700

# probe first bonding kernel module
/sbin/insmod bonding miimon=100 mode=1
#/sbin/insmod bonding arp_interval=100 arp_ip_target=192.168.100.5,192.168.100.6 mode=1

#if have multi bonding interface, uncomment next line
#/sbin/insmod bonding -o bond1 miimon=100 mode=1

对于链路状态的监控,除了用miimon参数外,还可以用arp_interval/arp_ip_target参数来监控
arp_interval用于配置arp检查的时间间隔,arp_ip_target用于配置在作arp检查时,使用的ip地址,
可以有多个ip地址,用逗号分隔。例如:arp_interval=100 arp_ip_target=10.0.0.1,10.0.0.2

5 添加配置文件 /etc/sysconfig/bonding.conf 和 系统V启动脚本 /etc/init.d/bonding
配置文件 /etc/sysconfig/bonding.conf内容:
declare -a BOND_INTERFACES
declare -a BOND_ARGS
# BOND_INTERFACES: array of bonding interfaces
BOND_INTERFACE=(bond0 bond1)
# BOND_ARGS: array of slaves on each bonding interfaces
BOND_ARGS=("eth0 eth1" "eth2 eth3")

由于粘贴上来的代码包含大括号,我不知道如何让大括号显示出来,所以贴在https://www.360docs.net/doc/3d5313413.html,上了
启动脚本 /etc/init.d/bonding 内容参见网址:
https://www.360docs.net/doc/3d5313413.html,/User_talk:Juwang


6. 编译 ifenslave 工具
可以通过安装iputils软件包安装ifenslave命令。
此外,
ifenslave util's source code was in kernel source packages, if your system do not install it please install kernel-source package first.

# cd /usr/src/linux/Documentation/networking
# gcc -Wall -Wstrict-prototypes -O -I/usr/src/linux/include ifenslave.c -o ifenslave
# cp ifenslave /sbin/ifenslave


7. 为 bonding 创建系统V 启动脚本链接
# chkconfig -a bonding

到这时已经配置完毕, 重新启动网络服务。

# /etc/rc.d/boot.local
# /etc/rc.d/network restart
# /etc/rc.d/bondi

ng start


 下面我们讨论以下mode分别为0,1时的情况
 mode=1工作在主备模式下,这时eth1作为备份网卡是noarp的

[root]#ifconfig验证网卡的配置信息
 bond0 Link encap:Ethernet HWaddr 00:0E:7F:25:D9:8B
inet addr:172.31.0.13 Bcast:172.31.3.255 Mask:255.255.252.0
UP BROADCAST RUNNING MASTER MULTICAST MTU:1500 Metric:1
RX packets:18495 errors:0 dropped:0 overruns:0 frame:0
TX packets:480 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
 RX bytes:1587253 (1.5 Mb) TX bytes:89642 (87.5 Kb)

 eth0 Link encap:Ethernet HWaddr 00:0E:7F:25:D9:8B
inet addr:172.31.0.13 Bcast:172.31.3.255 Mask:255.255.252.0
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:9572 errors:0 dropped:0 overruns:0 frame:0
TX packets:480 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:833514 (813.9 Kb) TX bytes:89642 (87.5 Kb)
Interrupt:11

 eth1 Link encap:Ethernet HWaddr 00:0E:7F:25:D9:8B
inet addr:172.31.0.13 Bcast:172.31.3.255 Mask:255.255.252.0
UP BROADCAST RUNNING NOARP SLAVE MULTICAST MTU:1500 Metric:1
RX packets:8923 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:753739 (736.0 Kb) TX bytes:0 (0.0 b)
Interrupt:15

 

 那也就是说在主备模式下,当一个网络接口失效时(例如主交换机掉电等),不会出现网络中断,系统会按照cat /etc/rc.d/boot.local 里指定网卡的顺序工作,机器仍能对外服务,起到了失效保护的功能。

 在mode=0负载均衡工作模式下,能在提供带宽的负载均衡的同时提供失效保护,我们来看一下网卡的配置信息


[root]# ifconfig
 bond0 Link encap:Ethernet HWaddr 00:0E:7F:25:D9:8B
inet addr:172.31.0.13 Bcast:172.31.3.255 Mask:255.255.252.0
UP BROADCAST RUNNING MASTER MULTICAST MTU:1500 Metric:1
RX packets:2817 errors:0 dropped:0 overruns:0 frame:0
TX packets:95 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
 RX bytes:226957 (221.6 Kb) TX bytes:15266 (14.9Kb)

 eth0 Link encap:Ethernet HWaddr00:0E:7F:25:D9:8B
inet addr:172.31.0.13 Bcast:172.31.3.255 Mask:255.255.252.0
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:1406 errors:0 dropped:0 overruns:0 frame:0
TX packets:48 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
 RX bytes:113967 (111.2 Kb) TX bytes:7268 (7.0 Kb)
Interrupt:11


 eth1 Link encap:Ethernet HWaddr 00:0E:7F:25:D9:8B
inet addr:172.31.0.13 Bcast:172.31.3.255 Mask:255.255.252.0
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:1411 errors:0 dropped:0 overruns:0 frame:0
TX packets:47 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:112990 (110.3 K

b) TX bytes:7998 (7.8 Kb)
Interrupt:15


在这种情况下出现一块网卡失效,仅仅会是服务器出口带宽下降,也不会影响网络使用。
通过查看bond0的工作状态查询能详细的掌握bonding的工作状态

[sles9:~]# cat /proc/net/bond0/info
bonding.c:v2.2.14 (June 30, 2003)
Bonding Mode: load balancing (round-robin)
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Multicast Mode: all slaves

Slave Interface: eth1
MII Status: up
Link Failure Count: 0
Permanent HW addr: 00:0e:7f:25:d9:8a

Slave Interface: eth0
MII Status: up
Link Failure Count: 0
Permanent HW addr: 00:0e:7f:25:d9:8b



SUSE LINUX Enterprise Server 8下的配置步骤

配置步骤与 SLES9 类似,下面只列出区别的地方
(1) SLES8 下内核模块参数的配置是在 /etc/modules.conf
3. 编辑 /etc/modules.conf 文件,加入如下内容,以使系统在启动网络服务时加载bonding模块,对外虚拟网络接口设备为bond0:
alias bond0 bonding
options bond0 miimon=100 mode=1
#options bond0 arp_interval=100 arp_ip_target=xxx.xxx.xxx.xxx,xxx.xxx.xxx.xxx mode=1

(2) SLES8 下的网卡配置文件缺省命名不是 ifcfg-eth-id-xx.xx.xx.xx.xx.xx,而是
将IPADDR,NETMASK,BROADCAST的设置从网卡配置文件
/etc/sysconfig/network/ifcfg-ethn中删除掉,但保留 BOOTPROTO 为static,STARTMODE 为onboot,其中ethn 是逻辑上要加入 bonding 配置的网卡的逻辑设备名。

相关文档
最新文档