Andrew Mercer
on this page

What it is

teamd is the userspace daemon of the libteam project. It controls a kernel team device that combines multiple NICs into one logical interface for redundancy or throughput. The behaviour depends on the selected runner: activebackup, loadbalance, roundrobin, broadcast, or lacp (802.3ad).

Status: Red Hat deprecated network teaming in RHEL 9 and recommends the in-kernel bonding driver for new setups. Teaming still works on RHEL 8 and older systems, and the concepts (active-backup, LACP, hashing) map directly onto bonding modes. For new builds, create type bond connections with nmcli instead.

Create a load-balancing team

nmcli connection add type team con-name team0 ifname team0 config '{"runner": {"name": "loadbalance"}}'

nmcli connection modify team0 ipv4.addresses 192.168.1.50/24
nmcli connection modify team0 ipv4.method manual

nmcli connection add type team-slave con-name team0-eth0 ifname eth0 master team0
nmcli connection add type team-slave con-name team0-eth1 ifname eth1 master team0

nmcli connection up team0-eth0
nmcli connection up team0-eth1
teamdctl team0 state

Create an active-backup team

nmcli connection add type team con-name team0 ifname team0 config '{"runner": {"name": "activebackup"}}'
nmcli connection modify team0 ipv4.addresses 192.168.1.50/24 ipv4.method manual
nmcli connection add type team-slave con-name team0-eth0 ifname eth0 master team0
nmcli connection add type team-slave con-name team0-eth1 ifname eth1 master team0
nmcli connection up team0-eth0
nmcli connection up team0-eth1

Check the state:

teamdctl team0 state
setup:
  runner: activebackup
ports:
  eth0
    link watches:
      link summary: up
  eth1
    link watches:
      link summary: up
runner:
  active port: eth0

Test failover

ping -I team0 192.168.1.13 &          # keep traffic flowing
nmcli device disconnect eth0
teamdctl team0 state                  # active port should have moved to eth1
nmcli device connect eth0

Pings should continue with at most a brief gap. When eth0 returns it rejoins as a backup and does not take over again unless a port priority makes it preferred.

nmcli connection add type bond con-name bond0 ifname bond0 bond.options "mode=active-backup,miimon=100"
nmcli connection add type ethernet slave-type bond con-name bond0-eth0 ifname eth0 master bond0
nmcli connection add type ethernet slave-type bond con-name bond0-eth1 ifname eth1 master bond0
nmcli connection modify bond0 ipv4.addresses 192.168.1.50/24 ipv4.method manual
nmcli connection up bond0
cat /proc/net/bonding/bond0

For LACP use mode=802.3ad, and configure a matching port-channel on the switch. See nmcli for general connection handling.