Chapter 12. Network Interface Bonding This chapter defines some of the bonding options you can use in your custom network configuration. 12.1. Network Interface Bonding and Link Aggregation Control Protocol (LACP) You can bundle multiple physical NICs together to form a single logical channel known as a bond. Bonds can be configured to provide redundancy for high availability systems or increased throughput. Red Hat OpenStack Platform supports Linux bonds, Open vSwitch (OVS) kernel bonds, and OVS-DPDK bonds. The bonds can be used with the optional Link Aggregation Control Protocol (LACP). LACP is a negotiation protocol that creates a dynamic bond for load balancing and fault tolerance. Red Hat recommends the use of Linux kernel bonds (bond type: linux_bond) over OvS kernel bonds (bond type: ovs_bond). User mode bonds (bond type: ovs_dpdk_bond) should be used with user mode bridges (type: ovs_user_bridge) as opposed to kernel mode bridges (type: ovs_bridge). However, don't combine ovs_bridge and ovs_user_bridge on the same node. On control and storage networks, Red Hat recommends the use of Linux bonds with VLAN and LACP, because OVS bonds carry the potential for control plane disruption that can occur when OVS or the neutron agent is restarted for updates, hot fixes, and other events. The Linux bond/LACP/VLAN configuration provides NIC management without the OVS disruption potential. Here is an example configuration of a Linux bond with one VLAN. The following example shows a Linux bond plugged into the OVS bridge The following example shows an OVS user space bridge: 12.2. Open vSwitch Bonding Options The Overcloud provides networking through Open vSwitch (OVS). The following table describes support for OVS kernel and OVS-DPDK for bonded interfaces. The OVS/OVS-DPDK balance-tcp mode is available as a technology preview only. Note This support requires Open vSwitch 2.11 or later. OVS Bond mode Application Notes Compatible LACP options active-backup High availability (active-passive) active, passive, or off balance-slb Increased throughput (active-active) Performance is affected by extra parsing per packet. There is a potential for vhost-user lock contention. active, passive, or off balance-tcp (tech preview only ) Not recommended (active-active) Recirculation needed for L4 hashing has a performance impact. As with balance-slb, performance is affected by extra parsing per packet and there is a potential for vhost-user lock contention. LACP must be enabled. active or passive You can configure a bonded interface in the network environment file using the BondInterfaceOvsOptions parameter as shown in this example: 12.3. Linux bonding options You can use LACP with Linux bonding in your network interface templates. For example: mode - enables LACP. lacp_rate - defines whether LACP packets are sent every 1 second, or every 30 seconds. updelay - defines the minimum amount of time that an interface must be active before it is used for traffic (this helps mitigate port flapping outages). miimon - the interval in milliseconds that is used for monitoring the port state using the driver's MIIMON functionality. 12.4. General bonding options The following table provides some explanation of these options and some alternatives depending on your hardware. Table 12.1. Bonding Options bond_mode=balance-slb Balances flows based on source MAC address and output VLAN, with periodic rebalancing as traffic patterns change. Bonding with balance-slb allows a limited form of load balancing without the remote switch's knowledge or cooperation. SLB assigns each source MAC and VLAN pair to a link and transmits all packets from that MAC and VLAN through that link. This mode uses a simple hashing algorithm based on source MAC address and VLAN number, with periodic rebalancing as traffic patterns change. This mode is similar to mode 2 bonds used by the Linux bonding driver. This mode can be used to provide load balancing even when the switch is not configured to use LACP. bond_mode=active-backup This mode offers active/standby failover where the standby NIC resumes network operations when the active connection fails. Only one MAC address is presented to the physical switch. This mode does not require any special switch support or configuration, and works when the links are connected to separate switches. This mode does not provide load balancing. lacp=[active|passive|off] Controls the Link Aggregation Control Protocol (LACP) behavior. Only certain switches support LACP. If your switch does not support LACP, use bond_mode=balance-slb or bond_mode=active-backup . other-config:lacp-fallback-ab=true Sets the LACP behavior to switch to bond_mode=active-backup as a fallback. other_config:lacp-time=[fast|slow] Set the LACP heartbeat to 1 second (fast) or 30 seconds (slow). The default is slow. other_config:bond-detect-mode=[miimon|carrier] Set the link detection to use miimon heartbeats (miimon) or monitor carrier (carrier). The default is carrier. other_config:bond-miimon-interval=100 If using miimon, set the heartbeat interval in milliseconds. other_config:bond_updelay=1000 Number of milliseconds a link must be up to be activated to prevent flapping. other_config:bond-rebalance-interval=10000 Milliseconds between rebalancing flows between bond members. Set to zero to disable.

Commands:
params: USDnetwork_config: network_config: - type: linux_bond name: bond_api bonding_options: "mode=active-backup" use_dhcp: false dns_servers: ` get_param: DnsServers members: - type: interface name: nic3 primary: true - type: interface name: nic4 - type: vlan vlan_id: get_param: InternalApiNetworkVlanID device: bond_api addresses: - ip_netmask: get_param: InternalApiIpSubnet
params: USDnetwork_config: network_config: - type: ovs_bridge name: br-tenant use_dhcp: false mtu: 9000 members: - type: linux_bond name: bond_tenant bonding_options: "mode=802.3ad updelay=1000 miimon=100" use_dhcp: false dns_servers: get_param: DnsServers members: - type: interface name: p1p1 primary: true - type: interface name: p1p2 - type: vlan device: bond_tenant vlan_id: {get_param: TenantNetworkVlanID} addresses: - ip_netmask: {get_param: TenantIpSubnet}
params: USDnetwork_config: network_config: - type: ovs_user_bridge name: br-ex use_dhcp: false members: - type: ovs_dpdk_bond name: dpdkbond0 mtu: 2140 ovs_options: {get_param: BondInterfaceOvsOptions} #ovs_extra: #- set interface dpdk0 mtu_request=USDMTU #- set interface dpdk1 mtu_request=USDMTU rx_queue: get_param: NumDpdkInterfaceRxQueues members: - type: ovs_dpdk_port name: dpdk0 mtu: 2140 members: - type: interface name: p1p1 - type: ovs_dpdk_port name: dpdk1 mtu: 2140 members: - type: interface name: p1p2
parameter_defaults: BondInterfaceOvsOptions: "bond_mode=balance-slb"
- type: linux_bond name: bond1 members: - type: interface name: nic2 - type: interface name: nic3 bonding_options: "mode=802.3ad lacp_rate=[fast|slow] updelay=1000 miimon=100"