zoukankan      html  css  js  c++  java
  • Linux--多网卡的7种Bond模式

     

    网卡bond是通过把多张网卡绑定为一个逻辑网卡,实现本地网卡的冗余,带宽扩容和负载均衡。在应用部署中是一种常用的技术,我们公司基本所有的项目相关服务器都做了bond,这里总结整理,以便待查。

    bond模式:

    1. Mode=0(balance-rr) 表示负载分担round-robin,和交换机的聚合强制不协商的方式配合。
    2. Mode=1(active-backup) 表示主备模式,只有一块网卡是active,另外一块是备的standby,这时如果交换机配的是捆绑,将不能正常工作,因为交换机往两块网卡发包,有一半包是丢弃的。
    3. Mode=2(balance-xor) 表示XOR Hash负载分担,和交换机的聚合强制不协商方式配合。(需要xmit_hash_policy)
    4. Mode=3(broadcast) 表示所有包从所有interface发出,这个不均衡,只有冗余机制...和交换机的聚合强制不协商方式配合。
    5. Mode=4(802.3ad) 表示支持802.3ad协议,和交换机的聚合LACP方式配合(需要xmit_hash_policy)
    6. Mode=5(balance-tlb) 是根据每个slave的负载情况选择slave进行发送,接收时使用当前轮到的slave
    7. Mode=6(balance-alb) 在5的tlb基础上增加了rlb。

    5和6不需要交换机端的设置,网卡能自动聚合。4需要支持802.3ad。0,2和3理论上需要静态聚合方式
    但实测中0可以通过mac地址欺骗的方式在交换机不设置的情况下不太均衡地进行接收。

    常用的有三种

    mode=0:平衡负载模式,有自动备援,但需要”Switch”支援及设定。

    mode=1:自动备援模式,其中一条线若断线,其他线路将会自动备援。

    mode=6:平衡负载模式,有自动备援,不必”Switch”支援及设定。

    需要说明的是如果想做成mode 0的负载均衡,仅仅设置这里options bond0 miimon=100 mode=0是不够的,与网卡相连的交换机必须做特殊配置(这两个端口应该采取聚合方式),因为做bonding的这两块网卡是使用同一个MAC地址.从 原理分析一下(bond运行在mode 0下):

    mode 0下bond所绑定的网卡的IP都被修改成相同的mac地址,如果这些网卡都被接在同一个交换机,那么交换机的arp表里这个mac地址对应的端口就有 多 个,那么交换机接受到发往这个mac地址的包应该往哪个端口转发呢?正常情况下mac地址是全球唯一的,一个mac地址对应多个端口肯定使交换机迷惑 了。所以 mode0下的bond如果连接到交换机,交换机这几个端口应该采取聚合方式(cisco称 为 ethernetchannel,foundry称为portgroup),因为交换机做了聚合后,聚合下的几个端口也被捆绑成一个mac地址.我们 的解 决办法是,两个网卡接入不同的交换机即可。

    mode6模式下无需配置交换机,因为做bonding的这两块网卡是使用不同的MAC地址。

    Linux网口绑定

    通过网口绑定(bond)技术,可以很容易实现网口冗余,负载均衡,从而达到高可用高可靠的目的。前提约定:

    2个物理网口分别是:eth0,eth1

    绑定后的虚拟口是:bond0

    服务器IP是:192.168.0.100

    第一步,配置设定文件:

    /etc/sysconfig/network-scripts/ifcfg-bond0

    DEVICE=bond0

    BOOTPROTO=none

    ONBOOT=yes

    IPADDR=192.168.0.100

    NETMASK=255.255.255.0

    NETWORK=192.168.0.0

    BROADCAST=192.168.0.255

    #BROADCAST广播地址

    /etc/sysconfig/network-scripts/ifcfg-eth0

    DEVICE=eth0

    BOOTPROTO=none

    MASTER=bond0

    SLAVE=yes

    /etc/sysconfig/network-scripts/ifcfg-eth1

    DEVICE=eth1

    BOOTPROTO=none

    MASTER=bond0

    SLAVE=yes

    第二步,修改modprobe相关设定文件,并加载bonding模块:

    1.在这里,我们直接创建一个加载bonding的专属设定文件/etc/modprobe.d/bonding.conf

    [root@test ~]# vi /etc/modprobe.d/bonding.conf

    #追加

    alias bond0 bonding

    options bonding mode=0 miimon=200

    2.加载模块(重启系统后就不用手动再加载了)

    [root@test ~]# modprobe bonding

    3.确认模块是否加载成功:

    [root@test ~]# lsmod | grep bonding

    bonding 100065 0

    第三步,重启一下网络,然后确认一下状况:

    [root@test ~]# /etc/init.d/network restart

    [root@test ~]# cat /proc/net/bonding/bond0

    Ethernet Channel Bonding Driver: v3.5.0 (November 4, 2008)

    Bonding Mode: fault-tolerance (active-backup)

    Primary Slave: None

    Currently Active Slave: eth0

    ……

     [root@test ~]# ifconfig | grep HWaddr

    bond0 Link encap:Ethernet HWaddr 00:16:36:1B:BB:74

    eth0 Link encap:Ethernet HWaddr 00:16:36:1B:BB:74

    eth1 Link encap:Ethernet HWaddr 00:16:36:1B:BB:74

    从上面的确认信息中,我们可以看到3个重要信息:

    1.现在的bonding模式是active-backup

    2.现在Active状态的网口是eth0

    3.bond0,eth1的物理地址和处于active状态下的eth0的物理地址相同,这样是为了避免上位交换机发生混乱。

    任意拔掉一根网线,然后再访问你的服务器,看网络是否还是通的。

    第四步,系统启动自动绑定、增加默认网关:

    [root@test ~]# vi /etc/rc.d/rc.local

    #追加

    ifenslave bond0 eth0 eth1

    route add default gw 192.168.0.1

    #如可上网就不用增加路由,0.1地址按环境修改.

    ------------------------------------------------------------------------

    留心:前面只是2个网口绑定成一个bond0的情况,如果我们要设置多个bond口,比如物理网口eth0和eth1组成bond0,eth2和eth3组成bond1,

    那么网口设置文件的设置方法和上面第1步讲的方法相同,只是/etc/modprobe.d/bonding.conf的设定就不能像下面这样简单的叠加了:

    alias bond0 bonding

    options bonding mode=1 miimon=200

    alias bond1 bonding

    options bonding mode=1 miimon=200

    正确的设置方法有2种:

    第一种,你可以看到,这种方式的话,多个bond口的模式就只能设成相同的了:

    alias bond0 bonding

    alias bond1 bonding

    options bonding max_bonds=2 miimon=200 mode=1

    第二种,这种方式,不同的bond口的mode可以设成不一样:

    alias bond0 bonding

    options bond0 miimon=100 mode=1

    install bond1 /sbin/modprobe bonding -o bond1 miimon=200 mode=0

    仔细看看上面这2种设置方法,现在如果是要设置3个,4个,甚至更多的bond口,你应该也会了吧!

    后记:简单的介绍一下上面在加载bonding模块的时候,options里的一些参数的含义:

    miimon 监视网络链接的频度,单位是毫秒,我们设置的是200毫秒。

    max_bonds 配置的bond口个数

    mode bond模式,在一般的实际应用中,0和1用的比较多,

  • 相关阅读:
    【转】win8.1下安装ubuntu
    Codeforces 1025G Company Acquisitions (概率期望)
    Codeforces 997D Cycles in Product (点分治、DP计数)
    Codeforces 997E Good Subsegments (线段树)
    Codeforces 1188E Problem from Red Panda (计数)
    Codeforces 1284E New Year and Castle Building (计算几何)
    Codeforces 1322D Reality Show (DP)
    AtCoder AGC043C Giant Graph (图论、SG函数、FWT)
    Codeforces 1305F Kuroni and the Punishment (随机化)
    AtCoder AGC022E Median Replace (字符串、自动机、贪心、计数)
  • 原文地址:https://www.cnblogs.com/lcword/p/5914089.html
Copyright © 2011-2022 走看看