On recent version of Fefora, CentOS, and RHEL, it is possible to use teamd to setup link aggregation. Teamd is more configurable and it allows load balancing on LACP. Here we will walk through the simple configurations using old-fashion config files.
To setup load balancing without switch support (or when both connection go to the same switch)
# ifcfg-team0 DEVICE=team0 DEVICETYPE=team NM_CONTROLLED=no ONBOOT=yes BOOTPROTO=none IPADDR=192.168.122.13 PREFIX=24 TEAM_CONFIG='{"runner": {"name": "loadbalance"}, "link_watch": {"name": "ethtool"}}' GATEWAY=192.168.122.1 # ifcfg-eth0 DEVICE=eth0 BOOTPROTO=none TEAM_MASTER=team0 DEVICETYPE=TeamPort ONBOOT=no NM_CONTROLLED=no # ifcfg-eth1 DEVICE=eth1 BOOTPROTO=none TEAM_MASTER=team0 DEVICETYPE=TeamPort ONBOOT=no NM_CONTROLLED=no
To configure LACP which requires port channel on the switch side
DEVICE=team0 DEVICETYPE=Team NM_CONTROLLED=no ONBOOT=yes BOOTPROTO=none TEAM_CONFIG='{"runner": {"name": "lacp", "active": false, "fast_rate": false, "tx_hash": ["eth", "ipv4"]}}'
And if it happens that you need VLAN tagging as well
PHYSDEV=team0 DEVICE=vlan123 NM_CONTROLLED=no ONBOOT=yes BOOTPROTO=static IPADDR=10.10.10.10 PREFIX=24 GATEWAY=10.10.10.1 VLAN=yes VLAN_NAME_TYPE=VLAN_PLUS_VID_NO_PAD VLAN_ID=123
teamd administration can be done with teamdctl. One can add / remove TeamPort much like adding/removing slaves using ifenslave. To view the status of a team:
$ teamdctl team0 state view -v setup: runner: loadbalance kernel team mode: loadbalance D-BUS enabled: yes ZeroMQ enabled: no debug level: 0 daemonized: no PID: 659 PID file: /var/run/teamd/team0.pid ports: eth0 ifindex: 2 addr: 52:54:00:74:0d:24 ethtool link: 0mbit/halfduplex/up link watches: link summary: up instance[link_watch_0]: name: ethtool link: up link up delay: 0 link down delay: 0 eth1 ifindex: 3 addr: 52:54:00:74:0d:24 ethtool link: 0mbit/halfduplex/up link watches: link summary: up instance[link_watch_0]: name: ethtool link: up link up delay: 0 link down delay: 0
Official documentation is available here.