网卡聚合(Centos7 bond)

系统信息查询

UUID查询

  1. 网卡:nmcli con show
  2. 磁盘:blkid或者lsblk -f或者ll /dev/disk/by-uuid/
  3. 系统:cat /proc/sys/kernel/random/uuid

其他信息

  1. CPU
    1. 查看cpu信息使用lscpu
    2. 每个cpu的详细信息more /proc/cpuinfo
    3. 物理cpu个数cat /proc/cpuinfo | grep "physical id" | sort -u | wc -l,physical id相同表示同一个物理cpu
    4. 逻辑cpu个数cat /proc/cpuinfo | grep "processor" | wc -l,processor表示逻辑cpu,一般我们说服务器是几核cpu说的是逻辑CPU个数
    5. cpu内核总数cat /proc/cpuinfo | grep "cpu cores" | uniq,cpu cores表示cpu核心数,core id为内核id号
    6. 单个物理CPU封装的逻辑CPU数cat /proc/cpuinfo | grep "siblings" | uniq,siblings表示每个物理cpu里面的逻辑cpu个数
    7. 查看是否超线程cat /proc/cpuinfo | grep -e "cpu cores" -e "siblings" | sort -u,如果cpu cores数量和siblings数量一致,则没有启用超线程,否则超线程被启用
  2. 内存:
    1. 内存信息cat /proc/meminfo或者dmidecode -t memory,关于dmidecode的详细用法参考http://linux.51yip.com/search/dmidecode
    2. 内存大小free -h或者cat /proc/meminfo | grep MemTotal
  3. 磁盘
    1. 查看linux硬盘和分区信息的系统信息cat /proc/partitions
    2. 各分区使用情况df -h
  4. 网络
    1. 所有监听端口netstat -lntp
    2. 所有已经建立的连接端口netstat -antp
    3. 网络统计信息进程netstat -s
  5. 系统
    1. 内核uname -a
    2. 计算机名称hostname
    3. PCI设备lspci -tv或者cat /proc/pci
    4. USB设备lsusb -tv
    5. 加载的内核模块lsmod
    6. 环境变量env
    7. 系统运行时间、用户数和负载uptime
    8. 查看所有挂载的情况mount | column -t
    9. 查看活动用户w
    10. 查看指定用户信息id
    11. 查看日志last
    12. 系统所有用户cut -d: - /etc/passwd
    13. 系统所有组cut -d: - /etc/group

bond模式

七种模式

  1. Mode=0:balance-rr,负载分担
    轮转策略:按照顺序轮流使用每个接口来发送和接收数据包,提高了负载均衡的能力,但是需要交换机的支持,因为该模式所有端口的mac地址相同,交换机不能识别多个一个Mac地址对应多个端口,所以需要交换机做链路聚合
  2. Mode=1:active-backup,主备模式
    主备策略:只使用其中一个网卡,当网卡损坏时激活另外的一个网卡
  3. Mode=2:balance-xor,XOR Hash负载分担
    平衡策略: 基于所选择的传送hash策略
  4. Mode=3,broadcast,所有包从所有接口发出,这个不均衡
    广播策略:所有卡上都接收和发送报文,提高了容错性
  5. Mode=4:链路聚合模式,支持802.3ad协议,和交换机的聚合LACP方式配合
    802.3ad策略: LACP链路聚合模式,交换机得开启链路聚合,将两张网卡当做一张来使用,提高链路性能,需要交换机支持802.3ad动态链路聚合和服务器硬件支持ethtool
  6. Mode=5:balance-tlb,根据每个slave的负载情况选择slave进行发送,接收时使用当前轮到的slave
    自适应传输负载均衡:不需要配置交换机,在每个网卡会根据上根据当前的负载情况来分配流量,如果一个网卡出现故障,那么另外一个网卡会接管故障网卡
  7. Mode=6:balance-alb,在tlb基础上增加了rlb
    自适应负载均衡:包括balance-tlb,不需要另外配置交换机,接受负载均衡通过ARP协商实现。具体工作原理如下:
    1. 当本机发送ARP请求时,bonding驱动把对端的IP信息从ARP包中复制并保存下来,当ARP应答从对端到达时,bonding驱动把它的硬件地址提取出来,并发起一个ARP应答给bond中的某个slave
    2. 使用ARP协商进行负载均衡的一个问题是:每次广播 ARP请求时都会使用bond的硬件地址,因此对端学习到这个硬件地址后,接收流量将会全部流向当前的slave。这个问题可以通过给所有的对端发送更新 (ARP应答)来解决,应答中包含他们独一无二的硬件地址,从而导致流量重新分布。
    3. 当新的slave加入到bond中时,或者某个未激活的slave重新激活时,接收流量也要重新分布。接收的负载被顺序地分布(round robin)在bond中最高速的slave上
    4. 当某个链路被重新接上,或者一个新的slave加入到bond中,接收流量在所有当前激活的slave中全部重新分配,通过使用指定的MAC地址给每个client发起ARP应答。updelay参数必须被设置为某个大于等于switch(交换机)转发延时的值,从而保证发往对端的ARP应答不会被switch(交换机)阻截

总结

  1. 模式0、2、3理论上需要静态聚合方式,即需要在交换机上配置网络聚合
  2. 模式5、6不需要交换机端的设置,网卡能自动聚合常用
  3. 模式4需要支持802.3ad

配置

方式一(常用)

做两组网络聚合,每个聚合采用两张网卡:bond0(ens32和ens33)、bond1(ens34和ens35)

# bond网卡配置(master)
vim /etc/sysconfig/network-scripts/ifcfg-bond0
    BONDING_OPTS="downdelay=0 miimon=1 mode=balance-alb updelay=0"
    TYPE=Bond
    BONDING_MASTER=yes
    NAME=bond0
    DEVICE=bond0
    ONBOOT=yes
    IPADDR=192.168.3.150
    PREFIX=24
    GATEWAY=192.168.3.1

vim /etc/sysconfig/network-scripts/ifcfg-bond1
    BONDING_OPTS="downdelay=0 miimon=1 mode=balance-alb updelay=0"
    TYPE=Bond
    BONDING_MASTER=yes
    NAME=bond1
    DEVICE=bond1
    ONBOOT=yes
    IPADDR=119.2.24.117
    PREFIX=24
    GATEWAY=119.2.24.254

# 附属网卡配置(slave)
vim /etc/sysconfig/network-scripts/ifcfg-bond0slave1
    TYPE=Ethernet
    NAME=bond0slave1
    DEVICE=ens32
    ONBOOT=yes
    MASTER=bond0
    SLAVE=yes

vim /etc/sysconfig/network-scripts/ifcfg-bond0slave2
    TYPE=Ethernet
    NAME=bond0slave2
    DEVICE=ens33
    ONBOOT=yes
    MASTER=bond0
    SLAVE=yes

vim /etc/sysconfig/network-scripts/ifcfg-bond1slave1
    TYPE=Ethernet
    NAME=bond1slave1
    DEVICE=ens34
    ONBOOT=yes
    MASTER=bond1
    SLAVE=yes
vim /etc/sysconfig/network-scripts/ifcfg-bond1slave2
    TYPE=Ethernet
    NAME=bond1slave2
    DEVICE=ens35
    ONBOOT=yes
    MASTER=bond1
    SLAVE=yes

# 物理网卡配置
vim /etc/sysconfig/network-scripts/ifcfg-ens32
    TYPE=Ethernet
    BOOTPROTO=dhcp
    NAME=ens32
    DEVICE=ens32
    ONBOOT=yes
vim /etc/sysconfig/network-scripts/ifcfg-ens33
    TYPE=Ethernet
    BOOTPROTO=dhcp
    NAME=ens33
    DEVICE=ens33
    ONBOOT=yes
vim /etc/sysconfig/network-scripts/ifcfg-ens34
    TYPE=Ethernet
    BOOTPROTO=dhcp
    NAME=ens34
    DEVICE=ens34
    ONBOOT=yes
vim /etc/sysconfig/network-scripts/ifcfg-ens35
    TYPE=Ethernet
    BOOTPROTO=dhcp
    NAME=ens35
    DEVICE=ens35
    ONBOOT=yes

方式二

# 需要聚合的两张网卡的配置
vim /etc/sysconfig/network-scripts/ifcfg-enp4s0f0
    TYPE=Ethernet
    BOOTPROTO=none
    ONBOOT=yes
    USERCTL=no
    DEVICE=enp4s0f0
    MASTER=bond0
    SLAVE=yes

vim /etc/sysconfig/network-scripts/ifcfg-enp4s0f1
    TYPE=Ethernet
    BOOTPROTO=none
    ONBOOT=yes
    USERCTL=no
    DEVICE=enp4s0f1
    MASTER=bond0
    SLAVE=yes

# bond网卡的配置,即虚拟网卡的配置
vim /etc/sysconfig/network-scripts/ifcfg-bond0
    TYPE=Ethernet
    BOOTPROTO=none
    ONBOOT=yes
    USERCTL=no
    DEVICE=bond0
    IPADDR=6.6.6.114
    PREFIX=24
    GATEWAY=6.6.6.1
    NM_CONTROLLED=no

# 系统内核支持bond:采用bond6平均负载模式
vim /etc/modprobe.d/bond.conf
    alias bond0 bonding
    options bond0 miimon=100 mode=6

# 重新加载内核和网络参数
modprobe --first-time bond0
modprobe bond0 miimon=100 mode=6
systemctl disable NetworkManager
systemctl stop NetworkManager
systemctl restart network