免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3721 | 回复: 3
打印 上一主题 下一主题

[系统管理] linux 双网卡绑定(bonding)实现故障转移 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-06-06 00:00 |只看该作者 |倒序浏览
本帖最后由 永夜之魂 于 2013-06-06 13:59 编辑

linux 双网卡绑定(bonding)实现故障转移
===========================================================================================================================================================
原理:
    Linux双网卡绑定实现就是使用两块网卡虚拟成为一块网卡,这个聚合起来的设备看起来是一个单独的以太网接口设备,通俗点讲就是两块网卡具有相同的IP地址而并行链接聚合成一个逻辑链路工作。其实这项技术在Sun和Cisco中早已存在,被称为Trunking和Etherchannel技术,在Linux的2.4.x的内核中也采用这这种技术,被称为bonding。bonding技术的最早应用是在集群——beowulf上,为了提高集群节点间的数据传输而设计的。bonding需要从网卡的混杂(promisc)模式说起。在正常情况下,网卡只接收目的硬件地址(MAC Address)是自身Mac的以太网帧,对于别的数据帧都滤掉,以减轻驱动程序的负担。但是网卡也支持另外一种被称为混杂promisc的模式,可以接收网络上所有的帧,比如说tcpdump,就是运行在这个模式下。bonding也运行在这个模式下,而且修改了驱动程序中的mac地址,将两块网卡的Mac地址改成相同,可以接收特定mac的数据帧。然后把相应的数据帧传送给bond驱动程序处理。直接给两块网卡设置同一IP地址是不可能的。Kernels 2.4.12及以后的版本均供bonding模块,以前的版本可以通过patch实现。


===========================================================================================================================================================
硬件环境:
    CentOS release 5.6 (Final)虚拟机2台(一台做配置,一台测试)
    需要配置的虚拟机拥有三块网卡:eth0、eth1、eth2(其中eth1的IP地址为10.18.5.85,eth0、eth2的IP地址为192.168.1.2)
    测试机IP为:10.18.5.52
    虚拟机中需要做的配置:85的eth2以及测试机的eth0接入方式均为桥接,eth0、eth2为host-only模式


===========================================================================================================================================================
1、编辑虚拟网络接口配置文件,指定网卡IP
    假设eth1是对外服务的网卡,已经调试好网络;eth2是与eth0实现故障转移的网卡。
        # cd /etc/sysconfig/network-scripts/
        # vi ifcfg-bond0
   
    bond0的信息如下
        DEVICE=bond0
        TYPE=Ethernet
        ONBOOT=yes
        BOOTPROTO=none
        IPADDR=192.168.1.2
        NETMASK=255.255.255.0
        GATEWAY=10.18.5.85
        USERCTL=no
        BONDING_OPTS="mode=1 primary=eth2 miimon=100"  
   
    #mode指定了bond0的工作模式,常用的是0和1,0表示负载均衡方式,1表示主从方式,可根据需要自行配置。常用的为0,1两种。mode=0表示load balancing (round-robin)为负载均衡方式,两块网卡都工作。mode=1表示fault-tolerance (active-backup)提供冗余功能,工作方式是主备的工作方式,也就是说默认情况下只有一块网卡工作,另一块做备份。bonding只能提供链路监测,即从主机到交换机的链路是否接通。如果只是交换机对外的链路down掉了,而交换机本身并没有故障,那么bonding会认为链路没有问题而继续使用。miimon是用来进行链路监测的。比如:miimon=100,那么系统每100ms监测一次链路连接状态,如果有一条线路不通就转入另一条线路。


2、配置eth网卡
    这里我偷个懒,把自己配置文件贴出来。
    eth0:
        [root@click365_test1 network-scripts]# cat ifcfg-eth0
        DEVICE=eth0
        TYPE=Ethernet
        ONBOOT=yes
        BOOTPROTO=none
        MASTER=bond0
        SLAVE=yes
        USERCTL=yes
       
    eth2:
    [root@click365_test1 network-scripts]# cat ifcfg-eth2
        DEVICE=eth2
        TYPE=Ethernet
        ONBOOT=yes
        BOOTPROTO=none
        MASTER=bond0
        SLAVE=yes
        USERCTL=yes


3、加载模块,让系统支持bonding
    默认情况下,内核已支持bonding,只需要简单修改/etc/modprobe.conf 这个配置文档就可以了:添加两行
        alias bond0 bonding
        #options bond0 miimon=100 mode=1(由于我已经在bond0中定义了工作模式,所以直接注释掉)


4、在测试机上添加到bond0的路由
    我直接写的是永久路由,当然也可以添加一条临时路由。
        [root@click365-test2 ~]# cat /etc/rc.d/rc.local
        route add 192.168.1.2 gw 10.18.5.85 dev eth0


5、重启
    reboot或者service network restart 都可以。


===========================================================================================================================================================
测试:
    测试主要依赖于ping命令的检查,以及/proc/net/bonding/bond0的内容。
1、85上bond0的状态
    由于我在bond0中指定了处于active状态的是eth2,如下:
        [root@click365_test1 network-scripts]# cat /proc/net/bonding/bond0
        Ethernet Channel Bonding Driver: v3.4.0-1 (October 7, 200

        Bonding Mode: fault-tolerance (active-backup)
        Primary Slave: eth2 (primary_reselect always)
        Currently Active Slave: eth2
        MII Status: up
        MII Polling Interval (ms): 100
        Up Delay (ms): 0
        Down Delay (ms): 0

        Slave Interface: eth0
        MII Status: up
        Speed: 100 Mbps
        Duplex: full
        Link Failure Count: 0
        Permanent HW addr: 00:0c:29:ab:ac:8c

        Slave Interface: eth2
        MII Status: up
        Speed: 100 Mbps
        Duplex: full
        Link Failure Count: 0
        Permanent HW addr: 00:0c:29:ab:ac:a0

2、由52上直接ping配置机的bond0
        [root@click365-test2 ~]# ping -c5 192.168.1.2
        PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.
        64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=0.248 ms
        64 bytes from 192.168.1.2: icmp_seq=2 ttl=64 time=0.297 ms
        64 bytes from 192.168.1.2: icmp_seq=3 ttl=64 time=0.212 ms
        64 bytes from 192.168.1.2: icmp_seq=4 ttl=64 time=0.291 ms
        64 bytes from 192.168.1.2: icmp_seq=5 ttl=64 time=0.278 ms

        --- 192.168.1.2 ping statistics ---
        5 packets transmitted, 5 received, 0% packet loss, time 3996ms
        rtt min/avg/max/mdev = 0.212/0.265/0.297/0.033 ms

3、down掉配置机上的eth2,看eth0是否接管过去,并且仍然可以ping通
     配置机:
        [root@click365_test1 network-scripts]# ifdown eth2
        [root@click365_test1 network-scripts]# ifconfig
        bond0     Link encap:Ethernet  HWaddr 00:0C:29:AB:AC:8C  
                  inet addr:192.168.1.2  Bcast:192.168.1.255  Mask:255.255.255.0
                  UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1
                  RX packets:20280 errors:0 dropped:0 overruns:0 frame:0
                  TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
                  collisions:0 txqueuelen:0
                  RX bytes:1899237 (1.8 MiB)  TX bytes:288 (288.0 b)

        eth0      Link encap:Ethernet  HWaddr 00:0C:29:AB:AC:8C  
                  UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1
                  RX packets:20280 errors:0 dropped:0 overruns:0 frame:0
                  TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
                  collisions:0 txqueuelen:1000
                  RX bytes:1899237 (1.8 MiB)  TX bytes:288 (288.0 b)
                  Interrupt:193 Base address:0x2000

        eth1      Link encap:Ethernet  HWaddr 00:0C:29:AB:AC:96  
                  inet addr:10.18.5.85  Bcast:10.18.5.255  Mask:255.255.255.0
                  UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
                  RX packets:53926 errors:0 dropped:0 overruns:0 frame:0
                  TX packets:6569 errors:0 dropped:0 overruns:0 carrier:0
                  collisions:0 txqueuelen:1000
                  RX bytes:6384535 (6.0 MiB)  TX bytes:690927 (674.7 KiB)
                  Interrupt:193 Base address:0x2080

        lo        Link encap:Local Loopback  
                  inet addr:127.0.0.1  Mask:255.0.0.0
                  UP LOOPBACK RUNNING  MTU:16436  Metric:1
                  RX packets:51 errors:0 dropped:0 overruns:0 frame:0
                  TX packets:51 errors:0 dropped:0 overruns:0 carrier:0
                  collisions:0 txqueuelen:0
                  RX bytes:5060 (4.9 KiB)  TX bytes:5060 (4.9 KiB)

        [root@click365_test1 network-scripts]# cat /proc/net/bonding/bond0
        Ethernet Channel Bonding Driver: v3.4.0-1 (October 7, 200

        Bonding Mode: fault-tolerance (active-backup)
        Primary Slave: None
        Currently Active Slave: eth0
        MII Status: up
        MII Polling Interval (ms): 100
        Up Delay (ms): 0
        Down Delay (ms): 0

        Slave Interface: eth0
        MII Status: up
        Speed: 100 Mbps
        Duplex: full
        Link Failure Count: 0
        Permanent HW addr: 00:0c:29:ab:ac:8c
   此时可以很清楚的看到,eth2已经down掉,bond0仅有eth0工作。

测试机:
        [root@click365-test2 ~]# ping -c5 192.168.1.2
        PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.
        64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=2.46 ms
        64 bytes from 192.168.1.2: icmp_seq=2 ttl=64 time=0.336 ms
        64 bytes from 192.168.1.2: icmp_seq=3 ttl=64 time=0.278 ms
        64 bytes from 192.168.1.2: icmp_seq=4 ttl=64 time=0.262 ms
        64 bytes from 192.168.1.2: icmp_seq=5 ttl=64 time=0.307 ms

        --- 192.168.1.2 ping statistics ---
        5 packets transmitted, 5 received, 0% packet loss, time 4000ms
        rtt min/avg/max/mdev = 0.262/0.730/2.468/0.869 ms


至此,测试OK。

论坛徽章:
381
CU十二周年纪念徽章
日期:2014-01-04 22:46:58CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-03-13 15:38:15CU大牛徽章
日期:2013-03-13 15:38:52CU大牛徽章
日期:2013-03-14 14:08:55CU大牛徽章
日期:2013-04-17 11:17:19CU大牛徽章
日期:2013-04-17 11:17:32CU大牛徽章
日期:2013-04-17 11:17:37CU大牛徽章
日期:2013-04-17 11:17:42CU大牛徽章
日期:2013-04-17 11:17:47CU大牛徽章
日期:2013-04-17 11:17:52CU大牛徽章
日期:2013-04-17 11:17:56
2 [报告]
发表于 2013-06-06 07:59 |只看该作者
写的非常详细,赞一个

论坛徽章:
48
15-16赛季CBA联赛之青岛
日期:2021-01-07 13:41:2315-16赛季CBA联赛之上海
日期:2020-12-01 18:02:0720周年集字徽章-20	
日期:2020-10-28 14:14:2620周年集字徽章-20	
日期:2020-10-28 14:04:3015-16赛季CBA联赛之天津
日期:2020-10-18 22:51:412016猴年福章徽章
日期:2016-02-18 15:30:3415-16赛季CBA联赛之北控
日期:2015-12-22 13:30:48操作系统版块每日发帖之星
日期:2015-12-07 06:20:00操作系统版块每日发帖之星
日期:2015-09-04 06:20:002015亚冠之德黑兰石油
日期:2015-08-05 18:46:082015年亚洲杯之巴勒斯坦
日期:2015-04-19 10:42:502015年亚洲杯之巴林
日期:2015-04-09 08:03:23
3 [报告]
发表于 2013-06-06 10:10 |只看该作者
我说后面怎么没看到eth2了~谢谢分享~

论坛徽章:
0
4 [报告]
发表于 2013-06-06 14:03 |只看该作者
回复 3# lbseraph


    呵呵,可能是我搞的比较复杂,添加了三块虚拟网卡
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP