网卡绑定是一种网络配置技术,通常用于增加网络带宽、提高网络可用性和负载均衡。它涉及将多个网络接口卡(NICs)绑定在一起,形成一个虚拟网络接口,以实现一些特定的目标,例如:
- 负载均衡: 将流量分配到多个物理网卡上,以平衡网络负载,确保每个网卡都能够充分利用。
- 冗余和容错: 如果一个网卡故障,绑定的其他网卡可以继续提供网络连接,提高系统的可用性。
- 增加带宽: 多个网卡绑定后,系统可以实现更高的总带宽,适用于需要大量网络流量的应用或服务器。
这些配置通常在服务器和高性能网络设备上使用,以提高性能和可靠性。
一 环境
[xml@kvmhost001 ~]$ hostname
kvmhost001
[xml@kvmhost001 ~]$ ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.11.152 netmask 255.255.255.0 broadcast 192.168.11.255
inet6 fe80::72aa:8661:6a5d:13aa prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:d0:ec:92 txqueuelen 1000 (Ethernet)
RX packets 500 bytes 77482 (75.6 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 109 bytes 12919 (12.6 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ens37: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.11.155 netmask 255.255.255.0 broadcast 192.168.11.255
inet6 fe80::b09c:951f:db12:6bea prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:d0:ec:9c txqueuelen 1000 (Ethernet)
RX packets 413 bytes 49286 (48.1 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 33 bytes 5667 (5.5 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 32 bytes 2592 (2.5 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 32 bytes 2592 (2.5 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
virbr0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255
ether 52:54:00:fc:cf:b0 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[xml@kvmhost001 ~]$ getenforce
Disabled
[xml@kvmhost001 ~]$ systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:firewalld(1)
[xml@kvmhost001 ~]$ ip link
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:d0:ec:92 brd ff:ff:ff:ff:ff:ff
3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
link/ether 00:0c:29:d0:ec:9c brd ff:ff:ff:ff:ff:ff
4: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default qlen 1000
link/ether 52:54:00:fc:cf:b0 brd ff:ff:ff:ff:ff:ff
5: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN mode DEFAULT group default qlen 1000
link/ether 52:54:00:fc:cf:b0 brd ff:ff:ff:ff:ff:ff
[xml@kvmhost001 ~]$
我们将要绑定的就是ens33和ens37两块网卡。
二 执行绑定
配置文件法
2.1 方法1-bond
以下是设置双网卡绑定的步骤:
- 安装所需的软件包:
sudo yum install bonding
- 确保系统已经安装了双网卡,并且已经正确配置IP地址和网关。
- 打开终端,以root用户身份登录。
- 编辑网络配置文件
/etc/sysconfig/network-scripts/ifcfg-eth33
和/etc/sysconfig/network-scripts/ifcfg-eth37
,分别对应双网卡的配置文件。 - 在
ifcfg-eth33
和ifcfg-eth7
中添加以下配置:
MASTER=bond0
SLAVE=yes
这将把两个网卡绑定到一个虚拟接口bond0上。
- 创建一个新的网络配置文件
DEVICE=bond0
BOOTPROTO=static
ONBOOT=yes
IPADDR=<IP地址>
NETMASK=<子网掩码>
GATEWAY=<网关地址>
BONDING_OPTS="mode=balance-rr miimon=100"
这将配置bond0接口的IP地址、子网掩码、网关地址,并设置绑定模式为负载均衡。
注意:这里是绑定后的VIP地址信息。
你可以根据需要更改BONDING_OPTS
中的mode
参数来配置其他绑定模式,如负载均衡(balance-rr)等。
常用可以使用的模式有:
balance-rr or 0 — 用于容错和负载平衡的循环模式
active-backup or 1 — 设置用于容错的活动备份模式
balance-xor or 2 — 为容错和负载平衡设置异或(异或)模式。
broadcast or 3 — 设置容错的广播模式。所有传输都在所有的从接口上发送。
802.3ad or 4 — 设置IEEE 802.3ad动态链接聚合模式。创建共享相同速度和双工设置的聚合组。
balance-tlb or 5 — 设置传输负载平衡(TLB)模式以实现容错和负载平衡。
balance-alb or 6 — 为容错和负载平衡设置活动负载平衡(ALB)模式。
常用的三种方式(mode-0 mode-1 mode-6) 只有 mode 1 实现了故障切换。
这里需要特别注意的地方:BONDING_OPTS='miimon=100 mode=6 fail_over_mac=1' ,如果是虚拟机,fail_over_mac=1 是必须要带上的,否则vmware会出现告警信息,配置起来能正常用,但是在进行准备切换时,是无法进行的。切记!
vmware 出现这样的提示基本可以确定 fail_over_mac 没有生效,所配置的网卡也无法做到故障切换。
- 保存并关闭文件。
- 重启网络服务以应用更改:
systemctl restart network
- 确认双网卡绑定是否成功:
cat /proc/net/bonding/bond0
如果看到类似以下输出,表示双网卡绑定已经成功:
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)
Bonding Mode: load balancing (round-robin)
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Slave Interface: eth33
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:d0:ec:92
Slave queue ID: 0
Slave Interface: eth37
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:d0:ec:9
Slave queue ID: 0
现在你的CentOS 7系统已经成功设置了双网卡绑定。
2.2 方法2-teamd
可以使用Team技术来绑定多个网络接口。以下是一些步骤,以完成CentOS 7网卡绑定:
- 安装teamd(如果尚未安装):
sudo yum install teamd
- 创建一个team配置文件,比如
sudo nano /etc/team/team0.conf
在配置文件中,你可以指定要绑定的网络接口以及其配置。以下是一个示例配置文件:
[team0]
control_port = 6666
link_watchers = ethtool
runner = activebackup
tx_balancer = basic
link_up_delay = 200
link_down_delay = 200
[team0-port]
ifname = eth0
link_watchers = ethtool
[team0-port]
ifname = eth1
link_watchers = ethtool
在这个示例中,我们创建了一个名为 "team0" 的团队接口,它绑定了两个网络接口 eth0 和 eth1。你可以根据自己的需求进行自定义配置。
- 启动Team接口:
sudo teamd -g -c /etc/team/team0.conf
- 配置网络接口以使用Team接口。
DEVICE=team0
TEAM_CONFIG=/etc/team/team0.conf
ONBOOT=yes
BOOTPROTO=none
IPADDR=192.168.1.100 # 设置你的IP地址
NETMASK=255.255.255.0 # 设置子网掩码
GATEWAY=192.168.1.1 # 设置网关地址
- 启动并激活Team接口:
sudo systemctl restart network
在Team技术的配置文件中,control_port
是一个参数,用于指定Team接口的控制端口的监听端口号。控制端口用于与teamd守护进程进行通信,以控制Team接口的行为。
具体来说,control_port
参数的意义如下:
control_port
:指定Team接口的控制端口的监听端口号。在配置文件中,它的值通常是一个整数,表示监听的端口号。
默认情况下,Team接口的控制端口是6666,但你可以根据需要更改它。控制端口允许你通过teamd守护进程对Team接口进行管理和监控,例如启动、停止、重新加载配置等操作。
当你更改control_port
的值时,确保在Team接口的其他相关配置中也相应地进行了更改,以便正确配置和管理Team接口。同时,任何需要与Team接口进行交互的工具或脚本也需要知道新的控制端口号。
关于物理网卡:
在使用Team技术进行网卡绑定时,你通常不需要单独配置每个成员接口(比如 eth0
)的网络配置。Team接口将管理成员接口的网络配置。但是,你需要确保成员接口(如 eth0
)在操作系统中处于启用状态(UP
),以便Team接口可以将其添加为成员。
以下是一些注意事项:
- 成员接口状态:确保成员接口(例如
eth0
)处于启用状态。你可以使用以下命令来检查和激活成员接口:
sudo ip link set eth0 up
这将确保 eth0
处于激活状态,以便Team接口可以使用它。
- 不要在成员接口上配置IP地址:一般情况下,不需要在成员接口上配置IP地址或其他网络配置。网络配置应该在Team接口上完成,而不是在成员接口上。因此,确保成员接口没有任何IP地址或其他网络配置,以避免冲突。
- 配置应用于Team接口:所有网络配置,如IP地址、子网掩码、网关等,应该在Team接口上进行配置。你可以在Team接口的配置文件(例如
/etc/sysconfig/network-scripts/ifcfg-team0
)中指定这些配置。
总之,成员接口(如 eth0
)的主要任务是提供物理连接,而网络配置应该在Team接口上进行。Team接口将管理成员接口,并根据其配置进行负载均衡或冗余操作。确保成员接口处于启用状态,但不要在其上配置IP地址或其他网络配置。网络配置应该针对Team接口进行。
指令法
"type bond" 和 "type team" 是两种不同的网络连接类型,用于实现网络接口的绑定和聚合,但它们有一些区别:
a. Bonding (type bond):
- Bonding 是一种通过将多个网络接口绑定在一起以增加可用带宽和冗余的技术。它在OSI模型的第二层(数据链路层)工作。
- Bonding 支持多种负载均衡模式,如 round-robin、active-backup、balance-xor 等,可以根据需求进行配置。
- Bonding 在内核层面操作,因此通常不需要额外的守护进程或软件来实现。
- 常用于服务器环境,以提高网络性能和可靠性。
b. Teaming (type team):
- Teaming 是一种高级的连接聚合技术,它在OSI模型的第三层(网络层)工作。与 Bonding 不同,它不仅可以聚合多个物理接口,还可以在不同的子网中工作。
- Teaming 支持更复杂的负载均衡和策略路由,使其适用于更复杂的网络拓扑和需求。
- Teaming 通常需要用户空间守护进程(例如,teamd)来管理连接,并且可能需要额外的配置。
- 常用于数据中心和复杂网络环境,以提供高可用性和负载分配。
总之,Bonding 和 Teaming 都用于将多个网络接口组合成一个逻辑接口,但它们的适用场景和功能有所不同。Bonding 更适用于简单的负载均衡和冗余需求,而 Teaming 更适用于复杂的网络拓扑和高级路由需求。
2.3 nmcli - type bond
使用nmcli
配置网卡绑定(Bonding),你可以按照以下步骤进行操作,将类型(type)设置为bond
:
- 打开终端,以root或具有sudo权限的用户身份登录。
- 确保你已经安装了
NetworkManager
,如果没有安装,可以使用以下命令安装:
sudo yum install NetworkManager
- 确保
NetworkManager
服务已经启动并已启用:
sudo systemctl start NetworkManager
sudo systemctl enable NetworkManager
- 使用用
nmcli
命令创建一个新的Bond接口配置文件。在下面的命令中,将BOND_NAME
替换为你想要的Bond接口名称,例如bond0
:
sudo nmcli connection add type bond con-name BOND_NAME ifname BOND_NAME mode 802.3ad miimon 100 updelay 200 downdelay 200
mode 802.3ad
表示采用802.3ad聚合模式(也称为LACP)。miimon 100
设置链路监视间隔为100毫秒。updelay 200
设置链路上升延迟为200毫秒。downdelay 200
设置链路下降延迟为200毫秒。
- 添加要绑定到Bond接口的网卡。假设你要绑定
eth0
和eth1
,使用以下命令:
sudo nmcli connection add type ethernet con-name BOND_NAME-port1 ifname eth0 master BOND_NAME
sudo nmcli connection add type ethernet con-name BOND_NAME-port2 ifname eth1 master BOND_NAME
- 激活Bond接口:
sudo nmcli connection up BOND_NAME
- 验证Bond接口的状态,确保它处于活动状态:
sudo nmcli connection show BOND_NAME
如果状态显示为"已激活",则说明Bonding已成功创建并激活。
现在,你已经在CentOS 7上使用nmcli
成功配置了一个Bond接口,并设置了所需的模式(在此示例中为802.3ad)。
2.4 nmcli - type team
使用nmcli
配置网卡绑定(Teaming),请按照以下步骤进行操作:
- 打开终端,以root或具有sudo权限的用户身份登录。
- 确保你已经安装了
NetworkManager
,如果没有安装,可以使用以下命令安装:
sudo yum install NetworkManager
- 确保
NetworkManager
服务已经启动并且已启用:
sudo systemctl start NetworkManager
sudo systemctl enable NetworkManager
- 使用
nmcli
命令创建一个新的Team接口配置文件。在下面的命令中,将TEAM_NAME
替换为你想要的团队名称:
sudo nmcli connection add type team con-name TEAM_NAME ifname TEAM_NAME
- 添加网卡到Team接口。你可以将多个网卡添加到团队。以下是一个示例,假设你要绑定
eth0
和eth1
:
sudo nmcli connection add type team-slave con-name TEAM_NAME-port1 ifname eth0 master TEAM_NAME
sudo nmcli connection add type team-slave con-name TEAM_NAME-port2 ifname eth1 master TEAM_NAME
- 设置Team接口的运行模式。在下面的命令中,我们将其设置为Round Robin模式,但你可以根据需要选择其他模式,例如Active-Backup:
sudo nmcli connection modify TEAM_NAME team.runner.name roundrobin
或者,如果你想设置为Active-Backup模式,可以使用以下命令:
sudo nmcli connection modify TEAM_NAME team.runner.name activebackup
- 激活Team接口:
sudo nmcli connection up TEAM_NAME
- 验证Team接口的状态,确保它处于活动状态:
sudo nmcli connection show TEAM_NAME
如果状态显示为"已激活",则说明Team绑定已成功创建并激活。
配置IP地址。运行以下命令,将IP地址、子网掩码和网关替换为你的网络配置:
sudo nmcli connection modify TEAM_NAME ipv4.address IP_ADDRESS/NETMASK
sudo nmcli connection modify TEAM_NAME ipv4.gateway GATEWAY
例如,如果你的IP地址是192.168.1.10,子网掩码是255.255.255.0,网关是192.168.1.1,那么命令将如下所示:
sudo nmcli connection modify team0 ipv4.address 192.168.1.10/24
sudo nmcli connection modify team0 ipv4.gateway 192.168.1.1
三 技术比较
Team和Bond(或者Linux Bonding)都是用于实现网卡绑定的技术,它们在不同的Linux发行版中都有支持。选择使用哪种技术取决于你的具体需求和环境。
下面是一些关于选择的建议:
- Team技术:
- Team是一个较新的技术,通常在更新的Linux发行版中有更好的支持。
- Team支持多种负载均衡和冗余模式,包括活动备份、负载均衡和广播。
- 它提供了更多的配置选项和灵活性,适用于更复杂的网络架构。
- 如果你使用较新的硬件和内核,Team可能是更好的选择。
- Bond技术(Linux Bonding):
- Bonding是一个成熟的技术,已经在Linux中使用了很长时间。
- 它通常在各种Linux发行版中都有广泛支持,包括旧版本。
- Bonding提供了一些基本的模式,如活动备份、负载均衡和广播,适用于常见的需求。
- 如果你在较旧的硬件或较旧的Linux发行版上工作,Bonding可能更适合。
综上所述,如果你的系统使用较新的硬件和内核,需要更高级的配置选项,或者想要更多灵活性,Team技术可能是更好的选择。如果你需要一种较为简单的方式来绑定网卡,而且要确保在各种Linux版本上都能工作,那么Bonding技术可能更适合你。