-
2022-01-26 15:20:38
bond:就是双网卡绑定,逻辑上当作一个网卡用。
bond的模式有7种,bond0到bond6,每种工作方式不一样,应用场景也不一样。常用的有bond1(主备),bond4(链路聚合)
bond1介绍:
bond1为主备模式,只有一个网卡在使用中。
优点就是很安全,两块网卡同时坏的概率很低。
缺点则是利用率低下,只有50%的利用率。应用场景一般是服务器的管理口,管理口一般没有太高的网络需求,稳定第一。
bond1配置(用eth0和eth1这两块网卡组bond1):
DEVICE=bond1
NAME=bond1
TYPE=Bond
IPADDR=x.x.x.x
GATEWAY=x.x.x.x
NETMASK=x.x.x.x
ONBOOT=yes
BOOTPROTO=static #Maybe use dhcp
BONDING_MASTER=yes
METRIC=1000 #网卡路由优先级设置,值越小优先级越高
NM_CONTROLLED=no #不受network程序管理
PEERDNS=no #保护DNS设置不变
BONDING_OPTS='mode=1 miimon=100 use_carrier=1 primary=eth0'在对应的eth1和eth0文件中加入如下配置:
MASTER=bond1
SLAVE=yes
NM_CONTROLLED=nomode=1是选择bond为主备模式
miimon=100是链路监控频率,单位是毫秒(ms)
use_carrier=1是判断链路状态的,=1是一种更高效的形式,比较老旧的设备不支持
primary=eth0是选择主网卡bond4介绍:
bond4为链路聚合模式。相当于两块小网卡合并一起当作一个大网卡用,类似1+1=2
前置条件1:交换机需要支持IEEE802.3ad(链路聚合标准),并且在交换机上进行相应配置。
前置条件2:ethtool支持获取每个slave的速率和双工设定应用场景一般是业务网了,需要的大的带宽的情况比较适合。
bond4配置(用eth2和eth3这两块网卡组bond4):
DEVICE=bond4
NAME=bond4
TYPE=Bond
IPADDR=
GATEWAY=
NETMASK=
ONBOOT=yes
BOOTPROTO=dhcp #Maybe use dhcp
BONDING_MASTER=yes
METRIC=0 #网卡路由优先级设置,值越小优先级越高
NM_CONTROLLED=no #不受network程序管理
PEERDNS=no #保护DNS设置不变
MACADDR=48:fd:8e:3c:1a:41 #用eth2或eth3中任意一个
BONDING_OPTS='mode=4 miimon=100 use_carrier=1'在对应的eth2和eth3文件中加入如下配置:
MASTER=bond4
SLAVE=yes
NM_CONTROLLED=nomode=4是选择bond为链路聚合模式,不光是服务器上配置,对应交换机也需要相应配置
miimon=100是链路监控频率,单位是毫秒(ms)
use_carrier=1是判断链路状态的,=1是一种更高效的形式,比较老旧的设备不支持七种bond模式说明:
第一种模式:mode=0 ,(balance-rr)Round-robin policy(平衡抡循环策略)
特点:传输数据包顺序是依次传输(即:第1个包走eth0,下一个包就走eth1….一直循环下去,直到最后一个传输完毕)
问题:一个连接的数据包从不同的接口发出的话,中途再经过不同的链路,在客户端很有可能会出现数据包无序到达的问题,而无序到达的数据包需要重新要求被发送第二种模式:mode=1, (active-backup)Active-backup policy(主-备份策略)
bond1为主备模式,只有一个网卡在使用中。
优点就是很安全,两块网卡同时坏的概率很低。
缺点则是利用率低下,只有50%的利用率。第三种模式:mode=2,(balance-xor)XOR policy(平衡策略)
特点:基于指定的传输HASH策略传输数据包。第四种模式:mode=3,broadcast(广播策略)
特点:在每个slave接口上传输每个数据包。第五种模式:mode=4,(802.3ad)IEEE 802.3ad Dynamic link aggregation(动态链接聚合)
特点:创建一个聚合组,它们共享同样的速率和双工设定。相当于两块小网卡合并一起当作一个大网卡用,类似1+1=2
前置条件1:交换机需要支持IEEE802.3ad(链路聚合标准),并且在交换机上进行相应配置。
前置条件2:ethtool支持获取每个slave的速率和双工设定第六种模式:mode=5,(balance-tlb)Adaptive transmit load balancing(适配器传输负载均衡)
特点:不需要交换机支持的通道bonding。在每个slave上根据当前的负载(根据速度计算)分配外出流量。如果正在接受数据的slave出故障了,另一个slave接管失败的slave的MAC地址。第七种模式:mode=6,(balance-alb)Adaptive load balancing(适配器适应性负载均衡)
特点:该模式包含了上一个模式,同时加上针对IPV4流量的接收负载均衡,而且不需要任何交换机的支持。接收负载均衡是通过ARP协商实现的。bonding驱动截获本机发送的ARP应答,并把源硬件地址改写为bond中某个slave的唯一硬件地址,从而使得不同的对端使用不同的硬件地址进行通信。后两种模式工作种没有见过,概念是看别人写的。有遇到过的大佬可以科普一下。
更多相关内容 -
linux自动配置bond0脚本、bond0和bond1双链路脚本、批量配置bond脚本步骤
2021-04-26 17:39:15文章目录说明执行成功的界面如下脚本内容 说明 bond0脚本其实就是把手动修改的内容变成一键修改而已,所以,理论上,只要会手动配置链路...注意:本脚本默认一键配置bond0和bond1双联路,如果仅仅是需要配置一个bond0,文章目录
说明【必看】
-
该脚本中如果没有你需要的功能,可以私信我需求,我后面会加上相应功能的。
-
bond0脚本其实就是把手动修改的内容变成一键修改而已,所以,理论上,只要会手动配置链路,就知道配置链路脚本的原理的,所以就不对脚本内容做解析了,只对脚本需要修改的内容做详细说明;
注:如果不会配置双网卡的,去好好研究研究这篇博客,跟着走几遍就懂了: -
该脚本适用于单台服务器【主要是用于新服务器配置IP用】,如果想批量跑,额,还挺麻烦,可以自己想想怎么弄,无法解决再看最下面的”遍历执行过程“,我提供了一种方法。
双bond脚本
执行成功的界面如下
bond脚本内容
-
注意:本脚本默认一键配置bond0和bond1双联路,如果仅仅是需要配置一个bond0,需要把bond1的代码注释掉,否则会报错【找不到参数】
-
需要修改的地方已经在文章中详细说明了,拷贝到服务器内,修改网卡名称即可直接使用。
注:bond1或bond0写入时,记得注释或取消注释,超人性化的预留了2种mode模式:mode1和mode4 -
如果服务器上网卡名称太多,不知道哪两个网卡绑定在一起,可以用
ethtool
命令来查询该网卡是否启用以及该网卡是千兆口还是万兆口。
#!/usr/bin/sh # 定义bond的2个网卡名称参数 # bond0 # 需要修改最后的网卡名称 bond0_port1="/etc/sysconfig/network-scripts/ifcfg-enp11" bond0_port2="/etc/sysconfig/network-scripts/ifcfg-enp22" # bond1 # 需要修改最后的网卡名称 bond1_port1="/etc/sysconfig/network-scripts/ifcfg-enps11" bond2_port2="/etc/sysconfig/network-scripts/ifcfg-enps12" # 固定格式 bond0="/etc/sysconfig/network-scripts/ifcfg-bond0" bond1="/etc/sysconfig/network-scripts/ifcfg-bond1" # 创建bond文件夹 touch $bond0 touch $bond1 # 写入(修改)bond0网卡配置文件内容 # 需要修改 DEVICE名称为真实网卡名称 echo "DEVICE=enp11 BOOTPROTO=none MASTER=bond0 NM_CONTROLLED=no SLAVE=yes" > $bond0_port1 echo "DEVICE=enp22 BOOTPROTO=none MASTER=bond0 NM_CONTROLLED=no SLAVE=yes" > $bond0_port2 # 写入(修改)bond1网卡配置文件内容 # 需要修改 DEVICE名称为真实网卡名称 echo "DEVICE=enps11 BOOTPROTO=none MASTER=bond1 NM_CONTROLLED=no SLAVE=yes" > $bond1_port1 echo "DEVICE=enps12 BOOTPROTO=none MASTER=bond1 NM_CONTROLLED=no SLAVE=yes" > $bond2_port2 # 写入bond0配置文件 # 需要修改IPADDR、NETMASK【注,如果是内部网通信bond,是不需要网关GATEWAY的】,最后的BONDING需要选择 echo "DEVICE=bond0 BOOTPROTO=none NM_CONTROLLED=no ONBOOT=yes TYPE=Ethernet IPADDR=10.233.20.5 NETMASK=255.255.255.0" > $bond0 # 【建议用于mode=4或mode=6】 echo 'BONDING_OPTS="mode=4 miimon=100 lacp_rate=fast xmit_hash_policy=layer3+4"' >> $bond0 #【建议用于mode=1】 #echo 'BONDING_OPTS = "mode=1 miimon=100 updelay=600000 primary=em1"' >> $bond0 # 写入bond1配置文件 # 需要修改IPADDR、NETMASK【注,如果是内部网通信bond,是不需要网关GATEWAY的】,最后的BONDING需要选择 echo "DEVICE=bond1 BOOTPROTO=none NM_CONTROLLED=no ONBOOT=yes TYPE=Ethernet IPADDR=192.168.123.2 GATEWAY=192.168.123.254 NETMASK=255.255.255.0" > $bond1 # 【建议用于mode=4或mode=6】 #echo 'BONDING_OPTS="mode=4 miimon=100 lacp_rate=fast xmit_hash_policy=layer3+4"' >> $bond1 #【建议用于mode=1】 echo 'BONDING_OPTS = "mode=1 miimon=100 updelay=600000 primary=em1"' >> $bond1 sleep 1 # 关闭Networkmanager并重启网卡 echo "systemctl stop NetworkManager" systemctl stop NetworkManager echo "systemctl disable NetworkManager" systemctl disable NetworkManager echo "systemctl restart network" systemctl restart network sleep 1 # 查看bond0的配置文件 echo "ip -o a | grep bond0" ip -o a | grep bond0 sleep 1 # 查看bond1的配置文件 echo "ip -o a | grep bond1" ip -o a | grep bond1
删除已配置的bond方法
你认为怎么删? 是不是以为在配置文件中把网卡删了重启网络就好了?
答案是:
no
下面这就是在配置文件中删了bond0和bond1,重启网卡后依然能看到bond1和bond0的IP
- 删除方法如下:
这是最简单的方法:- 1、启动Networkmanager服务
systemctl start NetworkManager
- 2、nmcli查看网络链接
nmcli con show
- 3、使用nmcli删除接口
nmcli con delete bond0
nmcli con delete bond1
- 1、启动Networkmanager服务
遍历执行过程
说明
-
遍历首先要满足一个条件,就是服务器之间已经打通了网络【如果是新服务器,一般是没有被打通网络的,所以只能用上面的方法,一台一台执行配置ip】。
-
这个遍历比较特殊,需要满足2个条件和一个执行条件:
- 1、scp拷贝上面的bond脚本到目标服务器上,然后把脚本中IP掩码网关改成自动获取;
- 2、因为是在目标服务器执行,需要给每台服务器准备ip,掩码和网关,而这些文件是不能存放在本地服务器的,所以得想办法把3样放到目标服务器,因为批量跑,肯定不能像上面一样手动给每个脚本更换IP。
- 执行条件就是上面2样准备完毕以后批量执行每台目标服务器上的脚本。
- 先思考一下怎么解决上面的2样东西,如果实在想不出,再看我下面的方案【思路已经提供了,脚本还是要多想多测试,不然没法提升的】
遍历脚本代码
遍历给每台服务器准备需要配置的IP、掩码和网关。
[root@controll ccx]# pwd /ccx [root@controll ccx]# cat iplist1.txt # 这个文件是放能正常ssh上去的目标服务器IP 192.168.59.128 192.168.59.129 192.168.59.130 [root@controll ccx]# cat ipmask.txt # 这个文件是存放需要新配置的IP、掩码和网关,中间用一个空格隔开【空格只能有一个,不能多】 192.168.59.128 255.255.255.0 192.168.59.2 192.168.59.129 255.255.255.0 192.168.59.2 192.168.59.130 255.255.255.0 192.168.59.2 [root@controll ccx]# [root@controll ccx]# cat echo.sh #!/bin/bash file=/ccx/iplist1.txt ip=/ccx/ipmask.txt cat $file|while read line ; do cat $ip | while read ip ; do a=($ip) ssh $line << EOF mkdir /ccx echo ${a[0]} > /ccx/ip echo ${a[1]} > /ccx/mask echo ${a[2]} > /ccx/gateway EOF done done [root@controll ccx]#
执行查看效果
- 执行方式:
sh echo.sh
- 因为需要拷贝3个文件,所以需要输入3次密码【其中第一次创建了/ccx这个文件,所以第二第三次就会报/ccx文件已存在,无法创建,这个无所谓的,如果有强迫症,不想出现这个提升,可以加个if条件,if=1的时候创建即可】
[root@controll ccx]# [root@controll ccx]# sh echo.sh Pseudo-terminal will not be allocated because stdin is not a terminal. root@192.168.59.128's password: Pseudo-terminal will not be allocated because stdin is not a terminal. root@192.168.59.128's password: mkdir: 无法创建目录"/ccx": 文件已存在 Pseudo-terminal will not be allocated because stdin is not a terminal. root@192.168.59.128's password: mkdir: 无法创建目录"/ccx": 文件已存在 Pseudo-terminal will not be allocated because stdin is not a terminal. root@192.168.59.129's password: Pseudo-terminal will not be allocated because stdin is not a terminal. root@192.168.59.129's password: mkdir: cannot create directory ‘/ccx’: File exists Pseudo-terminal will not be allocated because stdin is not a terminal. root@192.168.59.129's password: mkdir: cannot create directory ‘/ccx’: File exists Pseudo-terminal will not be allocated because stdin is not a terminal. root@192.168.59.130's password: Pseudo-terminal will not be allocated because stdin is not a terminal. root@192.168.59.130's password: mkdir: cannot create directory ‘/ccx’: File exists Pseudo-terminal will not be allocated because stdin is not a terminal. root@192.168.59.130's password: mkdir: cannot create directory ‘/ccx’: File exists [root@controll ccx]# ssh 192.168.59.128 root@192.168.59.128's password: Last login: Fri May 28 17:57:44 2021 from 192.168.59.133 [root@centso76_1 ~]# cd /ccx/ [root@centso76_1 ccx]# ls gateway ip mask [root@centso76_1 ccx]# cat gateway 192.168.59.2 [root@centso76_1 ccx]# cat mask 255.255.255.0 [root@centso76_1 ccx]# cat ip 192.168.59.130 [root@centso76_1 ccx]# 登出 Connection to 192.168.59.128 closed. [root@controll ccx]# ssh 192.168.59.129 root@192.168.59.129's password: Last login: Thu May 27 22:09:09 2021 from 192.168.59.133 [root@centos76_2 ~]# cd /ccx/ [root@centos76_2 ccx]# ls gateway ip mask [root@centos76_2 ccx]# cat gateway 192.168.59.2 [root@centos76_2 ccx]# cat mask 255.255.255.0 [root@centos76_2 ccx]# cat ip 192.168.59.130 [root@centos76_2 ccx]#
批量拷贝bond脚本代码
注:上面脚本执行完毕以后,本地中就会生成IP、掩码和网关3个文件,先把bond脚本中不需要的注释掉,只留一个需要用的bond,然后把IP掩码和网关部分改成自动获取【自动获取这个脚本中也有方法,我就不去修改了,自己修改吧】,就是下图这3个地方的固定值改为自动获取文件即可【因为都是脚本跑的,所以每一个脚本文件都是固定的,不存在出错】
- 上面的bond脚本修改完毕以后就可以批量拷贝了
[root@controll ccx]# pwd /ccx [root@controll ccx]# cat iplist1.txt # 这个文件是放能正常ssh上去的目标服务器IP 192.168.59.128 192.168.59.129 192.168.59.130 [root@controll ccx]# cat install.sh if [ $# -eq 0 ] ;then echo "Usage: /ccx/iplist1.txt" elif [ -f $1 ] ; then for ip in `cat $1` ; do scp /ccx/bond_aotu.sh $ip:/ccx done else echo "Input file not found" fi [root@controll ccx]#
执行查看效果
- 执行方式:
sh install.sh /ccx/iplist1.txt
[root@controll ccx]# sh install.sh # 如果不指定文件就报错咯 Usage: /ccx/iplist1.txt [root@controll ccx]# [root@controll ccx]# sh install.sh /ccx/iplist1.txt root@192.168.59.128's password: bond_aotu.sh 100% 0 0.0KB/s 00:00 root@192.168.59.129's password: bond_aotu.sh 100% 0 0.0KB/s 00:00 root@192.168.59.130's password: bond_aotu.sh 100% 0 0.0KB/s 00:00 [root@controll ccx]#
批量执行bond脚本代码
注:上面的脚本全部执行完毕以后,每台目标服务器上都会有这4个文件【bond脚本、ip、掩码和网关】:
bond_aotu.sh gateway ip mask
[root@controll ccx]# ssh 192.168.59.128 root@192.168.59.128's password: Last login: Fri May 28 18:13:17 2021 from 192.168.59.133 [root@centso76_1 ~]# cd /ccx [root@centso76_1 ccx]# ls bond_aotu.sh gateway ip mask [root@centso76_1 ccx]#
- 因为上面的全部条件都已经准备好了,所以可以直接在一台服务器上批量执行目标服务器上的这个脚本即可。
【执行方式有很多,可以用expect,我这仅展示使用ssh执行即可】
【另外,因为我不需要批量配置脚本ip,所以我的bond脚本代码内容是:echo "Good morning:hero ccx"
】
[root@controll ccx]# pwd /ccx [root@controll ccx]# cat iplist1.txt # 这个文件是放能正常ssh上去的目标服务器IP 192.168.59.128 192.168.59.129 192.168.59.130 [root@controll ccx]# cat /ccx/send.sh if [ $# -eq 0 ] ;then echo "Usage: /ccx/iplist1.txt" elif [ -f $1 ] ; then for ip in `cat $1` ; do ssh $ip sh /ccx/bond_aotu.sh done else echo "Input file not found" fi [root@controll ccx]#
执行查看效果
- 执行方式:
sh install.sh /ccx/iplist1.txt
[root@controll ccx]# [root@controll ccx]# sh send.sh iplist1.txt root@192.168.59.128's password: # 正常情况执行成功后呢,这展示的是bond脚本中的配置内容 Good morning:hero ccx root@192.168.59.129's password: Good morning:hero ccx root@192.168.59.130's password: Good morning:hero ccx [root@controll ccx]#
注:如果你执行这个脚本去目标服务器上发现ip并没有被配置的话,原因是因为这个方法调用的是本地服务器的ssh进程,换expect的方式执行这个脚本【但配置未成功的几率应该不会发生,这只是留下一个解决方案,以防万一】
定位使用中的网络接口名称
说明
- 这个主要针对 一批服务器上有很多接口名称,从其中定位到正在使用的接口名称;
- 实现方式依然是使用命令
ethtool
查看link是否为yes。 - 注:如果是在虚拟机上做测试,添加的网卡,需要在设置中把设备状态已连接取消,使用ethtool命令看到的link才会为no【如果仅在虚拟机中down掉网卡,link状态依然为yes】
- 我现在的网卡场景是:
ens33和38是正常的,ens39和40是没有连接的。
[root@controll network-scripts]# nmcli device status DEVICE TYPE STATE CONNECTION ens33 ethernet connected ens33 ens38 ethernet connected ens38 virbr0 bridge connected virbr0 ens39 ethernet unavailable -- ens40 ethernet unavailable -- lo loopback unmanaged -- virbr0-nic tun unmanaged -- [root@controll network-scripts]# ethtool ens33 | grep Link Link detected: yes [root@controll network-scripts]# ethtool ens38 | grep Link Link detected: yes [root@controll network-scripts]# ethtool ens39 | grep Link Link detected: no [root@controll network-scripts]# ethtool ens40 | grep Link Link detected: no [root@controll network-scripts]#
代码
- 要遍历link状态,首先得获取全部的接口名称,本来这种方式想用数组的方式存储的,但数组有点复杂,并且难以理解,所以就用最简单的,存入文件方式实现了【无需担心本地会多文件,最终会干掉所有生成的文件】;
其次lo名称是回环接口名称,所以不需要看lo的Link状态,所以我用if过滤掉lo接口了。 - 下列代码不需要修改任何信息,直接执行即可。
[root@controll ~]# cat link.sh #/bin/sh # 先创建一个文件 if [ -e /work ] ; then echo '/work The file exists' else mkdir /work echo 'mkdir /work ok ' fi > /work/ifcfg.txt ls /etc/sysconfig/network-scripts| grep ifcfg- |awk -F- '{print $2}' >> /work/ifcfg.txt echo "现有如下网卡名称:" cat /work/ifcfg.txt cat << ccx ****************************************** * 下面展示接口名称的 Link detected状态 * ****************************************** ccx cat /work/ifcfg.txt| while read work ; do if [ $work == lo ] ;then continue fi echo -e "ifcfg-$work网口的Link detected状态为:\c" ethtool $work | grep Link | awk '{print $3}' done if [ -f /work/ ] ; then echo "/work is exists" else rm -rf /work fi [root@controll ~]#
执行效果
- 该脚本可以放在任意位置
注:执行前先看看本地是否有/work
的文件夹,如果有该文件夹,将代码中的/work改一下,否则会干掉该文件夹【文件不会被干掉】!!!! - 执行方式:
sh link.sh
[root@controll ~]# sh link.sh mkdir /work ok 现有如下网卡名称: ens33 ens38 ens39 ens40 lo ****************************************** * 下面展示接口名称的 Link detected状态 * ****************************************** ifcfg-ens33网口的Link detected状态为:yes ifcfg-ens38网口的Link detected状态为:yes ifcfg-ens39网口的Link detected状态为:no ifcfg-ens40网口的Link detected状态为:no [root@controll ~]# [root@controll ~]# ll /work ls: cannot access /work: No such file or directory [root@controll ~]#
遍历该脚本
- 上面已经有遍历的方式了,我这就不展示了。
- 执行思路:
- 1、先将该脚本用scp批量拷贝到需要执行的服务器上
- 2、批量执行服务器上的该脚本
确认千兆口网卡名称和万兆口网卡名称
说明
- 这个主要是用于,千兆和千兆做一个bond,万兆和万兆做一个bond,所以需要先知道千兆和万兆口分别是哪些
- 使用命令
ethtool
命令可以看到Speed结果的。
代码
- 要获取全部网卡的Speed结果,首先得获取全部的接口名称,本来这种方式想用数组的方式存储的,但数组有点复杂,并且难以理解,所以就用最简单的,存入文件方式实现了【无需担心本地会多文件,最终会干掉所有生成的文件】;
其次lo名称是回环接口名称,所以不需要看lo的Link状态,所以我用if过滤掉lo接口了。 - 下列代码不需要修改任何信息,直接执行即可。
[root@controll ~]# cat speed.sh #/bin/sh # 先创建一个文件 if [ -e /work ] ; then echo '/work The file exists' else mkdir /work echo 'mkdir /work ok ' fi > /work/ifcfg.txt ls /etc/sysconfig/network-scripts| grep ifcfg- |awk -F- '{print $2}' >> /work/ifcfg.txt echo "现有如下网卡名称:" cat /work/ifcfg.txt cat << ccx ****************************************** * 下列网卡中万兆接口结果为:10000Mb/s * * 下列网卡中千兆接口结果为: 1000Mb/s * * 【下列网卡中结果为:Unknown! * * 则表示该网卡未启用,忽略即可】 * ****************************************** ccx cat /work/ifcfg.txt| while read work ; do if [ $work == lo ] ;then continue fi echo -e "ifcfg-$work网口的Speed结果为:\c" ethtool $work | grep Speed | awk '{print $2}' done if [ -f /work/ ] ; then echo "/work is exists" else rm -rf /work fi [root@controll ~]#
执行效果
- 该脚本可以放在任意位置
注:执行前先看看本地是否有/work
的文件夹,如果有该文件夹,将代码中的/work改一下,否则会干掉该文件夹【文件不会被干掉】!!!! - 执行方式:
sh speed.sh
[root@controll ~]# sh speed.sh mkdir /work ok 现有如下网卡名称: ens33 ens38 ens39 ens40 lo ****************************************** * 下列网卡中万兆接口结果为:10000Mb/s * * 下列网卡中千兆接口结果为: 1000Mb/s * * 【下列网卡中结果为:Unknown! * * 则表示该网卡未启用,忽略即可】 * ****************************************** ifcfg-ens33网口的Speed结果为:1000Mb/s ifcfg-ens38网口的Speed结果为:1000Mb/s ifcfg-ens39网口的Speed结果为:Unknown! ifcfg-ens40网口的Speed结果为:Unknown! [root@controll ~]# [root@controll ~]# ll /work ls: cannot access /work: No such file or directory [root@controll ~]#
遍历该脚本
- 上面已经有遍历的方式了,我这就不展示了。
- 执行思路:
- 1、先将该脚本用scp批量拷贝到需要执行的服务器上
- 2、批量执行服务器上的该脚本
确认网卡接口位置
说明
-
如现在有一个需求:需求是1&4 2& 3进行绑定
问题来了:你怎么知道谁是1,谁是2,谁是3,谁是4 。【所谓是1,2,3,4:就是机房光口的位置而已】-
最简单的解决方法:
去机房插光纤,一根一根的插
插第一口,在服务器上记录名称,
再插第二口,在服务器上记录名称
再插第三口,在服务器上记录名称
在插第四口,在服务器上记录名称 -
另一个方法,就是在交换机上获取接口的mac名称【需要网络的同事提供了】
然后根据第一口的mac名称对应出第一口网卡名称
根据第二口的mac名称对应出第二口网卡名称
根据第三口的mac名称对应出第三口网卡名称
根据第四口的mac名称对应出第四口网卡名称
-
-
mac查看说明
有些Linux发行版本的MAC地址字段为HWaddr
,有些Linux发行版本的MAC地址字段为ether
,根据实际情况看关键字【多数为ehter】
查看方式见下面代码【命令后面有说明】
[root@controll ~]# ip link #查看所有mac 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000 link/ether 00:0c:29:4c:e2:1a brd ff:ff:ff:ff:ff:ff 3: ens38: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000 link/ether 00:0c:29:4c:e2:24 brd ff:ff:ff:ff:ff:ff 4: ens39: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT group default qlen 1000 link/ether 00:0c:29:4c:e2:2e brd ff:ff:ff:ff:ff:ff 5: ens40: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT group default qlen 1000 link/ether 00:0c:29:4c:e2:38 brd ff:ff:ff:ff:ff:ff 6: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default qlen 1000 link/ether 52:54:00:d1:84:32 brd ff:ff:ff:ff:ff:ff 7: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN mode DEFAULT group default qlen 1000 link/ether 52:54:00:d1:84:32 brd ff:ff:ff:ff:ff:ff [root@controll ~]# ip link show ens33 #查看单台mac 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000 link/ether 00:0c:29:4c:e2:1a brd ff:ff:ff:ff:ff:ff [root@controll ~]# [root@controll ~]# ip link show ens33 | awk '/ether/ {print $2}' #提取mac 00:0c:29:4c:e2:1a [root@controll ~]#
代码
- 要获取全部网卡的Speed结果,首先得获取全部的接口名称,本来这种方式想用数组的方式存储的,但数组有点复杂,并且难以理解,所以就用最简单的,存入文件方式实现了【无需担心本地会多文件,最终会干掉所有生成的文件】;
其次lo名称是回环接口名称,所以不需要看lo的Link状态,所以我用if过滤掉lo接口了。 - 下列代码直接执行如果获取不到mac信息,将下面的
ether
更改为HWaddr
即可。 - 下面直接提出所有网卡mac信息和使用中网卡的mac信息,自己对应一下吧,如果弄成自动对应的话,还需要定义mac,较麻烦不说,如果mac定义错了就没结果了。
[root@controll ~]# cat mac.sh #/bin/sh # 先创建一个文件 if [ -e /work ] ; then echo '/work The file exists' else mkdir /work echo 'mkdir /work ok ' fi > /work/ifcfg.txt ls /etc/sysconfig/network-scripts| grep ifcfg- |awk -F- '{print $2}' >> /work/ifcfg.txt echo "现有如下网卡名称:" cat /work/ifcfg.txt cat << ccx ****************************************** * 全部网卡对应的mac信息如下 * ****************************************** ccx cat /work/ifcfg.txt| while read work ; do if [ $work == lo ] ;then continue fi echo -e "ifcfg-$work网口的mac为:\c" ip link show $work | awk '/ether/ {print $2}' done cat << ccx ****************************************** * 使用中的网卡mac信息如下 * ****************************************** ccx cat /work/ifcfg.txt| while read work ; do if [ $work == lo ] ;then continue fi link=`ethtool $work | grep Link | awk '{print $3}'` if [ $link == yes ] ;then echo -e "ifcfg-$work网口的mac为:\c" ip link show $work | awk '/ether/ {print $2}' else continue fi done if [ -f /work/ ] ; then echo "/work is exists" else rm -rf /work fi [root@controll ~]#
执行效果
- 该脚本可以放在任意位置
注:执行前先看看本地是否有/work
的文件夹,如果有该文件夹,将代码中的/work改一下,否则会干掉该文件夹【文件不会被干掉】!!!! - 执行方式:
sh mac.sh
[root@controll ~]# sh mac.sh mkdir /work ok 现有如下网卡名称: ens33 ens38 ens39 ens40 lo ****************************************** * 全部网卡对应的mac信息如下 * ****************************************** ifcfg-ens33网口的mac为:00:0c:29:4c:e2:1a ifcfg-ens38网口的mac为:00:0c:29:4c:e2:24 ifcfg-ens39网口的mac为:00:0c:29:4c:e2:2e ifcfg-ens40网口的mac为:00:0c:29:4c:e2:38 ****************************************** * 使用中的网卡mac信息如下 * ****************************************** ifcfg-ens33网口的mac为:00:0c:29:4c:e2:1a ifcfg-ens38网口的mac为:00:0c:29:4c:e2:24 [root@controll ~]# [root@controll ~]# ls /work ls: cannot access /work: No such file or directory [root@controll ~]#
遍历该脚本
- 上面已经有遍历的方式了,我这就不展示了。
- 执行思路:
- 1、先将该脚本用scp批量拷贝到需要执行的服务器上
- 2、批量执行服务器上的该脚本
-
-
网卡bonding模式 - bond0、1、4配置
2017-12-04 02:31:43网卡bonding简介 网卡绑定就是把多张物理网卡通过软件虚拟成一个虚拟的网卡,配置完毕后,所有的物理网卡的...1 round-robin(mode=0) 轮转策略,轮流在每一个slave网卡上发送数据包,提供负载均衡和容错能力。网卡bonding简介
网卡绑定就是把多张物理网卡通过软件虚拟成一个虚拟的网卡,配置完毕后,所有的物理网卡的ip和mac将会变成相同的。多网卡同时工作可以提高网络速度,还可以实现网卡的负载均衡、冗余。
bonding模式
1 round-robin(mode=0)
轮转策略,轮流在每一个slave网卡上发送数据包,提供负载均衡和容错能力。
2 active-backup(mode=1)
主备策略,只有一个slave被激活,只有当active的slave的接口down时,才会激活其它slave接口。主备模式下发生一次故障切换,在新激活的slave接口上会发送一个或者多个gratuitous ARP。主salve接口上以及配置在接口上的所有VLAN接口都会发送gratuitous ARP,需要在这些接口上配置了至少一个IP地址。VLAN接口上发送的的gratuitous ARP将会附上适当的VLAN id。本模式提供容错能力。
Gratuitous ARP也称为免费ARP,无故ARP。Gratuitous ARP不同于一般的ARP请求,它并非期待得到ip对应的mac地址,而是当主机启动的时候,将发送一个Gratuitous arp请求,即请求自己的ip地址的mac地址。(来自百度百科:http://baike.baidu.com/view/10101910.htm)
3 XOR(mode=2)
基于所选择的hash策略,本模式也提供负载均衡和容错能力。
4 broadcast(mode=3)
广播策略,向所有的slave接口发送数据包,本模式提供容错能力。
5 802.3ad(mode=4)
动态链路聚合,根据802.3ad标准利用所有的slave建立聚合链路。slave接口的出口取决于传输的hash策略,默认策略是简单的XOR策略,而hash策略则可以通xmit_hash_policy选项配置。
前提:每个slave网卡支持ethtool获取速率和双工状态
交换机支持IEEE 802.3ad标准(可能需要配置启用)
IEEE 802.3ad 是执行链路聚合的标准方法。从概念上讲,将多个以太网适配器聚集到单独的虚拟适配器方面与“以太通道(EtherChannel)”的功能相同,能提供更高的带宽防止发生故障。例如,eth0 和 eth1 可以聚集到称作 eth3 的 IEEE 802.3ad链路聚合;然后用 IP 地址配置接口 eth3。系统将这些聚集的适配器作为一个适配器来考虑。因此,可以像在任何以太网适配器上一样配置它们的 IP。(来自百度百科:http://baike.baidu.com/view/1996279.htm?fr=aladdin)
6 balance-tlb(mode=5)
自适应传输负载均衡:根据每个slave的负载(相对速度)决定从哪个接口发送数据包,从当前接口接收数据包。如果接收的slave接口故障,其它slave接口将接管它的mac地址继续接收。
前提:每个slave网卡支持ethtool获取速率。
7 balance-alb(mode=6)
自适应负载均衡:
前提:每个slave网卡支持ethtool获取速率
每个slave网卡支持启用时重新设置硬件地址
小结:
mode 1、5、6不需要交换机设置
mode 0、2、3、4需要交换机设置
缺省使用mode 0
bonding驱动加载
12345cat
/boot/config-2
.6.32-431.el6.x86_64 |
grep
-i bonding
CONFIG_BONDING=m
# 这里可以看出bonding驱动编译成可以动态加载的内核模块
[root@compute1 ~]
# vim /etc/modprobe.d/bond.conf # 开机自动加载bonding驱动
alias
bond0 bonding
options bond0 miimon=100 mode=0
# miimon:多长时间检查一次网络,单位ms;
bonding模式0配置
12345678vim
/etc/sysconfig/network-scripts/ifcfg-bond0
# 建立虚拟网卡bond0
DEVICE=bond0
IPADDR=10.10.10.1
NETMASK=255.255.255.0
ONBOOT=
yes
BOOTPROTO=none
USERCTL=no
GATEWAY=10.10.10.254
1234567vim
/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=none
ONBOOT=
yes
USERCTL=no
MASTER=bond0
SLAVE=
yes
1234567vim
/etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
BOOTPROTO=none
ONBOOT=
yes
USERCTL=no
MASTER=bond0
SLAVE=
yes
# 设置完成后,重启网络服务来使用bond0生效
1service network restart
# bond模块会自动加载
12cat
/proc/net/bonding/bond0
# 查看目前bonding的状态
modprobe -r bonding;service network restart
# 让bond模式生效
bonding纯网卡配置文件方式
bonding模式1配置
1234567# 具体操作步骤就下面这步不同,其它一致。
vim
/etc/modprobe
.d
/bond
.conf
alias
bond0 bonding
options bond0 miimon=100 mode=1
# 模式1
vim
/etc/rc
.d
/rc
.
local
# eth0 eth1的工作顺序(仅在主备模式下)
ifenslave bond0 eth0 eth1
注:在高可用的环境下,网卡配置bonding后,vip_nic要为bond0
bonding模式4配置
1234# 具体操作步骤就下面这步不同,其它一致。
vim
/etc/modprobe
.d
/bond
.conf
alias
bond0 bonding
options bond0 miimon=100 mode=4 lacp_rate=1
# 模式4
盛科交换机的lacp配置参考:http://pan.baidu.com/s/1o8rL6II 《二层转发保护》
注意的是:交换机和服务器连接的那块要配置动态的channel-group
bond4下启动vlan子接口
1234567891011121314151617# 永久加载8021q module
cat
>
/etc/sysconfig/modules/8021q
.modules << EOF
\
#\!/bin/sh
if
[ ! `lsmod |
grep
8021q` ] ;
then
exec
/sbin/modprobe
8021q >
/dev/null
2>&1
fi
EOF
modprobe 8021q
# 加载模块
vim
/etc/sysconfig/network-scripts/ifcfg-bond0
.110
# vlan子接口,发出去的包是带有vlan tag 110的
DEVICE=bond0.110
# vlan子接口要“.”分隔
BOOTPROTO=none
ONBOOT=
yes
USERCTL=no
VLAN=
yes
# 写配置文件,就不要安装vconfig来配置vlan子接口
IPADDR=192.168.110.3
PREFIX=24
bond4结合OpenStack ovs flat vlan模式
12345678910111213141516171819202122232425262728293031321、 采用linux bridge
brctl addbr br-bond
brctl addif br-bond bond0
ifconfig
br-bond 192.168.1.4
/24
# 这样配置是可以通的
2、 采用openvswitch
ovs-vsctl add-br br-bond
ovs-vsctl add-port br-bond bond0
ifconfig
br-bond 192.168.1.4
/24
# 这样配置是不通的
如果进行如下操作,网络是可以通的
brctl addbr br-bond
brctl addif br-bond bond0
ifconfig
br-bond 192.168.1.4
/24
# 管理ip地址配置linux bridge上,不是配置在br-data上
ovs-vsctl add-br br-data
# 创建一个br-data
ovs-vsctl add-port br-data br-bond
# br-bond作为ovs bridge的一个port,不然计算节点下的虚拟机网络不通
[root@sha-cloud002 ~]
# cat /etc/sysconfig/network-scripts/ifcfg-br-bond # br-data配置文件如下
DEVICE=br-bond
IPADDR=10.10.10.12
NETMASK=255.255.255.0
ONBOOT=
yes
NM_CONTROLLED=
"no"
BOOTPROTO=none
TYPE=Bridge
DELAY=0
# prevent it waiting on interface start
# 这里需要注意一下,如果是hp刀片服务器,网卡做bond后划vlan子接口才能
和上端交换机通信。这时候配置需要调整下
ovs-vsctl add-port br-data eth0.470(举例vlan
id
:470)
ovs-vsctl
set
Port eth0.470 tag=470(打了tag后相当于access口,access口出去的包是不带vlan
id
的)
虽然上述操作也可以,但让人觉得怪怪的,下面是OVS下设置lacp的正确方式
按照红帽官网的建议是不要使用基于ovs的lacp,可以考虑使用balance-slb
关于bond模式下网桥配置可以参考红帽的官方文档:https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Deployment_Guide/s2-networkscripts-interfaces_network-bridge.html
参考链接
http://www.cnblogs.com/Skyar/p/3397072.html
原文链接:http://blog.51cto.com/iceyao/1572214
-
ifcfg-bond0
2021-08-11 09:32:33Linux系统下网卡聚合配置mode4标准 -
Bond mode=0和mode=1
2021-11-01 17:53:19 -
配置bond网卡, em1, em2 和 eth0, eth1是什么区别?
2021-05-12 07:55:40find it outHow foolish DELL it is......原文主页链接如下:其中白皮书中写了为什么要改名字IntroductionNetwork device names in Red Hat Enterprise Linux for Ethernet devices have traditionally followed the... -
如何搭建bond0及遇到重启网卡失败后如何自动恢复连接
2019-12-11 12:00:13网卡绑定mode共有七种(0~6) bond0、bond1、bond2、bond3、bond4、bond5、bond6 常用的有三种 mode=0:平衡负载模式,有自动备援,但需要”Switch”支援及设定。 mode=1:自动备援模式,其中一条线若断线,其他线路将... -
Linux CentOS 7 多网卡配置bond模式 bond1 bond5 bond6-Go语言中文社区
2021-05-18 03:46:44https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Networking_Guide/sec-Network_Bonding_Using_the_Command_Line_Interface.htmlLinux CentOS 7 多网卡配置bond模式 bond1 bond5 ... -
ovs bond脚本
2018-09-20 16:31:49openvswitch bond脚本,当两个网卡需要做ovs的时候,可以使用这个脚本 -
linux 查看bond0
2021-05-13 12:28:23SCC概述 超级计算集群(Super Computing Cluster,SCC)使用高速RDMA网络互联的CPU以及GPU等异构加速设备,面向高性能计算、人工智能/机器学习、科学/工程计算、数据分析、音视频处理等应用,提供极致计算性能和并行... -
Centos 7 配置多网卡bond0 及网桥br0
2021-05-18 14:10:41《Centos 7 配置多网卡bond0 及网桥br0》由会员分享,可在线阅读,...1、Centos 7 配置多网卡bond0 及网桥br0一配置多网卡bonding1手动添加bond0配置,如:vim /etc/sysconfig/network-scripts/ifcfg-bond0DEVICE=b... -
linux多网卡的7种bond模式原理配置
2021-01-20 14:34:34网卡绑定的目的: 1.提高网卡的吞吐量。 2.增强网络的高可用,同时也能实现负载均衡。...(1)Mode=0(balance-rr) 表示负载分担round-robin,平衡轮询策略,具有负载平衡和容错功能 bond的网卡MAC为当 -
Linux centos7多网卡配置bond模式(bond0 bond1)
2020-02-26 17:16:391.bond 0 : balance-rr (mode=0) 创建bond0组 nmcli connection add type bond con-name bond0 ifname bond0 mode balance-rr 加入组成员 nmcli connection add type bond-slave con-name bond0-e... -
Linux下双网卡绑定bond0,1,4
2018-11-06 10:53:35Linux下双网卡绑定bond0 一:原理: linux操作系统下双网卡绑定有七种模式。现在一般的企业都会使用双网卡接入,这样既能添加网络带宽,同时又能做相应的冗余,可以说是好处多多。而一般企业都会使用linux操作系统... -
多网卡的7种bond模式原理
2021-09-28 09:58:02网卡绑定mode共有七种(0~6) bond0、bond1、bond2、bond3、bond4、bond5、bond6 常用的有三种 mode=0:平衡负载模式,有自动备援,但需要”Switch”支援及设定。 mode=1:自动备援模式,其中一条线若断线,其他... -
Linux下配置bond0
2021-04-07 16:05:04Linux下配置bond0 1.使用network接管网络服务,停止使用NetworkManager,如若没有network服务,安装network-scripts安装包即可 2.做之前备份网卡配置文件。 配置模板 前景要求:6个网口,两两配置bond0,连接名分别... -
Linux 链路聚合之bond和team
2021-07-25 15:16:55交换机可以配置链路聚合,提供线路...特点:传输数据包顺序是依次传输(即:第1个包走eth0,下一个包就走eth1….一直循环下去,直到最后一个传输完毕),此模式提供负载平衡和容错能力;但是我们知道如果一个连接或者 -
centos 7.0双网卡主备和负载均衡模式配置(bond0)
2021-01-14 17:29:32网卡bond是通过把多张网卡绑定为一个逻辑网卡,实现本地网卡的冗余,带宽扩容和负载均衡。在应用部署中是一种常用的技术,bond共有7中模式,mode 0-6,但是常用的模式有三种:mode=0:平衡负载模式,有自动备援,但... -
如何解决双网卡bond0绑定模式物理成员口的mac地址和bonding接口mac地址不一致的问题。
2021-05-16 07:09:40这两天在使用在测试的过程中发现,ping这个bond接口的ip,总是丢一半的报文。在交换机端抓包发现与服务器相连的两个端口都有报文转发出去,但是在服务器端使用tcpdump功能监控两个端口的流量时,只有一个端口会收到... -
网口绑定bond配置
2018-06-29 11:08:07本文不但有详细的bond原理和bond工作资料的介绍,还有华为、华三、思科等交换机厂家对于的配置说明。 -
Centos系统配置bond0
2021-05-18 07:21:41版权声明:本文为博主原创文章,支持原创,转载请附上原文出处链接和本声明。1.查看网卡信息:ip a2.修改网卡文件cd /etc/sysconfig/network-scripts/修改网卡文件ifcfg-ens32(根据自己实际的网卡名字) ,保证以下... -
bond_pricer:用于为固定息票债券定价的Python类和jupyter iPython笔记本
2021-02-04 08:00:45bond_pricer Python类和jupyter iPython笔记本,用于为固定息票债券定价。 它主要设计用于一级市场,但也适用于二级市场。 支持以下优惠券频率:年度,半年度,季度,每月 支持以下日期计数约定:实际/实际,实际/... -
删除bond0
2019-04-22 16:17:58删除bonding: 1.ifconfig bond0 down(这步只能临时禁用) 2.rm -rf ifconfig-bond0 引用于> https://blog.csdn.net/Ketchup_/article/details/77917634 -
网卡bond扫盲
2020-02-16 21:12:52网卡bond是通过多张网卡绑定为一个逻辑网卡,实现本地网卡的冗余,带宽扩容和负载均衡,在生产场景中是一种常用的技术。Kernels 2.4.12及以后的版本均供bonding模块,以前的版本可以通过patch实现。 双网卡绑定的... -
Linux CentOS 7 多网卡配置bond模式 bond1 bond5 bond6
2020-12-24 05:15:24https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Networking_Guide/sec-Network_Bonding_Using_the_Command_Line_Interface.htmlLinux CentOS 7 多网卡配置bond模式 bond1 bond5 ... -
bond1
2021-11-05 21:27:45bond主备模式 (1)mode=1(balance-rr):主备模式下,只有主网卡工作,备份网卡不工作,只有当一个网络接口失效时。 (2)mode=0(active-backup):在负载均衡模式下,两块网卡都工作,提供两倍带宽。 服务器图形... -
Linux下的双网卡绑定bond0 em1 em2
2015-09-11 19:20:291、网络负载均衡 对于bonding的网络负载均衡是我们在文件服务器中常用到的,比如把三块网卡,当做一块来用,解决一个IP地址,流量过大,服务器网络压力过大的问题。对于文件服务器来说,比如NFS或SAMBA文件服 -
超详细linux手动配置单网卡和双网卡(bond0和team)以及DNS,linux网络配置详细说明,ps:使用命令配置
2019-09-27 12:05:27检查计算机上的以太网卡设备是否被...1·查看网络配置信息:nmcli 2·查看所有网卡信息 :ifconfig , 查看单一网卡信息:ethtool 名称 3·进入配置表修改信息:vi ifcfg 名称 所有列表名称功能介绍: YPE=Etherne...