暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

提升服务器网络性能的秘密:Linux Bonding技术实战指南

68

Bonding 技术概述


Bonding 是一种网络技术,用于将多个网络接口绑定在一起,以提高网络性能或冗余性。通过网络接口绑定,多个网络接口可以作为一个虚拟接口工作,从而提高带宽和提供容错能力。Bonding 在服务器上非常常见,特别是在需要高可用性和高吞吐量的环境中。

 Bonding 模式


Linux 下的 Bonding 技术支持多种模式,每种模式都有其特定的用途:

  • mode=0 (balance-rr): 轮询模式,这种模式按照顺序循环使用每个接口发送数据包。

  • mode=1 (active-backup): 主备模式,只有一个接口处于活动状态,其他接口作为备份。

  • mode=2 (balance-xor): XOR 模式,根据数据包的 MAC 地址和 IP 地址进行分配。

  • mode=3 (broadcast): 广播模式,所有数据包通过所有接口发送。

  • mode=4 (802.3ad): 动态链接聚合,依赖于交换机的配置,提供负载均衡和容错。

  • mode=5 (balance-tlb): 发送负载均衡,基于流量分布发送负载。

  • mode=6 (balance-alb): 适应性负载均衡,包括发送和接收负载均衡。

配置步骤和示例


在 Debian 或 Ubuntu 系统上


假设我们有两个网络接口 eth0
eth1
,我们希望将它们绑定在一起使用 mode=1
(active-backup)模式。

安装 ifenslave
工具

首先需要确保系统安装了 ifenslave
工具,这是用于配置 bonding 的工具。

    sudo apt-get install ifenslave

    加载 bonding 模块

    加载 bonding
    内核模块:

      sudo modprobe bonding

      为了在每次启动时自动加载 bonding 模块,可以将其添加到 /etc/modules
      文件中:

        echo "bonding" | sudo tee -a etc/modules

        配置网络接口文件

        在 Debian 或 Ubuntu 系统上,网络接口配置文件位于 /etc/network/interfaces

        编辑该文件以添加 bonding 配置:

          sudo nano etc/network/interfaces

          添加以下内容:

             Bonding interface
            auto bond0
            iface bond0 inet static
            address 192.168.1.100
            netmask 255.255.255.0
            gateway 192.168.1.1
            bond-mode 1
            bond-miimon 100
            bond-slaves eth0 eth1


            # Ethernet interfaces
            auto eth0
            iface eth0 inet manual
            bond-master bond0


            auto eth1
            iface eth1 inet manual
            bond-master bond0

            以上配置说明:

            • bond0
              是我们创建的虚拟 bonding 接口。

            • address
              netmask
              gateway
              是网络配置。

            • bond-mode 1
              指定 active-backup 模式。

            • bond-miimon 100
              设置链路检测间隔为 100 毫秒。

            • bond-slaves eth0 eth1
              指定绑定的物理接口。

            启动和测试 bonding 接口

            重新启动网络服务以应用配置:

              sudo ifdown eth0 eth1 bond0
              sudo ifup bond0

              检查 bonding 接口状态:

                cat proc/net/bonding/bond0
                Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)


                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
                Link Failure Count: 0
                Permanent HW addr: 00:1e:67:0c:22:4c


                Slave Interface: eth1
                MII Status: up
                Link Failure Count: 0
                Permanent HW addr: 00:1e:67:0c:22:4d

                以上输出表明 bonding 接口 bond0
                正在工作,并且 eth0
                当前是活动的物理接口。

                在 CentOS 7.9


                步骤 1:安装必要的工具

                在 CentOS 7.9 上,ifenslave
                工具已经包含在系统中,无需额外安装。我们需要确保 bonding
                模块已加载。

                  sudo modprobe bonding

                  为了在每次启动时自动加载 bonding
                  模块,可以将其添加到 /etc/modules-load.d/bonding.conf
                  文件中:

                    echo "bonding" | sudo tee etc/modules-load.d/bonding.conf

                    步骤 2:配置网络脚本

                    在 CentOS 7.9 上,网络接口配置文件位于 /etc/sysconfig/network-scripts/
                    目录下。我们需要为 bond0
                    和物理接口创建配置文件。

                    配置 bond0

                    创建或编辑 /etc/sysconfig/network-scripts/ifcfg-bond0
                    文件:

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

                      添加以下内容:

                        DEVICE=bond0
                        NAME=bond0
                        TYPE=Bond
                        BONDING_MASTER=yes
                        BOOTPROTO=static
                        IPADDR=192.168.1.100
                        NETMASK=255.255.255.0
                        GATEWAY=192.168.1.1
                        DNS1=8.8.8.8
                        DNS2=8.8.4.4
                        ONBOOT=yes
                        BONDING_OPTS="mode=1 miimon=100"

                        配置 eth0

                        创建或编辑 /etc/sysconfig/network-scripts/ifcfg-eth0
                        文件:

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

                          添加以下内容:

                            DEVICE=eth0
                            NAME=eth0
                            TYPE=Ethernet
                            BOOTPROTO=none
                            ONBOOT=yes
                            MASTER=bond0
                            SLAVE=yes

                            配置 eth1

                            创建或编辑 /etc/sysconfig/network-scripts/ifcfg-eth1
                            文件:

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

                              添加以下内容:

                                DEVICE=eth1
                                NAME=eth1
                                TYPE=Ethernet
                                BOOTPROTO=none
                                ONBOOT=yes
                                MASTER=bond0
                                SLAVE=yes

                                步骤 3:重启网络服务

                                重启网络服务以应用配置:

                                  sudo systemctl restart network

                                  步骤 4:验证配置

                                  检查 bond0
                                  接口的状态:

                                    cat /proc/net/bonding/bond0
                                    Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)


                                    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
                                    Link Failure Count: 0
                                    Permanent HW addr: 00:1e:67:0c:22:4c


                                    Slave Interface: eth1
                                    MII Status: up
                                    Link Failure Count: 0
                                    Permanent HW addr: 00:1e:67:0c:22:4d

                                    Bonding 技术通过将多个网络接口绑定在一起,提高了网络性能和可靠性。上述示例展示了如何在 Linux 系统上配置 bonding
                                    接口,使用 mode=1
                                    (active-backup)模式以实现接口的冗余和故障转移。这种配置对于需要高可用性网络连接的服务器环境非常有用。


                                    文章转载自周同学带您玩AI,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                                    评论