Question:

Recently I have to use the RHEL and need to config the network with a few NICs. Here comes the question: What's the network bonding and How to bond? So I write this post.

What's network bonding?

      Network bonding is a method of combining (joining) two or more network interfaces together into a single interface. It will increase the network throughput, bandwidth and will give redundancy. If one interface is down or unplugged, the other one will keep the network traffic up and alive. Network bonding can be used in situations wherever you need redundancy, fault tolerance or load balancing networks.

Linux allows us to bond multiple network interfaces into single interface using a special kernel module named bonding. The Linux bonding driver provides a method for combining multiple network interfaces into a single logical “bonded” interface. The behaviour of the bonded interfaces depends upon the mode; generally speaking, modes provide either hot standby or load balancing services. Additionally, link integrity monitoring, may be performed.

Types of network Bonding

According the to the official documentation, here is the types of network bonding modes.

mode=0 (balance-rr)

Round-robin policy: It the default mode. It transmits packets in sequential order from the first available slave through the last. This mode provides load balancing and fault tolerance.

mode=1 (active-backup)

Active-backup policy: In this mode, only one slave in the bond is active. The other one will become active, only when the active slave fails. The bond’s MAC address is externally visible on only one port (network adapter) to avoid confusing the switch. This mode provides fault tolerance.

mode=2 (balance-xor)

XOR policy: Transmit based on [(source MAC address XOR’d with destination MAC address) modulo slave count]. This selects the same slave for each destination MAC address. This mode provides load balancing and fault tolerance.

mode=3 (broadcast)

Broadcast policy: transmits everything on all slave interfaces. This mode provides fault tolerance.

mode=4 (802.3ad)

IEEE 802.3ad Dynamic link aggregation. Creates aggregation groups that share the same speed and duplex settings. Utilizes all slaves in the active aggregator according to the 802.3ad specification.

 

Prerequisites:

– Ethtool support in the base drivers for retrieving the speed and duplex of each slave.
– A switch that supports IEEE 802.3ad Dynamic link aggregation. Most switches will require some type of configuration to enable 802.3ad mode.

mode=5 (balance-tlb)

Adaptive transmit load balancing: channel bonding that does not require any special switch support. The outgoing traffic is distributed according to the current load (computed relative to the speed) on each slave. Incoming traffic is received by the current slave. If the receiving slave fails, another slave takes over the MAC address of the failed receiving slave.

Prerequisite:

– Ethtool support in the base drivers for retrieving the speed of each slave.

mode=6 (balance-alb)

Adaptive load balancing: includes balance-tlb plus receive load balancing (rlb) for IPV4 traffic, and does not require any special switch support. The receive load balancing is achieved by ARP negotiation. The bonding driver intercepts the ARP Replies sent by the local system on their way out and overwrites the source hardware address with the unique hardware address of one of the slaves in the bond such that different peers use different hardware addresses for the server.

Setting up network Bonding on RHEL

Config the network bonding (mode 1 )

shutdown the nm (if you don't shoudown the nm, you can use nmcli con reload to make the nm reload the config file)

systemctl stop NetworkManager.service
systemctl disable NetworkManager.service

check the mod

modprobe --first-time bonding
lsmod | grep bonding

create the bond0 interface file

vim /etc/sysconfig/network-scripts/ifcfg-bond0
TYPE=Bond
BOOTPROTO=dhcp
NAME=bond0
DEVICE=bond0
ONBOOT=yes
BONDING_MASTER=yes
BONDING_OPTS="mode=1 miimon=100"
#IPADDR=10.73.73.21
#PREFIX=

fix the two files - ifcfg-eno1 ; ifcfg-eno2

[root@hp-dl320eg8- network-scripts]# cat ifcfg-eno1
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=eno1
UUID=fa3a6d8b---a6e4-c93cf3480ac1
DEVICE=eno1
ONBOOT=yes
MASTER=bond0
SLAVE=yes
[root@hp-dl320eg8- network-scripts]# cat ifcfg-eno2
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=xuyaowen
UUID=3624711a-f96d-40cb-9b06-0f10031c0895
DEVICE=eno2
ONBOOT=yes
MASTER=bond0
SLAVE=yes

restart the network

systemctl restart network

check the bond0 status

cat /proc/net/bonding/bond0
[root@hp-dl320eg8- network-scripts]# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.7.1 (April , ) Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: eno1
MII Status: up
MII Polling Interval (ms):
Up Delay (ms):
Down Delay (ms): Slave Interface: eno1
MII Status: up
Speed: Mbps
Duplex: full
Link Failure Count:
Permanent HW addr: :::0d:fb:
Slave queue ID: Slave Interface: eno2
MII Status: up
Speed: Mbps
Duplex: full
Link Failure Count:
Permanent HW addr: :::0d:fb:
Slave queue ID:

As you see in the above output, the bond0 interface is up and running and it is configured as active-backup(mode1) mode. In this mode, only one slave in the bond is active. The other one will become active, only when the active slave fails.

finished!

some command about net:

ifup ifcfg-bond0

ifdown ifcfg-bond0

to make the interface up/down

if the nm(network manager) is up:

use nmcli con reload to let the nm to know the changes.

ip addr show to show the addr

References:

  1. Linux Basics: Create Network Bonding On CentOS 7/6.5
  2. RHEL 7 Networking Guide
  3. 多网卡的7种bond模式原理
  4. linux下网卡bonding配置

保持更新,转载请注明出处。

最新文章

  1. ASP.NET MVC View 和 Web API 的基本权限验证
  2. JavaScript正则表达式详解(一)正则表达式入门
  3. Android 时间维护服务 TimeService(针对于特殊定制设备)
  4. 2016.6.23 PHP实现新闻发布系统主体部分
  5. nyoj 76 超级台阶
  6. 小凡的Linux主机与时间服务器同步记录
  7. [改善Java代码]频繁插入和删除时使用LinkedList
  8. vim emmet配置
  9. 关于js中return false、event.preventDefault()和event.stopPropagation()
  10. HDU 5726 GCD(DP)
  11. 【PHP】最详细PHP从入门到精通(五)——PHP错误处理
  12. JMQ
  13. Java语言编程 - Java历史简介
  14. Cnario Player 接入视频采集卡采集外部音视频信号测试
  15. html_jQuery
  16. nodejs实时的检测系统文件的变化(无需重启服务)
  17. CSS盒模型的介绍
  18. springboot 与 mybatis 中事务特性讲解
  19. 【cs229-Lecture2】Linear Regression with One Variable (Week 1)(含测试数据和源码)
  20. BZOJ3107 CQOI2013二进制A+B(动态规划)

热门文章

  1. 简单的字母全排列问题—递归法和STL法
  2. MongoDB学习3 $操作符表达式大全及实例
  3. PTA (Advanced Level) 1009 Product of Polynomials
  4. 第4章 Selenium2-java WebDriver API (一)
  5. 第二章 Servlet基础
  6. 程序员必知的8大排序(四)-------归并排序,基数排序(java实现)
  7. UVa 11988 Broken Keyboard(数组模拟链表)
  8. laravel 赋值
  9. .netcore使用vscode多项目调试
  10. access数据库 配置路径