美文网首页
Linux Bond 初识

Linux Bond 初识

作者: starmier | 来源:发表于2019-10-12 15:21 被阅读0次

    linux的链路聚合就是把多网卡捆绑成一个逻辑网卡,聚合有bond模式和team模式,在企业及电信Linux服务器环境上,网络配置都会使用Bonding技术做网口硬件层面的冗余,防止单个网口应用的单点故障。下面我们就一起认识下是bond模式吧😊。

    bond 有几种捆绑模式,无论哪种模式,Bonding技术都是通过更改Linux的网口驱动,来实现网口故障后平滑切换的。
    1)mode = 0 ( balance-rr ) 轮询策略
    链路负载均衡,增加带宽,支持容错,一条链路故障会自动切换正常链路。
    特点:传输数据包顺序是依次传输(即:第1个包走eth0,下一个包就走eth1….一直循环下去,直到最后一个传输完毕),此模式提供负载平衡和容错能力;但是如果一个连接或者会话的数据包从不同的接口发出的话,中途再经过不同的链路,在客户端很有可能会出现数据包无序到达的问题,而无序到达的数据包需要重新要求被发送,这样网络的吞吐量就会下降。
    2)mode = 1 ( active-backup ) 主-备份策略
    主备模式,只有一块网卡是 active,另一块是备用的 standby,所有流量都在 active 链路上处理。
    特点:只有一个设备处于活动状态,当一个宕掉另一个马上由备份转换为主设备。mac地址是外部可见得,从外面看来,bond的MAC地址是唯一的,以避免switch(交换机)发生混乱。此模式只提供了容错能力;但是它的资源利用率较低,只有一个接口处于工作状态,在有 N 个网络接口的情况下,资源利用率为1/N。

    1. 我们先看主备模式

    主备模式下,Linux Bonding实现会将Bond的两个slave网口的MAC地址改为Bond的MAC地址,而Bond的MAC地址是Bond创建启动后,主用slave网口的MAC地址。

    当主用网口故障后,Bond会切换到备用网口,切换过程中,上层的应用是无感知不受影响的,因为Bond在驱动层,会接管上层应用的数据包,缓存起来等备用网卡起来后再通过备用网卡发送出去。当然,前提是切换时间很短,否则缓冲区是会溢出的,溢出后就开始丢包了。具体的时间值本人还没有验证过。

    2. 再看负载均衡模式

    负载均衡模式下,Linux Bonding实现可以保持两个slave网口的MAC地址不变,Bond的MAC地址是其中一个网卡的,Bond MAC地址的选择是根据Bond自己实现的一个算法来的,具体如何选择还没有研究。

    当然,这里要重点说明的是,Bond负载均衡模式下,要求交换机做配置,是的两个slave网口能够互通,否则的话,丢包会很厉害,基本没法使用。这个是因为Bond的负载均衡模式算法,会将包在两个网口之间传输以达到负载均衡。

    由于负载均衡模式下,两个slave有独立的MAC地址,你可能会想,我能否给slave网口再绑定一个IP地址,用作其他用途。
    这种方法是实现不了的。
    负载均衡模式下,两个slave网口在操作性系统上看到是两个独立的MAC地址,但是当你指定一个MAC地址发送包的时候,实际上发生的现象,不是你期望的。你指定MAC地址1发包,这个数据包可能到MAC地址2出去了。
    这个是因为Bond对这两个网口做了手脚,改了网口的驱动。看起来他们有独立的MAC地址,实际上他们的MAC地址不是独立的,只能给Bond使用。

    不足
    从上面的介绍中,很容易看到Bond的一点不足:
    Bond更改了网口的驱动,其网口不能被用作其他用途。

    Bond还有一点不足就是其故障监测上面:
    Bond默认只能做网口MII监测不能做链路监测(链路是指本机到网关的路径),也就是只能监测网口是否连接(网口是否亮);当然Bond也支持ARP协议的链路监测,但是ARP链路监测在一些场景下,太消耗资源,得不偿失。我们曾经在实际应用中使用过,效果确实不好。

    参考:
    https://blog.csdn.net/weixin_37945631/article/details/88741460

    相关文章

      网友评论

          本文标题:Linux Bond 初识

          本文链接:https://www.haomeiwen.com/subject/bgbqmctx.html