Tuesday, 23 December 2014

Configuring Network Teaming using nmcli in RHEL 7.0

Network teaming is a method for linking NICs together logically to allow fail-over or higher throughput. Teaming is a new implementation that does not affect the older bonding driver in linux kernel; it offers an alternate implementation.

RHEL7 support the standard channel bonding for backward compatibility ( for more information on channel bonding click here ). Network teaming provides better performance and is more extensive because of the modular design.

RHEL 7.0 implement network teaming with a small kernel driver and a small user space daemon called "teamd". The kernel handles network packets efficiently and teamd handles logic and interface processing. Software, called runners, implement load balancing  and active backup logic, such as round robin. the following runners are available to teamd.

broadcast    : A simple runner which transmits each packet from all ports.
roundrobin : A simple runner which transmits each packets in a round-robin fashion from each of its ports.
activebackup: This is a failover runner which watches for link changes and select an active port for data transfer.
loadbalance: This runner monitor traffic and uses a hash function to try to reach a perfect balance when selecting ports for packet transmission.
lacp  : Implement the 802.3ad Link Aggregation Control Protocol. can use the same transmit port selection possibilities as the loadbalance runner.

Now let me show you how to configure teaming in RHEL 7.0.
Decide which interfaces that you would like to configure a Team interface.
run ip link  command to check the available interface in the system.

Here i am using eno33554992 and eno50332216 NICs to create a team interface in activebackup mode.
Use nmcli command to create a connection for the network team interface,with the following syntax.

#nmcli con add type team con-name CNAME ifname INAME [config JSON]

Where CNAME will be the name used to refer the connection ,INAME will be the interface name and  JSON (JavaScript Object Notation) specifies the runner to be used. JSON has the following syntax:

'{"runner":{"name":"METHOD"}}'

where METHOD is one of the following: broadcast, activebackup, roundrobin, loadbalance or lacp.

Now let me create the team interface. here is the command i used to create the team interface.
 

run #nmcli con show command to verify the team configuration.

Now lets add the slave devices to the master team0. here is the syntax for adding the slave devices.

#nmcli con add type team-slave con-name CNAME ifname INAME master TEAM

Here i am adding eno33554992 and eno50332216 as slave devices for team0 interface.


Verify the connection configuration using  #nmcli con show again. now you could see the slave configuration.



All the above command will create the required configuration files under /etc/sysconfig/network-scripts/.
[root@foundation ~]# ll /etc/sysconfig/network-scripts/ifcfg-team0*
-rw-r--r--. 1 root root 333 Dec 24 03:30 /etc/sysconfig/network-scripts/ifcfg-team0
-rw-r--r--. 1 root root 312 Dec 24 03:37 /etc/sysconfig/network-scripts/ifcfg-team0-port1
-rw-r--r--. 1 root root 312 Dec 24 03:37 /etc/sysconfig/network-scripts/ifcfg-team0-port2
[root@foundation ~]#


Lets assign an IP address to this team0 interface and enable the connection now. Here is the command to perform the IP assignment.

#nmcli con mod team0 ipv4.addresses "192.168.1.24/24 192.168.1.1"
#nmcli con mod team0 ipv4.method manual
#nmcli con up team0




Verify the IP address information in #ip add show team0 command.



Now lets check the activebackup configuration functionality. using the teamdctl command.
# teamdctl team0 state 



Now lets disconnect the active port and check the state again. to confirm whether the active backup configuration is working as expected.
#nmcli dev dis eno50332216


disconnected the active port and now check the state again using #teamdctl team0 state





Yes its working as expected. !!  you could connect the disconnected connection back to team0 using the following command.
#nmcli dev con eno50332216


we have one more command called teamnl let me show you some options with teamnl command.
to check the ports in team0 run the following command.
# teamnl team0 ports


Display currently active port of team0.
# teamnl team0 getoption activeport

There are many options , i would recommend to use manpages to get more information on teamnl and teamdctl command.
Hope this article is useful to you .share your feedback if any .

No comments:

Post a Comment