Welcome 微信登录

首页 / 操作系统 / Linux / Linux bonding的初始状态问题以及解决

问题:Linux下启动一个bonding网卡,往其里面添加两个根本就没有插着网线的网卡,拉起该bonding后,ifconfig发现其有RUNNING标志,然后将其一个slave插上网线再拔掉,ifconfig就没有RUNNING标志了。分析:这个问题实际上无伤大雅,只是在第一次欺骗一下OS而已,然而却会影响到keepalived的track_interfaces配置,进而影响基于VRRP的热备切换,导致拥有没有插着网线的机器的热备组中的若干台机器一旦重启,其热备状态就会混乱。没有插线的机器无论如何也不能是MASTER,可是keepalived看到了bonding网卡的RUNNING标志,误认为其已经可以使用,进而可能成为MASTER状态。解析与修正:如果仅仅为了短平快的解决当下问题,那么最简单不过的就是将keepalived中基于RUNNING的判断换成基于LOWER_UP的判断,LOWER_UP就是标识网卡有没有插线的(但不绝对,还可能受别的因素影响,但是大多数情况-显然并非全部情况下可以这么认为),事实证明这是完全可以的,问题解决了。但是却违反了track_interfaces的初衷,因此这种改法不好!在彻底修正这个问题之前还是需要了解网卡的各种状态以及层次。总体来讲,网卡state分为管理state和操作state。管理state:这个状态是自上而下配置的,表示管理员的意愿操作state:这个state是网卡自身现状,表示网卡目前是否已经准备好并且有能力为用户服务。现在看看Linux系统中网卡的各种state:IFF_LOWER_UP-线缆已经接好且上电IFF_RUNNING-操作state是UP(那么什么时候操作state会是DOWN呢?1.在管理state为DOWN的时候,即管理员用命令down了网卡;2.网卡没有插线理解了这些状态之后,即使没有keepalived,状态也不会,这就不是热备切换的问题了,keepalived并没有错,即便是修正了keepalived,那么bonding还是会影响到其它使用它的程序的...正是bonding驱动的bug导致了状态判断错误。bond_open的返回值是0,因此bonding网卡默认就是START状态的,因为在物理网卡enslave进bonding网卡的时候需要bonding网卡是IF_UP状态的。可以在bond_enslave的最后看到一个频繁调用的函数:bond_set_carrier。该函数判断bonding网卡的所有slave的状态,如果全部为DOWN,则将bonding本身也设置成DOWN。这应该是一个周期调用的函数,调用周期取决于bonding的miimon参数,另外在几个关键点也会调用bond_set_carrier,比如在新的slave被bongding的时候,即调用bond_enslave的时候。基本上bond_set_carrier的逻辑是这样的:static int bond_set_carrier(struct bonding *bond)
{
    struct slave *slave;
    int i;    if (bond->slave_cnt == 0)
        goto down;    if (bond->params.mode == BOND_MODE_8023AD)
        return bond_3ad_set_carrier(bond);
//遍历所有的slave,只要有一个UP,那么bonding就UP
    bond_for_each_slave(bond, slave, i) {
        if (slave->link == BOND_LINK_UP) {
            if (!netif_carrier_ok(bond->dev)) {
                netif_carrier_on(bond->dev);
                return 1;
            }
            return 0;
        }
    }down:
    if (netif_carrier_ok(bond->dev)) {
        netif_carrier_off(bond->dev);
        return 1;
    }
    return 0;
}
  • 1
  • 2
  • 下一页
VMware-Ubuntu中安装Openstack虚拟机克隆CentOS后的网卡配置相关资讯      bonding  Linux Bonding 
  • 生产环境中Linux bonding 主备模式  (11/20/2015 20:07:52)
  • Linux双网卡绑定实现负载均衡(  (01/05/2014 10:20:00)
  • Linux Bonding研究及实现  (01/21/2012 12:59:22)
  • 为RAC私有网络配置网卡Bonding  (10/26/2014 09:32:39)
  • 多网卡绑定Bonding生产实战  (10/21/2012 09:23:18)
  • LINUX之bonding  (07/09/2007 10:05:29)
本文评论 查看全部评论 (1)
表情: 姓名: 字数


评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内