2018-06-13 17:12:51 Kenn_lee 阅读数 1888

简谈其原理

将多块网卡虚拟成一块来实现冗余,这样对外只显示一张网卡,具有同一个IP。

Linux 多网卡绑定
网卡绑定mode共有七种(0~6) bond0、bond1、bond2、bond3、bond4、bond5、bond6(常用的有三种)
mode=0:平衡负载模式,有自动备援,但需要”Switch”支援及设定。
mode=1:自动备援模式,其中一条线若断线,其他线路将会自动备援。
mode=6:平衡负载模式,有自动备援,不必”Switch”支援及设定

bond0配置步骤

1. cd /etc/sysconfig/network-scripts/ 
2.mv eth0 eth1 /tmp  移除网卡(具体看自己的网卡名称)
3.nmcli con add type bond ifname bond0 mode balance-rr #(balance-rr表示负载均衡)
4.nmcli con add type bond-slave ifname eth0 master bond0 (捆绑网卡1)
5.nmcli con add type bond-slave ifname eth1 master bond0(捆绑网卡2)
6.vim ifcfg-bond-bond0 根据自己上网方式配置网络
7.service network restart
至此bond0捆绑配置完成!
2018-05-24 08:08:39 Buster_ZR 阅读数 2540

Linux 下的高级网络配置:链路聚合 bond,team 及网桥的搭建

1. bond

在企业及电信 Linux 服务器环境上,网络配置都会使用 Bonding 技术做网口硬件层面的冗余,防止单个网口应用的单点故障。

  • bond :
    网卡 bond 是通过把多个物理网卡绑定为一个逻辑网卡,实现本地网卡的冗余,带宽扩容和负载均衡,具体的功能取决于采用的哪种模式。 bond 有的七种模式(mode 0~6,最常用的是 mode 0,1,6)
    • mode = 0 ( balance-rr ) 平衡抡循环策略
      链路负载均衡,增加带宽,支持容错,一条链路故障会自动切换正常链路。
      特点:传输数据包顺序是依次传输(即:第1个包走eth0,下一个包就走eth1….一直循环下去,直到最后一个传输完毕),此模式提供负载平衡和容错能力;但是如果一个连接或者会话的数据包从不同的接口发出的话,中途再经过不同的链路,在客户端很有可能会出现数据包无序到达的问题,而无序到达的数据包需要重新要求被发送,这样网络的吞吐量就会下降。
    • mode = 1 ( active-backup ) 主-备份策略
      主备模式,只有一块网卡是 active,另一块是备用的 standby,所有流量都在 active 链路上处理。
      特点:只有一个设备处于活动状态,当一个宕掉另一个马上由备份转换为主设备。mac地址是外部可见得,从外面看来,bond的MAC地址是唯一的,以避免switch(交换机)发生混乱。此模式只提供了容错能力;但是它的资源利用率较低,只有一个接口处于工作状态,在有 N 个网络接口的情况下,资源利用率为1/N。
    • mode = 6 ( balance-alb ) 适配器适应性负载均衡
      在5的tlb基础上增加了rlb(接收负载均衡receive load balance).不需要任何switch(交换机)的支持。接收负载均衡是通过ARP协商实现的。

下面来介绍 bond 的建立过程(以 mode 1 为例)
注:在虚拟中进行建立)

 1.为主机添加网卡,保证机器有两块可用的闲置网卡
 2.添加 bond
 通过执行以下指令:
 [root@localhost ~]# nmcli connection add con-name bond0 ifname bond0 type bond mode active-backup ip4 172.25.151.50/24
                   # 添加 bond 并指定 IP 
                  add :NetworkManager添加一个连接
             con-name :连接名称
               ifname :连接到的接口
                 type :连接类型
                 mode :bonding 模式(默认为: balance-rr )
                  ip4 :IPv4 类的地址
 # 注:这时的 bond 是不可用的,需要为其添加真实的网卡设备
 为 bond0 添加两张可用网卡:
 [root@localhost ~]# nmcli connection add con-name eth0 ifname eth0 type bond-slave master bond0
 # eht0 为添加的网卡名称,bond-slave 表示为 bond 的从属设备,master bond0 表示为 bond0 服务
 [root@localhost ~]# nmcli connection add con-name eth1 ifname eth1 type bond-slave master bond0
 [root@localhost ~]# watch -n 1 cat /proc/net/bonding/bond0
                    # 可以通过此监控命令
 建立完后就可以使用 bond03.若要删除建立的 bond0 可执行:
 先删除 bond0 的两个从属设备
 [root@localhost ~]# nmcli connection delete eth0 
 [root@localhost ~]# nmcli connection delete eth1
 删除 bond0 
 [root@localhost ~]# nmcli connection delete bond0

执行如下:
1.为主机添加网卡,保证机器有两块可用的闲置网卡
以虚拟机为例进行操作,在真机中执行: virt-manager,执行对主机(这里指虚拟机)进行网卡添加
选定主机
这里写图片描述
添加硬件
这里写图片描述
选择类型
这里写图片描述
2. 添加网卡后,进行对 bond 的建立
建立 bond0
这里写图片描述
为 bond0 添加设备
这里写图片描述
3. 通过及监测命令:watch -n 1 cat /proc/net/bonding/bond0 可看到 bond0 的状态(eth0 作为 bond0 活跃的从属设备,而eth1 则在随时备用)
这里写图片描述
4. 可通过执行 ifconfig eth0 down 来模拟 eth0 网卡出现问题,从而观察 bond0 从属设备的运行状态,如下图所示,可发现 eth0 down 后,eth1 在第一时间接替了 eth0 继续工作
这里写图片描述
可以通过ping 命令来观测在 eth0 down 后,eth1 顶替 eth0 工作,网络是没有间断
这里写图片描述
5. 删除 bond0
这里写图片描述

2. team

Team和bond0功能类似(企业七之前是没有 team 的)
在redhat7.0以上版本中网络方面的相关服务被NetworkManager所接管,所以在配置多网卡绑定时,redhat专门提供了team工具来实现多网卡的绑定。

  • Team 不需要手动加载相应内核模块;Team有更强的拓展性;支持8块网卡
  • Team 的种类:
    broadcast 广播容错
    roundrobin 平衡轮叫
    activebackup 主备
    loadbalance 负载均衡

下面以 activebackup 主备模式进行 team 建立的示例

 1.为主机添加网卡,保证机器有两块可用的闲置网卡(以两块网卡为例)
 2.添加 team
 [root@localhost ~]# nmcli connection add con-name team0 ifname team0 type team config '{"runner":{"name":"activebackup"}}' ipv4 172.25.151.50/24
                   # 添加 team 并指定 IP 
                  add :NetworkManager添加一个连接
             con-name :连接名称
               ifname :连接到的接口
                 type :连接类型
              connfig :为team 设定模式
                  ip4 :IPv4 类的地址
# 注:这时的 team 是不可用的,需要为其添加真实的网卡设备
 [root@localhost ~]# watch -n 1 teamdctl team0 stat 
                   # 观测命令,用来查看 team0 状态
 为 team0 添加两张可用网卡:
 [root@localhost ~]# nmcli connection add con-name eth0 ifname eth0 type team-slave master team0
 # eht0 为添加的网卡名称,team-slave 表示为 team 的从属设备,master team0 表示为 team0 服务
 [root@localhost ~]# nmcli connection add con-name eth1 ifname eth1 type team-slave master team0
 3.若要删除建立的 team0 可执行:
 先删除 team0 的两个从属设备
 [root@localhost ~]# nmcli connection delete eth0 
 [root@localhost ~]# nmcli connection delete eth1
 删除 team0 
 [root@localhost ~]# nmcli connection delete team0

执行如下:
1.为主机添加网卡,保证机器有两块可用的闲置网卡(以两块网卡为例,与 bond 的操作一致)
2.添加 team
这里写图片描述
3.为 team0 添加两张可用网卡:
这里写图片描述
4.用监控命令查查看 team0:
这里写图片描述
5.同样的 team 也与 bond 相同,可以通过 ifconfig down eth1 来使 team0 的一个从属设备停止工作,另一个顶替上去
这里写图片描述

3. 网桥

  • 桥接与网桥
    桥接工作在OSI网络参考模型的第二层数据链路层,是一种以MAC地址来作为判断依据来将网络划分成两个不同物理段的技术,其被广泛应用于早期的计算机网络当中。
    以太网是一种共享网络传输介质的技术,在这种技术下,如果一台计算机发送数据的时候,在同一物理网络介质上的计算机都需要接收,在接收后分析目的MAC地址,如果是属于目的MAC地址和自己的MAC地址相同便进行封装提供给网络层,如果目的MAC地址不是自己的MAC地址,那么就丢弃数据包。
    桥接的工作机制是将物理网络段(也就是常说的冲突域)进行分隔,根据MAC地址来判断连接两个物理网段的计算机的数据包发送。
  • 网桥实际上是一种控制冲突域流量的设备。
    首先,bridge是一个虚拟网络设备,所以具有网络设备的特征,可以配置IP、MAC地址等;其次,bridge是一个虚拟交换机,和物理交换机有类似的功能。
    对于普通的网络设备来说,只有两端,从一端进来的数据会从另一端出去,如物理网卡从外面网络中收到的数据会转发给内核协议栈,而从协议栈过来的数据会转发到外面的物理网络中。
    而bridge不同,bridge有多个端口,数据可以从任何端口进来,进来之后从哪个口出去和物理交换机的原理差不多,要看mac地址。

1.下面介绍创建用命令创建网桥(临时添加网桥)

 1.建立网桥
 [root@client ~]# brctl show    #查看是否有网桥
 [root@client ~]# brctl addbr br0  #添加名为br0的网桥
 [root@client ~]# ifconfig br0 172.25.151.50/24   #为网桥临时设置IP
 [root@client ~]# ping 172.25.151.250  #尝试用此 ip ping 外界,看是否可以 ping 通
 [root@client ~]# brctl addif br0 eth0   #为网桥 br0 添加接口 eth0 
                #addif 添加 interface ;eth0 物理网卡
 [root@client ~]# ping 172.25.151.250  #再尝试用此 ip ping 外界,看是否可以 ping 通
 2.删除网桥
 [root@client ~]# brctl delif br0 eth0 #删除网桥上的物理网卡(删除网桥上添加的接口)   
 [root@client ~]# ifconfig br0 down    #将网桥停止(将网桥从系统链接中去除)
 [root@client ~]# brctl delbr br0      #删除网桥
注:这样建立网桥在重启机器后以消失

具体执行如下:
(1)brctl show 可发现没有网桥
这里写图片描述
(2)建立网桥
这里写图片描述
(3)为网桥添加 IP
这里写图片描述)
(4)通过此 IP ping 别的主机 IP,无法 ping 通
这里写图片描述
(5)为网桥 br0 添加接口 eth0,此时再 ping 别的主机,可 ping 通
这里写图片描述
(6)brctl show 可发现网桥有了接口
这里写图片描述
2.下面介绍建立永久网桥(编辑配置文件)

 [root@client ~]# vim/etc/syscofig/network-scripts/ifcfg-网卡名
 内容如下: 
  1 DEVICE=eth0
  2 ONBOOT=yes
  3 BOOTPROTO=none
  4 BRIDGE=br0           #桥接对象为br0
~                   
 [root@client ~]# vim /etc/syscofig/network-scripts/ifcfg-br0
 内容如下: 
  1 DEVICE=br0
  2 ONBOOT=yes
  3 BOOTPROTO=none
  4 IPADDR=172.25.151.50
  5 PREFIX=24
  6 TYPE=Bridge           #类型为桥接
~     
建立完成后,可能无法成功重启网络,可以关闭 NetworkManager.service 后再重启网络,则网桥建立成功
systemctl stop NetworkManager.service
systemctl restart network
systemctl start NetworkManager.service

具体执行如下:
(1)编辑网络接口配置文件
这里写图片描述
(2)编辑网桥的配置文件
这里写图片描述
(3)重启网络服务
这里写图片描述
(4)网桥建立成功
这里写图片描述

2014-03-05 16:45:40 youlang2010 阅读数 765

在企业及电信Linux服务器环境上,网络配置都会使用Bonding技术做网口硬件层面的冗余,防止单个网口应用的单点故障。
Linux Bond的配置很简单,当下网络上也有很多资料,这里我们就不介绍了。我们在这篇文章中介绍Linux Bond的原理及其不足。

原理
Linux Bond有两种典型的模式:主备,负载均衡。无论哪种模式,Bonding技术都是通过更改Linux的网口驱动,来实现网口故障后平滑切换的。

主备模式:
Linux Bond主备模式

负载均衡模式:
Linux Bond负载均衡模式

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链路监测在一些场景下,太消耗资源,得不偿失。我们曾经在实际应用中使用过,效果确实不好。

2011-12-02 21:31:24 zp820705 阅读数 97

网卡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地址欺骗的方式在交换机不设置的情况下不太均衡地进行接收。

以上信息来自网络,不是所有的都明白。目前我们常用的主要是1(主备冗余)和6(与交换机无关的负载均衡)

本文以小本上虚拟机安装的两台REDHAT AS 5为环境进行说明。

 

1.创建bond0配置文件

 

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

 添加内容

DEVICE=bond0
IPADDR=10.10.10.11
NETWORK=10.10.10.0
NETMASK=255.255.255.0
USERCTL=no
BOOTPROTO=none
ONBOOT=yes

 你需要修改上面的IPADDR,NETWORK,NETMASK为你自己的环境配置

 

2.修改eth0和eth1配置文件
注意:这里是虚拟机上配置,所以可以很方便的添加多块网卡。

使用vi修改eth0配置文件

 

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

 

添加或替换内容:

 

DEVICE=eth0
USERCTL=no
ONBOOT=yes
MASTER=bond0
SLAVE=yes
BOOTPROTO=none

 

使用vi修改eth1配置文件

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

添加或替换内容:

 

DEVICE=eth1
USERCTL=no
ONBOOT=yes
MASTER=bond0
SLAVE=yes
BOOTPROTO=none

 

保存并退出

3.加载bond驱动
通过修改内核模块配置文件modprobe.conf加载bond驱动。

 

# vi /etc/modprobe.conf

 

添加下面的两行内容:

 

alias bond0 bonding
options bond0 mode=6 miimon=100

 

注意:这里使用的是模式6,负载均衡模式;网卡检查时间100ms

4.测试配置
首先,加载bond module:

 

# modprobe bonding

 

然后,重新启动网络服务

 

# service network restart

 

查看内核中bond状态

 

cat /proc/net/bonding/bond0

 

我机器的输出样例:

 

Ethernet Channel Bonding Driver: v3.0.3 (March 23, 2006)

Bonding Mode: load balancing (round-robin)
MII Status: up
MII Polling Interval (ms): 0
Up Delay (ms): 0
Down Delay (ms): 0

Slave Interface: eth0
MII Status: up
Link Failure Count: 0
Permanent HW addr: 00:0c:29:e7:21:13

Slave Interface: eth1
MII Status: up
Link Failure Count: 0
Permanent HW addr: 00:0c:29:e7:21:09

 

查看所有网络配置

 

# ifconfig

 

bond0     Link encap:Ethernet  HWaddr 00:0C:29:E7:21:13 
          inet addr:10.10.10.11  Bcast:10.10.10.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fee7:2113/64 Scope:Link
          UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1
          RX packets:2155 errors:0 dropped:0 overruns:0 frame:0
          TX packets:685 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:507558 (495.6 KiB)  TX bytes:83759 (81.7 KiB)

eth0      Link encap:Ethernet  HWaddr 00:0C:29:E7:21:13 
          inet6 addr: fe80::20c:29ff:fee7:2113/64 Scope:Link
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1
          RX packets:889 errors:0 dropped:0 overruns:0 frame:0
          TX packets:563 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:238996 (233.3 KiB)  TX bytes:59080 (57.6 KiB)
          Interrupt:67 Base address:0x20a4

eth1      Link encap:Ethernet  HWaddr 00:0C:29:E7:21:13 
          inet6 addr: fe80::20c:29ff:fee7:2113/64 Scope:Link
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1
          RX packets:1266 errors:0 dropped:0 overruns:0 frame:0
          TX packets:122 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:268562 (262.2 KiB)  TX bytes:24679 (24.1 KiB)
          Interrupt:67 Base address:0x2024 
 


 

 

 

2017-10-30 21:13:06 qq_23598037 阅读数 341
第一步:# vi /etc/sysconfig/network-scripts/ifcfg-bond0

DEVICE=bond0

BONDING_OPTS="mode=0 miimon=100"

BOOTPROTO=none

ONBOOT=yes

BROADCAST=192.168.0.255

IPADDR=192.168.0.180

NETMASK=255.255.255.0

NETWORK=192.168.0.0

USERCTL=no

BONDING_OPTS="mode=0 miimon=100" ,mode有多种模式实现不同的功能,


第二步:# vi /etc/sysconfig/network-scripts /ifcfg-eth0

DEVICE=eth0

BOOTPROTO=none

ONBOOT=yes

MASTER=bond0

SLAVE=yes

USERCTL=no

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

DEVICE=eth1

BOOTPROTO=none

ONBOOT=yes

MASTER=bond0

SLAVE=yes

USERCTL=no


第三步:配置/etc/modprobe.conf,添加alias bond0 bonding

# vi /etc/modprobe.conf
alias eth0 e1000e

alias eth1 e1000e

alias scsi_hostadapter mptbase
alias scsi_hostadapter1 mptspi

alias bond0 bonding



第四步:重启网络服务

#service network restart

linux bond网络配置

阅读数 75

Linux BOND接口配置

阅读数 3079

没有更多推荐了,返回首页