1 多网卡Bonding
将多块网卡绑定同一IP地址对外提供服务,可以实现高可用或者负载均衡。直接给两块网卡设置同一IP地址是不可以的。通过bonding,虚拟一块网卡对外提供连接,物理网卡的被修改为相同的MAC地址。
1.1 Bonding 聚合链路工作模式
bond聚合链路模式共7种模式:0-6 Mode
- mod=0,即:(balance-rr)Round-robin policy(轮间)聚合口数据报文按包轮询从物理接口转发。
负载均衡─所有链路处于负载均衡状态,轮询方式往每条链路发送报文这模式的特点增加了带宽,同时支持容错能力,当有链路出问题,会把流量切换到正常的链路上。
性能问题——个连接或者会话的数据包如果从不同的接口发出的话,中途再经过不同的链路,在客户端很有可能会出现数据包无序到达的问题,而无序到达的数据包需要重新要求被发送,这样网络的吞吐量就会下降。Bond0在大压力的网烙传输下,性能增长的并不是很理想。
需要交换机进行端口绑定
- mod=1,即: (active-backup) Active-backup policy (主-备份策略)只有Active状态的物理接口才转发数据报文。
容错能力一只有一个slave是激活的(active)。也就是说同一时刻只有一个网卡处于工作状态,其他的slave都处于备份状态,只有在当前激活的slave故障后才有可能会变为激活的(active)。
无负载均衡一此算法的优点是可以提供高网络连接的可用性,但是它的资源利用率较低,只有一个接口处于工作状态,在有N个网络接口的情况下,资源利用率为1/N。
- mod=2,即: (balance xoar) XOR policy (平衡策略)聚合口数据报文按源目MAC、源目IP、源目端口进行异或HASH运算得到一个值,根据该值查找接口转发数据报文
负载均衡一基于指定的传输HASH策略传输数据包。
容错能力一这模式的特点增加了带宽,同时支持容错能力,当有链路出问题,会把流量切换到正常的链路上。
性能问题―该模式将限定流量,以保证到达特定对端的流量总是从同一个接口上发出。既然目的地是通过MAC地址来决定的,因此该模式在’本地”网络配置下可以工作得很好。如果所有流最是通过单个路由器,由于只有一个网关,源和目标mac都固定了,那么这个算法算出的线路就一直是同一条,那么这种模式就没有多少意义了。
需要交换机配置为port channel
- mod=3,即: broadcast(广播策略)这种模式的特点是一个报文会复制两份往bond下的两个接口分别发送出去
当有对端交换机失效,感觉不到任何downtime,但此法过于浪费资源;不过这种模式有很好的容错机制。此模式适用于金融行业,因为他们需要高可靠性的网络。不先评出现任何问题。
- mod=4,即:(802.3ad) IEEE 802.3ad Dynamic link aggregation (IEEE 802.3ad 动态链接聚合)
在动态聚合模式下,聚合组内的成员端口上均启用LACP(链路汇聚控制协议)协议,其端口状态通过该协议自动进行维护。负载均衡一基于指定的传输HASH策略传输数据包。默认算法与blance-xor一样。
容错能力一这模式的特点增加了带宽,同时支持容错能力,当有链路出问题,会把流量切换到正常的链路上,对比blance-xor,这种模式定期发送LACPD报文维护镞路聚合状态,保证链路质量。
需要交换机支持LACP协议
- mod=5,即:(balance-tlb) Adaptive transmit load balancing(适配器传输负载均衡)
在每个物理接口上根据当前的负载(根据速度计算)分配外出流量。如果正在接收数据的物理接口口出故障了,另一个物理接口接管该故障物理口的MAC地址。
需要ethtool支持获取每个slave的速率
- mod=6,即:(balance-alb)Adaptive load balancing(适配器适应性负载均衡)
该模式包含了balance-tb模式,同时加上针对IPV4流量的接收负载均衡,而且不需要任何switch(交换机)的支持。接收负载均衡是通过ARP协商实现的。bonding驱动截获本机发送的ARP应答,并把源硬件地址改写为bond中某个物理接口的难一硬件地址,从而便得不同的对端使用不同的硬件地址进行通信。
mod=6 与 mod=0的区别: mod=6,先把eth0流量占满,再占eth1 …ethX;而mod=0的话,会发现2个口的流虽都很稳定,基本一样的带宽。而mod=6,会发现第一个口流是很高,第2个口只占了小部分流量。
说明:
常用的模式为 0,1,3,6
mode 1,5,6 不需要交换机的设置
mode 0,2,3,4 需要交换机配置
active-backup、balance-tlb 和 balance-alb 模式不需要交换机的任何特殊配置。其他绑定模式需要配置交换机以便整合链接。
如:Cisco交换机需要在模式0、2和3中使用EtherChannel,但是模式4中需要LACP和EtherChannel
1.2 Bonding 配置
详细信息帮助:
/usr/share/doc/kernel-doc-version/Documentation/networking/bonding.txt
https://www.kernel.org/doc/Documentation/networking/bonding.txt
创建bonding设备的配置文件
~ vim /etc/sysconfig/network-scripts/ifcfg-bond0
NAME=bond0
TYPE=bond
DEVICE=bond0
BOOTPROTO=none
IPADDR=10.0.0.100
PREFIX=8
#miimon指定链路监测时间间隔。如果miimon=100,那么系统每100ms监测一次链路连接状态,如果有一条线路不通就转入另一条线路
#fail_over_mac=1用于虚拟环境,生产环境中不需要添加
BONDING_OPTS="mode=1 miimon=100 fail_over_mac=1"
~ vim /etc/sysconfig/network-scripts/ifcfg-eth0
NAME=eth0
DEVICE=eth0
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
ONBOOT=yes
~ vim /etc/sysconfig/network-scripts/ifcfg-eth1
NAME=eth1
DEVICE=eth1
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
ONBOOT=yes
#重启网络服务
~ systemctl restart network
查看bond0状态:
/proc/net/bonding/bond0
删除bond0:
ifconfig bond0 down
rmmod bonding
2 CentOS7 以上版本网络配置
CentOS 6之前,网络接口使用连续号码命名:eth0、eth1等,当增加或删除网卡时,名称可能会发生变化,CentOS7以上版使用基于硬件,设备拓扑和设置类型命名。
CentOS 8中已弃用network.service,采用NetworkManager (NM)为网卡启用命令。CentOS 8仍可以安装network.service作为网卡服务,只是默认没有安装,具体方法为: dnf install network-scripts,不过官方已明确在下一个大版本中,将彻底放弃network.sevice,不建议继续使用network.service管理网络。
2.1 网卡命名机制
systemd对网络设备的命名方式
1.如果Firmware或BIOS为主板上集成的设备提供的索引信息可用,且可预测则根据此索引进行命名,如: eno1
2.如果Firmware或BIOS为PCI-E扩展槽所提供的索引信息可用,且可预测,则根据此索引进行命名,如: ens1
3.如果硬件接口的物理位置信息可用,则根据此信息命名,如:enp2s0
4.如果用户显式启动,也可根据MAC地址进行命名,如:enx2387a1dc565.上述均不可用时,则使用传统命名机制
5.上述均不可用时,则使用传统命名机制
基于BIOS支持启用biosdevname软件
:::info
内置网卡:em1,em2
pci卡:pYpX Y: s1ot ,x: port
:::
网卡组成格式
:::info
en : Ethernet有线局域网
wl : wlan无线局域网
ww : wwan无线广域网
o
s
x
p
(1)编辑/etc/default/grub配置文件
:::info
GRUB_CMDLINE_LINUX=”net .ifnames=0 biosdevname=0”
:::
(2)为grub2生成其配置文件
:::info
grub2-mkconfig -o /etc/grub2.cfg
grub2-mkconfig -o /boot/grub2/grub.cfg
:::
(3)重启系统
:::info
reboot
:::
2.2 主机名
配置文件:
CentOS6版本
/etc/sysconfig/network
CentOS7以后版本
/etc/hostname
默认没有此文件,通过DNS反向解析获取主机名,主机名默认为: localhost.localdomain。
设置主机名:
hostnamect1 set-hostname centos7.magedu . com
删除文件/etc/hostname,恢复主机名localhost.localdomain
显示主机名信息:
hostname hostnamectl status
2.3 网络配置工具 nmcli
图形工具:nm-connection-editor
字符配置tui工具:
- nmtui
- nmtui-connect
- nmtui-edit
- nmtui-hostname
命令行工具:nmcli
以上工具都依赖 NetworkManager 服务,此服务是管理和监控网络设置的守护进程
nmcli 命令
nmcli 命令相关术语
- 设备即网络接口
- 连接时对网络接口的设置,一个网络接口可以有多个连接配置,但是同时只有一个连接配置生效
格式:
nmcli [ OPTIONS ] OBJECT { COMMAND \ help }
device - show and manage network interfaces
nmcli device help
connection - start, stop,and manage network connections
nmcli connection help
修改IP地址等属性:
nmcli connection modify IFACE [+|-]setting-property value
setting-property: ipv4.addresses ipv4.gateway ipv4.dns1 ipv4.method manual | auto
修改配置文件执行生效:
nmcli con reload
nmc1i con up con-name
nmcli con mod | ifcfg_*文件 |
---|---|
ipv4.method manual | BOOTPROTO=none |
ipv4.method auto | BOOTPROTO=dhcp |
ipv4.addresses 192.168.2.1/24 | IPADDR=192.168.2.1 PREFIX=24 |
ipv4.gateway 172.16.0.200 | GATEWAY=172.16.0.200 |
ipv4.dns 8.8.8.8 | DNS0=8.8.8.8 |
ipv4.dns-search example.com | DOMAlN=example.com |
ipv4.ignore-auto-dns true | PEERDNS=no |
connection.autoconnect yes | ONBOOT=yes |
connection.id eth0 | NAME=eth0 |
connection.interface-name eth0 | DEVICE=eth0 |
802-3-ethernet.mac-address … | HWADDR= … |
范例:nmcli 的基本使用
#查看帮助
➜ ~ nmcli connection add help
#使用nmcli配置网络
➜ ~ nmcli connection show
#显示所有活动连接
➜ ~ nmcli connection show active
#显示网络连接配置
➜ ~ nmcli con show "System eth0"
#显示设备状态
➜ ~ nmcli dev status
#显示网络接口属性
➜ ~ nmcli con show eth0
#创建新连接default,IP自动通过DHCP获取
➜ ~ nmcli con add con-name default type Ethernet ifname eth0
#删除连接
➜ ~ nmcli con del default
#创建新连接static,指定静态IP,不自动连接
➜ ~ nmcli con add con-name static ifname eth0 autoconnect no type Ethernet ipv4.addresses 172.16.X.10/24 ipv4.gateway 172.16.X.254
#启用static连接配置
➜ ~ nmcli con up static
#启用default连接配置
➜ ~ nmcli con up default
#修改连接设置
➜ ~ nmcli con mod "static" connection.autoconnect no
➜ ~ nmcli con mod "static" ipv4.dns 223.5.5.5
➜ ~ nmcli con mod "static" +ipv4.dns 8.8.8.8
➜ ~ nmcli con mod "static" -ipv4.dns 8.8.8.8
➜ ~ nmcli con mod "static" ipv4.addresses "172.16.X.10/24 172.16.X.254"
➜ ~ nmcli con mod "static" +ipv4.addresses 10.10.10.10/16
#DNS设置存放在/etc/resolve.conf,PEERDNS=no 表示当IP通过DHCP自动获取时,DNS仍是手动设置,不自动获取等价于下面命令
➜ ~ nmcli con mod "System eth0" ipv4.ignore-auto-dns yes
2.4 nmcli 实现 bonding
#添加bonding接口
# con-name 连接名
# ifname 接口名
nmcli connection add type bond con-name mybond0 ifname bond0 mode active-backup ipv4.method manual ipv4.addresses 10.0.0.100/24
#添加从属接口
nmcli connection add type bond-slave ifname eth0 master bond0
nmcli connection add type bond-slave ifname eth1 master bond0
#注意:如无为从属接口提供连接名,则该名称时接口名称加类型构成
#查看连接名
nmcli connection
#要启动绑定,则必须首先启动从属接口
nmcli connection up bond-salve-eth0
nmcli connection up bond-salve-eth1
#启动绑定
nmcli connection up mybond0
2.5 网络组 Network Teaming
网络组:是将多个网卡聚合在一起方法,从而实现冗错和提高吞吐量
网络组不同于旧版中bonding技术,提供更好的性能和扩展性
网络组由内核驱动和teamd守护进程实现
多种方式 runner
- broadcast
- roundrobin
- activebackup
- loadbalance
- lacp (implements the 802.3ad Link Aggregation Control Protocol)
网络组特点
- 启动网络组接口不会自动启动网络组中的port接口
- 启动网络组接口中的port接口总会自动启动网络组接口
- 禁用网络组接口会自动禁用网络组中的port接口
- 没有port接口的网络组接口可以启动静态IP连接
- 启用DHCP连接时,没有port接口的网络组会等待port接口的加入
范例:
#创建网络组接口
nmcli con add type team con-name CNAME ifname INAME [config JSON]
CNAME 连接名
INAME 接口名
JSON 指定runner方式,格式:'{"runner": {"name": "METHOD"}}'
#创建port接口
nmcli con add type team-slave con-rlame CNAME ifname INAME master TEAM
CNAME 连接名,连接名若不指定,默认为team-slave-IFACE
INAME 网络接口名
TEAM 网络组接口名
#断开和启动
nmcli dev dis INAME
nmc1i con up CNAME
INAME设备名CNAME网络组接口名或port接口
范例:网络组示例
nmcli con add type team con-name myteam0 ifname team0 config '{"runner": {"name" :"loadbalance" }}' ipv4.addresses 192.168.1.100/24 ipv4.method manual
nmcli con add con-name team0-eth1 type team-slave ifname eth1 master team0
nmcli con add con-name team0-eth2 type team-slave ifname eth2 master team0
nmcli con up team0-eth1
nmcli con up team0-eth2
nmc1i con up myteam0
teamdct1 team0 state
ping -I team0 192.168.0.254
nmcli dev dis eth1
teamdct1 team0 state
nmcli con up team0-port1
nmcli dev dis eth2
teamdct1 team0 state
nmcli con up team0-port2
teamdct1 team0 state
管理网络组配置文件
/etc/sysconfig/network-scripts/ifcfg-team0
DEVICE=team0
DEVICETYPE=Team
TEAM__CONFIG="{\"runner\": { \"name\": \"broadcast\"}}"
BOOTPROTO=none
IPADDR0=172.16.0.100
PREFIX0=24
NAME=team0
ONBOOT=yes
管理网络组配置文件
/etc/sysconfig/network-scripts/ifcfg-team0-eth1
NAME=team0-eth1
DEVICE=eth1
ONBOOT=yes
TEAM_MASTER=team0
DEVICETYPE=TeamPort
删除网络组
nmcli connection delete team0-eth0
nmcli connection delete team0-eth1
nmcli connection delete team0
teamdctl team0 state
nmcli connection show
3 网桥
3.1 桥接原理
桥接:把一台机器上的若干个网络接口”连接”起来。其结果是,其中一个网口收到的报文会被复制给其他网口并发送出去。以使得网口之间的报文能够互相转发。网桥就是这样一个设备,它有若干个网口,并且这些网口是桥接起来的。与网桥相连的主机就能通过交换机的报文转发而互相通信。
主机A发送的报文被送到交换机S1的eth0口,由于eth0与eth1、eth2桥接在一起,故而报文被复制到eth1和eth2,并且发送出去,然后被主机B和交换机S2接收到。而S2又会将报文转发给主机C、D
范例:CentOS 8取消brctl工具,可以用下面方法查看网桥
#查看桥接情况
~ ip link show master virbr0
~ bridge link show
3.2 配置实现网桥
工具包: bridge-utils,目前CentOS 8无此包。
CentOS 7是主机,默认情况下是无法起到Hub,或者交换机的功能;所以默认情况下,收到目的地址不是主机IP地址的数据包,就会丢弃。 桥接设备的IP地址并没有关系。
yum install bridge-utils -y
#查看网桥
brctl show
#查看CAM(content addressable memory内容可寻址存储器)表
brctl showmacs br0
#添加和删除网桥
brctl addbr br0 | delbr br0
#添加和删除网桥中的网卡
brctl addif br0 eth0 | delbr br0 eth0
ip link | ip addr
#默认br0,是down,必须启用
ifconfig br0 up
ip link set br0 up
#启用STP
brctl show
brctl stp br0 on
brctl show
#以上操作都是临时生效,重启系统将丢失配置
注意:NetworkManager只支持以太网接口接口连接到网桥,不支持聚合接口
范例:nmcli 命令创建软件网桥
nmcli connection add con-name mybr0 type bridge ifname br0
nmcli connection modify mybr0 ipv4.addresses 10.0.0.100/24 ipv4.method manual
nmcli connection con-name br0-port0 type bridge-slave ifname eth0 master br0
查看配置文件
cat /etc/sysconfig/network-scripts/ifcfg-br0
cat /etc/sysconfig/network-scripts/ifcfg-br0-port0
范例:nmcli 实现
#1创建网桥
#nmcli默认会开启stp生成树协议
nmcli con add type bridge con-name br0 ifname br0
#(可选)网桥可以不加地址,添加地址为了方便管理
nmcli connection modify br0 ipv4.addresses 10.0.0.100/24 ipv4.method manual
nmcli con up br0
#2加入物理网卡
nmcli connection add type bridge-slave con-name br0-port0 ifname eth0 master br0
nmcli connection add type bridge-slave con-name br0-port1 ifname eth1 master br0
nmcli con up br0-port0
nmcli con up br0-port1
#3查看网桥配置文件
cat/etc/sysconfig/network-scripts/ifcfg-br0
DEVICE=br0
STP=yes
TYPE=Bridge
BOOTPROTO=static
IPADDR=10.0.0.100
PREFIX=24
cat /etc/sysconfig/network-scripts/ifcfg-br0-port0
TYPE=Ethernet
NAME=br0-port0
DEVICE=eth0
ONBOOT=yes
BRIDGE=br0
UUID=23f41d3b-b57c-4e26-9b17-d5f02dafd12d
#4安装管理软件包
yum install -y bridge-utils
brctl show
#5删除br0
nmcli con down br0
rm /etc/sysconfig/network-scripts/ifcfg-br0*
nmcli con reload