bonding技术
一、介绍
Linux 双网卡绑定,是指将两块网卡虚拟成一块网卡。聚合后的设备看似是一个独立的以太网接口,通俗来讲,就是两块网卡拥有相同的 IP 地址,并行连接形成一个逻辑链路。这项技术在 Sun 和 Cisco 中早有应用,被称为 Trunking 和 Etherchannel 技术。在 Linux 2.4.x 内核中,也采用了此技术,称为 bonding。bonding 技术最初应用于集群,旨在提升集群节点间的数据传输效率。
二、原理
BONDING_OPTS="miimon=50 mode=1 fail_over_mac=1"
miimon是用来进行链路监测的。 比如:miimon=100,那么系统每100ms监测一次链路连接状态,如果有一条线路不通就转入另一条线路;
mode的值表示工作模式,他共有0,1,2,3四种模式,常用的为0,1两种。
mode=0表示load balancing (round-robin)为负载均衡方式,两块网卡都工作。(需要交换机支持)
mode=1表示fault-tolerance (active-backup)提供冗余功能,工作方式是主备的工作方式,也就是说默认情况下只有一块网卡工作,另一块做备份.
(1)负载均衡模式:mode=0
部署——
(说明:要用kvm做,如果用VMware做会出问题)
1.准备两块网卡
[root@kvm ~]# virsh attach-interface vm-1 --type bridge --source virbr0 --persistent
#添加网卡
[root@bonding ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
USERCTL=no
ONBOOT=yes
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
[root@bonding ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens9
DEVICE=ens9
USERCTL=no
ONBOOT=yes
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
2.关闭NetworkManager
[root@haproxy ~]# systemctl stop NetworkManager #启动NetworkManager服务
3.配置bonding
[root@haproxy ~]# cat /etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
NAME=bond0
IPADDR=192.168.122.100
NETMASK=255.255.255.0
GATEWAY=192.168.122.1
DNS1=114.114.114.114
ONBOOT=yes
BOOTPROTO=none
BONDING_OPTS="miimon=50 mode=0"
4.重启网络
[root@haproxy ~]# systemctl restart network
这时候你的网卡会呈现这种状态,eth0和ens9都是处于up状态但是没有ip,只有bond有ip
5.测试
开三个终端以及一台客户机进行测试
[root@haproxy ~]# yum install tcpdump #安装tcpdump
终端1:
[root@haproxy ~]# tcpdump -nn -i eth0 icmp #抓包
终端2:
[root@haproxy ~]# tcpdump -nn -i ens9 icmp
客户机:
[root@kvm ~]# ping 192.168.122.100
测试结果应该是两台终端都能接收到信息
(2)冗余模式:mode=1
部署——
1.配置bonding
[root@haproxy ~]# cat /etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
NAME=bond0
IPADDR=192.168.122.100
NETMASK=255.255.255.0
GATEWAY=192.168.122.1
DNS1=114.114.114.114
ONBOOT=yes
BOOTPROTO=none
BONDING_OPTS="miimon=50 mode=1 fail_over_mac=1"
将0改成1就行了,然后再加上fail_over_mac=1就行
2.重启网络
[root@haproxy ~]# systemctl restart network
3.测试
[root@haproxy ~]# cat /proc/net/bonding/bond0
开三个终端以及一台客户机进行测试
[root@haproxy ~]# yum install tcpdump #安装tcpdump
终端1:
[root@haproxy ~]# tcpdump -nn -i eth0 icmp #抓包
终端2:
[root@haproxy ~]# tcpdump -nn -i ens9 icmp
客户机:
[root@kvm ~]# ping 192.168.122.100
测试结果应该是只有终端2能接收到信息