Repository :
http://git.fedorahosted.org/cgit/docs/networking-guide.git
On branch : master
---------------------------------------------------------------
commit c3906a2dabccf8fdf2abdfd86f54b3e141cc2331
Author: Stephen Wadeley <swadeley(a)redhat.com>
Date: Fri Jul 25 08:43:50 2014 +0200
Major update to Team chapter
Thanks to fleitner, jtluka, and jpriko for their reviews.
---------------------------------------------------------------
en-US/Configure_Network_Teaming.xml | 288 +++++++++++++++++++----------------
1 files changed, 157 insertions(+), 131 deletions(-)
diff --git a/en-US/Configure_Network_Teaming.xml b/en-US/Configure_Network_Teaming.xml
index 75bad7c..1b6740e 100644
--- a/en-US/Configure_Network_Teaming.xml
+++ b/en-US/Configure_Network_Teaming.xml
@@ -9,7 +9,7 @@
<section id="sec-Understanding_Network_Teaming">
<title>Understanding Network Teaming</title>
<para>
- The combining or aggregating together of network links in order to provide a logical
link with higher throughput, or to provide redundancy, is known by many names such as
<quote>channel bonding</quote>, <quote>Ethernet bonding</quote>,
<quote>port trunking</quote>, <quote>channel teaming</quote>,
<quote>NIC teaming</quote>, <quote>link aggregation</quote>, and
so on. This concept as originally implemented in the Linux kernel is widely referred to as
<quote>bonding</quote>. The term Network Teaming has been chosen to refer to
this new implementation of the concept. The existing bonding driver is unaffected, Network
Teaming is offered as an alternative and does not replace bonding in
<application>Fedora</application>.
+ The combining or aggregating together of network links in order to provide a logical
link with higher throughput, or to provide redundancy, is known by many names such as
<quote>channel bonding</quote>, <quote>Ethernet bonding</quote>,
<quote>port trunking</quote>, <quote>channel teaming</quote>,
<quote>NIC teaming</quote>, <quote>link aggregation</quote>, and
so on. This concept as originally implemented in the Linux kernel is widely referred to as
<quote>bonding</quote>. The term Network Teaming has been chosen to refer to
this new implementation of the concept. The existing bonding driver is unaffected, Network
Teaming is offered as an alternative and does not replace bonding in Fedora.
</para>
<para>
Network Teaming, or Team, is designed to implement the concept in a different way by
providing a small kernel driver to implement the fast handling of packet flows, and
various user-space applications to do everything else in user space. The driver has an
<firstterm>Application Programming Interface</firstterm>
(<acronym>API</acronym>), referred to as <quote>Team Netlink
API</quote>, which implements Netlink communications. User-space applications can
use this API to communicate with the driver. A library, referred to as
<quote>lib</quote>, has been provided to do user space wrapping of Team
Netlink communications and RT Netlink messages. An application daemon, <systemitem
class="daemon">teamd</systemitem>, which uses Libteam lib is also
provided. One instance of <systemitem
class="daemon">teamd</systemitem> can control one instance of the Team
driver. The daemon implements the load-balancing and active-backup logic, such as
round-robin, by using additional code referre
d to as <quote>runners</quote>. By separating the code in this way, the
Network Teaming implementation presents an easily extensible and scalable solution for
load-balancing and redundancy requirements. For example, custom runners can be relatively
easily written to implement new logic via <systemitem
class="daemon">teamd</systemitem>, and even <systemitem
class="daemon">teamd</systemitem> is optional, users can write their
own application to use <application>libteam</application>.
@@ -74,6 +74,51 @@
</table>
</section>
+
+<section
id="sec-Team-Understanding_the_Default_Behavior_of_Master_and_Slave_Interfaces">
+<title>Understanding the Default Behavior of Master and Slave
Interfaces</title>
+<para>
+When controlling teamed port interfaces using the <systemitem
class="daemon">NetworkManager</systemitem> daemon, and especially when
fault finding, keep the following in mind:
+<orderedlist>
+ <listitem>
+ <para>
+ Starting the master interface does not automatically start the port interfaces.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Starting a port interface always starts the master interface.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Stopping the master interface also stops the port interfaces.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ A master without ports can start static <systemitem
class="protocol">IP</systemitem> connections.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ A master without ports waits for ports when starting <systemitem
class="protocol">DHCP</systemitem> connections.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ A master with a <systemitem class="protocol">DHCP</systemitem>
connection waiting for ports completes when a port with a carrier is added.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ A master with a <systemitem class="protocol">DHCP</systemitem>
connection waiting for ports continues waiting when a port without a carrier is added.
+ </para>
+ </listitem>
+</orderedlist>
+</para>
+</section>
+
<section
id="sec-Understanding_the_Network_Teaming_Daemon_and_the_Runners">
<title>Understanding the Network Teaming Daemon and the
"Runners"</title>
<para>
@@ -148,11 +193,11 @@ The Team daemon, <systemitem
class="daemon">teamd</systemitem>, uses <applicatio
<para>
To see some examples of the command format, issue the following command:
<screen>~]$ <command>bond2team --examples</command></screen>
- New files will be created in a directory whose name starts with <filename
class="directory">/tmp/bond2slave.XXXXXX</filename>, where XXXXXX is a
random string. After creating the new configuration files, move the old bonding files to a
backup folder and then move the new files to the <filename
class="directory">/etc/sysconfig/network-scripts/</filename> directory.
See the <filename>bond2team(1)</filename> man page for further details.
+ New files will be created in a directory whose name starts with <filename
class="directory">/tmp/bond2team.XXXXXX/</filename>, where XXXXXX is a
random string. After creating the new configuration files, move the old bonding files to a
backup folder and then move the new files to the <filename
class="directory">/etc/sysconfig/network-scripts/</filename> directory.
See the <filename>bond2team(1)</filename> man page for further details.
</para>
</section>
-<section
id="sec-Selecting_Interfaces_to_Use_as_Port_for_a__Network_Team">
+<section
id="sec-Selecting_Interfaces_to_Use_as_Port_for_a_Network_Team">
<title>Selecting Interfaces to Use as Ports for a Network Team</title>
<para>
To view the available interfaces, issue the following command:
@@ -163,32 +208,41 @@ The Team daemon, <systemitem
class="daemon">teamd</systemitem>, uses <applicatio
link/ether 52:54:00:6a:02:8a brd ff:ff:ff:ff:ff:ff
3: em2: <BROADCAST,MULTICAST,UP,LOWER_UP > mtu 1500 qdisc pfifo_fast state
UP mode DEFAULT qlen 1000
link/ether 52:54:00:9b:6d:2a brd ff:ff:ff:ff:ff:ff</screen>
-From the available interfaces, determine which are suitable for adding to your network
team and then proceed to <xref linkend="sec-Configure_a_Network_Team"/>
+From the available interfaces, determine which are suitable for adding to your network
team and then proceed to <xref
linkend="sec-Selecting_Network_Team_Configuration_Methods"/>
</para>
+ <note>
+ <para>
+ The Team developers prefer the term <quote>port</quote> rather than
<quote>slave</quote>, however
<application>NetworkManager</application> uses the term
<quote>team-slave</quote> to refer to interfaces that make up a
team.</para>
+ </note>
</section>
-<section id="sec-Configure_a_Network_Team">
- <title>Configure a Network Team</title>
+<section id="sec-Selecting_Network_Team_Configuration_Methods">
+<title>Selecting Network Team Configuration Methods</title>
- <bridgehead id="bh-sec-Configure_a_Network_Team_Using_NM">Configure a
Network Team Using NetworkManager</bridgehead>
<para>
- To configure a network team using a graphical user interface, see <xref
linkend="sec-Creating_a_Network_Team_Using_a_GUI" />
+ <emphasis role="bold">To configure a network team using a graphical
user interface</emphasis>, see <xref
linkend="sec-Creating_a_Network_Team_Using_a_GUI" />
</para>
- <bridgehead
id="bh-sec-Configure_a_Network_Team_Using_the_CLI">Configure a Network Team
Using the Command Line Interface (CLI)</bridgehead>
+
<para>
- To create a network team using the command line, use <systemitem
class="daemon">teamd</systemitem> commands. To use this method, proceed
to <xref linkend="sec-Creating_a_Network_Team_Using_teamd"/>.
+ <emphasis role="bold">To create a network team using the Team
daemon</emphasis>, <systemitem
class="daemon">teamd</systemitem>, proceed to <xref
linkend="sec-Creating_a_Network_Team_Using_teamd"/>.
</para>
+
<para>
- To create a network team using configuration files, proceed to <xref
linkend="sec-Creating_a_Network_Team_Using_ifcfg_Files" />.
+ <emphasis role="bold">To create a network team using configuration
files</emphasis>, proceed to <xref
linkend="sec-Creating_a_Network_Team_Using_ifcfg_Files" />.
</para>
+ <para>
+ <emphasis role="bold">To create a network team using the command line
tool</emphasis>, <application>nmcli</application>, proceed to <xref
linkend="sec-Configure_Network_Teaming_Using_nmcli"/>.
+ </para>
+
+</section>
<section id="sec-Creating_a_Network_Team_Using_a_GUI">
<title>Creating a Network Team Using a GUI</title>
<section
id="sec-Establishing_a_Team_Connection">
<title>Establishing a Team Connection</title>
- <para>You can use the GNOME
<application>control-center</application> utility to direct
<application>NetworkManager</application> to create a team from two or more
Wired or InfiniBand connections. It is not necessary to create the connections to be
teamded first. They can be configured as part of the process to configure the team. You
must have the MAC addresses of the interfaces available in order to complete the
configuration process.</para>
+ <para>You can use the GNOME
<application>control-center</application> utility to direct
<application>NetworkManager</application> to create a team from two or more
Wired or InfiniBand connections. It is not necessary to create the connections to be
teamed first. They can be configured as part of the process to configure the team. You
must have the MAC addresses of the interfaces available in order to complete the
configuration process.</para>
<procedure
id="procedure-Adding_a_New_Team_Connection">
@@ -203,10 +257,10 @@ From the available interfaces, determine which are suitable for
adding to your n
<para>Click the plus symbol to open the selection list. Select
<guilabel>Team</guilabel>. The <guilabel>Editing Team Connection
<replaceable>1</replaceable></guilabel> window appears.</para>
</step>
<step>
- <para>On the <guilabel>Team</guilabel> tab, click
<guibutton>Add</guibutton> and select the type of interface you want to use
with the team connection. Click the <guibutton>Create</guibutton> button. Note
that the dialog to select the slave type only comes up when you create the first slave;
after that, it will automatically use that same type for all further slaves.</para>
+ <para>On the <guilabel>Team</guilabel> tab, click
<guibutton>Add</guibutton> and select the type of interface you want to use
with the team connection. Click the <guibutton>Create</guibutton> button. Note
that the dialog to select the port type only comes up when you create the first port;
after that, it will automatically use that same type for all further ports.</para>
</step>
<step>
- <para>The <guilabel>Editing team0 slave 1</guilabel> window
appears. Fill in the MAC address of the first interface to be bonded.</para>
+ <para>The <guilabel>Editing team0 port 1</guilabel> window
appears. Fill in the MAC address of the first interface to be added to the
team.</para>
</step>
<step>
<para>
@@ -219,12 +273,12 @@ From the available interfaces, determine which are suitable for
adding to your n
</para>
</step>
<step>
- <para>The name of the teamed slave appears in the <guilabel>Teamed
connections</guilabel> window. Click the <guibutton>Add</guibutton>
button to add further slave connections.</para>
+ <para>The name of the teamed port appears in the <guilabel>Teamed
connections</guilabel> window. Click the <guibutton>Add</guibutton>
button to add further port connections.</para>
</step>
<step><para>Review and confirm the settings and then click the
<guilabel>Save</guilabel> button.</para>
</step>
<step>
- <para>Edit the team-specific settings by referring to <xref
linkend="bh-Configuring_the_Team_Tab"/> below.</para>
+ <para>Edit the team-specific settings by referring to <xref
linkend="sec-Configuring_the_Team_Tab"/> below.</para>
</step>
</procedure>
@@ -259,24 +313,24 @@ From the available interfaces, determine which are suitable for
adding to your n
</listitem>
<listitem>
<para>
- <guilabel>All users may connect to this network</guilabel> —
Select this box to create a connection available to all users on the system. Changing this
setting may require root privileges. See <xref
linkend="sec-System-wide_and_Private_Connection_Profiles"/> for details. To
prevent unexpected behavior during installation, ensure that this check box remains
selected for any network interface that you configure.
+ <guilabel>All users may connect to this network</guilabel> —
Select this box to create a connection available to all users on the system. Changing this
setting may require root privileges. See <xref
linkend="sec-System-wide_and_Private_Connection_Profiles"/> for details.
</para>
</listitem>
<listitem>
<para>
- <guilabel>Automatically connect to VPN when using this
connection</guilabel> — Select this box if you want
<application>NetworkManager</application> to auto-connect to a VPN connection
when it is available. Select the VPN from the dropdown menu.
+ <guilabel>Automatically connect to VPN when using this
connection</guilabel> — Select this box if you want
<application>NetworkManager</application> to auto-connect to a VPN connection
when it is available. Select the VPN from the drop-down menu.
</para>
</listitem>
<listitem>
<para>
- <guilabel>Firewall Zone</guilabel> — Select the firewall zone
from the dropdown menu.
+ <guilabel>Firewall Zone</guilabel> — Select the firewall zone
from the drop-down menu.
</para>
</listitem>
</itemizedlist>
</step>
<step>
- <para>Edit the team-specific settings by referring to <xref
linkend="bh-Configuring_the_Team_Tab"/> below.</para>
+ <para>Edit the team-specific settings by referring to <xref
linkend="sec-Configuring_the_Team_Tab"/> below.</para>
</step>
</procedure>
<bridgehead
@@ -300,60 +354,23 @@ From the available interfaces, determine which are suitable for
adding to your n
</listitem>
</itemizedlist>
- <bridgehead
- id="bh-Configuring_the_Team_Tab">Configuring the Team
Tab</bridgehead>
- <para>If you have already added a new team connection (refer to <xref
- linkend="procedure-Adding_a_New_Team_Connection"/> for
instructions), you can enter a custom JSON configuration string in the text box or import
a configuration file. Click <guilabel>Save</guilabel> to apply the JSON
configuration to the team interface.</para>
+<section id="sec-Configuring_the_Team_Tab">
+<title>Configuring the Team Tab</title>
+ <para>If you have already added a new team connection you can enter a custom
JSON configuration string in the text box or import a configuration file. Click
<guilabel>Save</guilabel> to apply the JSON configuration to the team
interface.</para>
<para>
For examples of JSON strings, see <xref
linkend="sec-Configure_teamd_Runners" />
</para>
+ <para>
+ See <xref linkend="procedure-Adding_a_New_Team_Connection"/>
for instructions on how to add a new team.
+ </para>
+ </section>
</section>
+ </section>
-<section
id="sec-Team-Understanding_the_Default_Behavior_of_Master_and_Slave_Interfaces">
-<title>Understanding the Default Behavior of Master and Slave
Interfaces</title>
-<para>
-When controlling teamed port interfaces using the <systemitem
class="daemon">NetworkManager</systemitem> daemon, and especially when
fault finding, keep the following in mind:
-<orderedlist>
- <listitem>
- <para>
- Starting the master interface does not automatically start the port interfaces.
- </para>
- </listitem>
- <listitem>
- <para>
- Starting a port interface always starts the master interface.
- </para>
- </listitem>
- <listitem>
- <para>
- Stopping the master interface also stops the port interfaces.
- </para>
- </listitem>
- <listitem>
- <para>
- A master without ports can start static <systemitem
class="protocol">IP</systemitem> connections.
- </para>
- </listitem>
- <listitem>
- <para>
- A master without ports waits for ports when starting <systemitem
class="protocol">DHCP</systemitem> connections.
- </para>
- </listitem>
- <listitem>
- <para>
- A master with a <systemitem class="protocol">DHCP</systemitem>
connection waiting for ports completes when a port with a carrier is added.
- </para>
- </listitem>
- <listitem>
- <para>
- A master with a <systemitem class="protocol">DHCP</systemitem>
connection waiting for ports continues waiting when a port without a carrier is added.
- </para>
- </listitem>
-</orderedlist>
-</para>
-</section>
-</section>
+
+<section id="sec-Configure_a_Network_Team_Using-the_Command_Line">
+ <title>Configure a Network Team Using the Command Line</title>
<section id="sec-Creating_a_Network_Team_Using_teamd">
@@ -373,21 +390,21 @@ activebackup_ethtool_3.conf loadbalance_1.conf
roundrobin.conf</sc
"runner": {"name": "activebackup"},
"link_watch": {"name": "ethtool"},
"ports": {
- "em1": {
+ "eth1": {
"prio": -10,
"sticky": true
},
- "em2": {
+ "eth2": {
"prio": 100
}
}
}</screen>
- Create a working directory to store <systemitem
class="daemon">teamd</systemitem> configuration files. For example, as
normal user, enter a command with the following format:
- <screen>~]$ <command>mkdir
~/teamd_working_configs</command></screen>
+ Create a working configurations directory to store <systemitem
class="daemon">teamd</systemitem> configuration files. For example, as
normal user, enter a command with the following format:
+ <screen>~]$ <command>mkdir
~/<replaceable>teamd_working_configs</replaceable></command></screen>
Copy the file you have chosen to your working directory and edit it as necessary. As an
example, you could use a command with the following format:
- <screen>~]$ <command>cp
/usr/share/doc/teamd-*/example_configs/activebackup_ethtool_1.conf
~/teamd_working_configs/activebackup_ethtool_1.conf</command></screen>
+ <screen>~]$ <command>cp
/usr/share/doc/teamd-*/example_configs/activebackup_ethtool_1.conf \
~/<replaceable>teamd_working_configs</replaceable>/activebackup_ethtool_1.conf</command></screen>
To edit the file to suit your environment, for example to change the interfaces to be
used as ports for the network team, open the file for editing as follows:
- <screen>~]$ <command>vi
~/teamd_working_configs/activebackup_ethtool_1.conf</command></screen>
+ <screen>~]$ <command>vi
~/<replaceable>teamd_working_configs</replaceable>/activebackup_ethtool_1.conf</command></screen>
Make any necessary changes and save the file. See the
<filename>vi(1)</filename> man page for help on using the
<application>vi</application> editor or use your preferred editor.
</para>
<para>
@@ -395,19 +412,21 @@ activebackup_ethtool_3.conf loadbalance_1.conf
roundrobin.conf</sc
<screen>~]$ <command>ip link show</command>
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode
DEFAULT
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
-2: ens6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state
UP mode DEFAULT qlen 1000
+2: em1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state
UP mode DEFAULT qlen 1000
link/ether 52:54:00:d5:f7:d4 brd ff:ff:ff:ff:ff:ff
-3: ens7: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state
UP mode DEFAULT qlen 1000
+3: em2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state
UP mode DEFAULT qlen 1000
link/ether 52:54:00:d8:04:70 brd ff:ff:ff:ff:ff:ff</screen>
In this example we see that both the interfaces we plan to use are
<quote>UP</quote>.
</para>
<para>
To take down an interface, issue a command as <systemitem
class="username">root</systemitem> in the following format:
- <screen>~]# <command>ip link set down ens6</command></screen>
+ <screen>~]# <command>ip link set down em1</command></screen>
Repeat for each interface as necessary.
</para>
<para>
- To create a team interface based on the configuration file, as <systemitem
class="username">root</systemitem> user, change to the <filename
class="directory">teamd_working_configs</filename> directory and then
issue a command in the following format:
+ To create a team interface based on the configuration file, as <systemitem
class="username">root</systemitem> user, change to the working
configurations directory (<replaceable>teamd_working_configs</replaceable> in
this example):
+ <screen>~]# <command>cd
/home/<replaceable>user</replaceable><replaceable>teamd_working_configs</replaceable></command></screen>
+ Then issue a command in the following format:
<screen>~]# <command>teamd -g -f activebackup_ethtool_1.conf
-d</command>
Using team device "team0".
Using PID file "/var/run/teamd/team0.pid"
@@ -483,26 +502,24 @@ runner:
<title>Creating a Network Team Using ifcfg Files</title>
<para>
To create a networking team using <literal>ifcfg</literal> files, create
a file in the <filename
class="directory">/etc/sysconfig/network-scripts/</filename> directory
as follows:
- <screen>DEVICE="team0"
-DEVICETYPE="Team"
-ONBOOT="yes"
-BOOTPROTO="static"
-IPADDR="192.168.11.1"
-NETMASK="255.255.255.0"
-TEAM_CONFIG='{"runner": {"name": "activebackup"},
"link_watch": {"name": "ethtool"}}'
-NM_CONTROLLED="no"</screen>
+ <screen>DEVICE=team0
+DEVICETYPE=Team
+ONBOOT=yes
+BOOTPROTO=static
+IPADDR=192.168.11.1
+NETMASK=255.255.255.0
+TEAM_CONFIG='{"runner": {"name": "activebackup"},
"link_watch": {"name": "ethtool"}}'</screen>
This creates the interface to the team, in other words, this is the master.
</para>
<para>
- To create a slave to be a member of <interface>team0</interface>, create
one or more files in the <filename
class="directory">/etc/sysconfig/network-scripts/</filename> directory
as follows:
- <screen>DEVICE="eth1"
-HWADDR="D4:85:64:01:46:9E"
-DEVICETYPE="TeamPort"
-ONBOOT="yes"
-TEAM_MASTER="team0"
-TEAM_PORT_CONFIG='{"prio": 100}'
-NM_CONTROLLED="no"</screen>
-Add additional slave interfaces similar to the above as required, changing the DEVICE and
HWADDR field to match the ports (the network devices) being enslaved. If port priority is
not specified by <literal>prio</literal> it defaults to
<literal>0</literal>; it accepts negative and positive values in the range
<literal>-32,767</literal> to <literal>+32,767</literal>.
+ To create a port to be a member of <interface>team0</interface>, create one
or more files in the <filename
class="directory">/etc/sysconfig/network-scripts/</filename> directory
as follows:
+ <screen>DEVICE=eth1
+HWADDR=D4:85:64:01:46:9E
+DEVICETYPE=TeamPort
+ONBOOT=yes
+TEAM_MASTER=team0
+TEAM_PORT_CONFIG='{"prio": 100}'</screen>
+Add additional port interfaces similar to the above as required, changing the DEVICE and
HWADDR field to match the ports (the network devices) being added. If port priority is not
specified by <literal>prio</literal> it defaults to
<literal>0</literal>; it accepts negative and positive values in the range
<literal>-32,767</literal> to <literal>+32,767</literal>.
</para>
<para>
Specifying the hardware or MAC address using the
<command>HWADDR</command> directive will influence the device naming
procedure. This is explained in <xref
linkend="ch-Consistent_Network_Device_Naming" />.
@@ -578,15 +595,15 @@ em1: up 100 fullduplex</screen>
<title>Setting the Active Port Options of a Team Using teamnl</title>
<para>
To set the <option>activeport</option> option in a network team, using
the <application>teamnl</application> utility, issue the following command as
<systemitem class="username">root</systemitem>:
- <screen>~]# <command>teamnl team0 setoption activeport 5</command>
-~]# <command>teamnl team0 getoption activeport</command>
+ <screen>~]# <command>teamnl team0 setoption activeport
5</command></screen>
+To check the change in team port options, issue the following command as <systemitem
class="username">root</systemitem>:
+<screen>~]# <command>teamnl team0 getoption activeport</command>
5</screen>
</para>
</section>
</section>
-
<section id="sec-Controlling_teamd_with_teamdctl">
<title>Controlling teamd with teamdctl</title>
@@ -594,25 +611,25 @@ em1: up 100 fullduplex</screen>
In order to query a running instance of <systemitem
class="daemon">teamd</systemitem> for statistics or configuration
information, or to make changes, the control tool
<application>teamdctl</application> is used.
</para>
<para>
-To view the current team state of a team <interface>team0</interface>, enter
the following command:
- <screen>~]$ <command>teamdctl team0 state
view</command></screen>
+To view the current team state of a team <interface>team0</interface>, enter
the following command as <systemitem
class="username">root</systemitem>:
+ <screen>~]# <command>teamdctl team0 state
view</command></screen>
For a more verbose output:
- <screen>~]$ <command>teamdctl team0 state view
-v</command></screen>
+ <screen>~]# <command>teamdctl team0 state view
-v</command></screen>
</para>
<para>
For a complete state dump in JSON format (useful for machine processing) of
<interface>team0</interface>, use the following command:
- <screen>~]$ <command>teamdctl team0 state
dump</command></screen>
+ <screen>~]# <command>teamdctl team0 state
dump</command></screen>
</para>
<para>
For a configuration dump in JSON format of <interface>team0</interface>, use
the following command:
- <screen>~]$ <command>teamdctl team0 config
dump</command></screen>
+ <screen>~]# <command>teamdctl team0 config
dump</command></screen>
</para>
<para>
To view the configuration of a port <interface>em1</interface>, that is part
of a team <interface>team0</interface>, enter the following command:
- <screen>~]$ <command>teamdctl team0 port config dump
em1</command></screen>
+ <screen>~]# <command>teamdctl team0 port config dump
em1</command></screen>
</para>
<section id="sec-Add_a_port_to_a_Network_Team">
@@ -638,10 +655,12 @@ To view the configuration of a port
<interface>em1</interface>, that is part of
To apply a JSON format configuration to a port <interface>em1</interface>
in a network team <interface>team0</interface>, issue a command as
<systemitem class="username">root</systemitem> in the following
format:
<screen>~]# <command>teamdctl team0 port config update em1
<replaceable>JSON-config-string</replaceable></command></screen>
Where <replaceable>JSON-config-string</replaceable> is the configuration
as a string of text in JSON format. This will update the configuration of the port using
the JSON format string supplied. An example of a valid JSON string for configuring a port
would be the following:
- <screen>{
+ <screen>
+{
"prio": -10,
"sticky": true
}</screen>
+Use single quotes around the JSON configuration string and omit the line breaks.
</para>
<para>
Note that the old configuration will be overwritten and that any options omitted will
be reset to the default values. See the <filename>teamdctl(8)</filename> man
page for more team daemon control tool command examples.</para>
@@ -659,6 +678,9 @@ To view the configuration of a port
<interface>em1</interface>, that is part of
<section id="sec-Configure_teamd_Runners">
<title>Configure teamd Runners</title>
+ <para>
+ Runners are units of code which are compiled into the Team daemon when an instance of
the daemon is created. For an introduction to the <systemitem
class="daemon">teamd</systemitem> runners, see <xref
linkend="sec-Understanding_the_Network_Teaming_Daemon_and_the_Runners" />.
+ </para>
<section id="sec-Configure_the_broadcast_Runner">
<title>Configure the broadcast Runner</title>
@@ -679,7 +701,7 @@ Please see the <filename>teamd.conf(5)</filename> man page
for more information.
<section id="sec-Configure_the_random_Runner">
<title>Configure the random Runner</title>
<para>
- The random runner behaves similarly to the roundrobin runner, but it does not do
percentage calculations and therefore uses less system resources.
+ The random runner behaves similarly to the roundrobin runner.
</para>
<para>
To configure the random runner, using an editor as <systemitem
class="username">root</systemitem>, add the following to the team JSON
format configuration file:
@@ -848,7 +870,7 @@ Please see the <filename>teamd.conf(5)</filename> man page
for more information.
"link_watch": {"name": "ethtool"},
"ports": {"em1": {}, "em2": {}}
}</screen>
- Configuration for connection to a <firstterm>link access control
protocol</firstterm> (<acronym>LACP</acronym>) capable counterpart. The
LACP runner should use <application>ethtool</application> to monitor the
status of a link. It does not make sense to use any other link monitoring method besides
the <application>ethtool</application> because, for example in the case of
<application>arp_ping</application>, the link would never come up. The reason
is that the link has to be established first and only after that can packets, ARP
included, go through. Using <application>ethtool</application> prevents this
because it monitors each link layer individually.</para>
+ Configuration for connection to a <firstterm>link aggregation control
protocol</firstterm> (<acronym>LACP</acronym>) capable counterpart. The
LACP runner should use <application>ethtool</application> to monitor the
status of a link. It does not make sense to use any other link monitoring method besides
the <application>ethtool</application> because, for example in the case of
<application>arp_ping</application>, the link would never come up. The reason
is that the link has to be established first and only after that can packets, ARP
included, go through. Using <application>ethtool</application> prevents this
because it monitors each link layer individually.</para>
<para>
Active load balancing is possible with this runner in the same way as it is done
for the loadbalance runner. To enable active transmit (Tx) load balancing, add the
following section:
<screen>"tx_balancer": {
@@ -916,9 +938,8 @@ Please see the <filename>teamd.conf(5)</filename> man page
for more information.
This configuration uses <application>arp_ping</application> as the link
watcher. The <option>missed_max</option> option is a limit value of the
maximum allowed number of missed replies (ARP replies for example). It should be chosen in
conjunction with the <option>interval</option> option in order to determine
the total time before a link is reported as down.
</para>
<para>
- To load a new configuration for a team port <interface>em2</interface>,
with JSON configuration string <replaceable>JSON-config-string</replaceable>,
issue the following command as <systemitem
class="username">root</systemitem>:
- <screen>
-~]# port config update em2
<replaceable>JSON-config-string</replaceable></screen>
+ To load a new configuration for a team port <interface>em2</interface>,
from a file containing a JSON configuration, issue the following command as <systemitem
class="username">root</systemitem>:
+ <screen>~]# port config update em2
<replaceable>JSON-config-file</replaceable></screen>
Note that the old configuration will be overwritten and that any options omitted will be
reset to the default values. See the <filename>teamdctl(8)</filename> man page
for more team daemon control tool command examples.
</para>
</section>
@@ -967,13 +988,13 @@ Please see the <filename>teamd.conf(5)</filename> man
page for more information.
</para>
<para>
- To configure the host name from which to derive the <systemitem
class="protocol">IPv6</systemitem> address target address for the NS/NA
packets, add or edit a section as follows:
+ To configure the host name that is resolved to the <systemitem
class="protocol">IPv6</systemitem> address target address for the NS/NA
packets, add or edit a section as follows:
<screen>
"link_watch": {
"name": "nsna_ping",
"target_host": "MyStorage"
}</screen>
- Host name to be converted to an <systemitem
class="protocol">IPv6</systemitem> address which will be used as the
target address for the NS/NA packets. An <systemitem
class="protocol">IPv6</systemitem> address can be used in place of a
host name.
+The <quote>target_host</quote> option contains the host name to be converted
to an <systemitem class="protocol">IPv6</systemitem> address which
will be used as the target address for the NS/NA packets. An <systemitem
class="protocol">IPv6</systemitem> address can be used in place of a
host name.
</para>
<para>
Please see the <filename>teamd.conf(5)</filename> man page for more
information.
@@ -985,7 +1006,7 @@ Please see the <filename>teamd.conf(5)</filename> man
page for more information.
<section id="sec-Configure_Port_Selection_Override">
<title>Configure Port Selection Override</title>
<para>
-The physical port which transmits a frame is normally selected by the kernel part of the
team driver, and is not relevant to the user or system administrator. The output port is
selected using the policies of the selected team mode (<systemitem
class="daemon">teamd</systemitem> runner). On occasion however, it is
helpful to direct certain classes of outgoing traffic to certain physical interfaces to
implement slightly more complex policies. By default the team driver is multiqueue aware
and 16 queues are created when the driver initializes (see
<filename>/usr/share/doc/kernel-doc-<replaceable>version</replaceable>/Documentation/networking/multiqueue.txt</filename>
for details). If more or less queues are desired, the Netlink attribute
<command>tx_queues</command> can be used to change this value during the team
driver instance creation.
+The physical port which transmits a frame is normally selected by the kernel part of the
team driver, and is not relevant to the user or system administrator. The output port is
selected using the policies of the selected team mode (<systemitem
class="daemon">teamd</systemitem> runner). On occasion however, it is
helpful to direct certain classes of outgoing traffic to certain physical interfaces to
implement slightly more complex policies. By default the team driver is multiqueue aware
and 16 queues are created when the driver initializes (see
<filename>/usr/share/doc/kernel-doc/Documentation/networking/multiqueue.txt</filename>
for details). If more or less queues are desired, the Netlink attribute
<command>tx_queues</command> can be used to change this value during the team
driver instance creation.
</para>
<para>
The queue ID for a port can be set by the port configuration option
<option>queue_id</option> as follows:
@@ -993,7 +1014,7 @@ The queue ID for a port can be set by the port configuration option
<option>queu
{
"queue_id": 3
}</screen>
-These queue ID's can be used in conjunction with the
<application>tc</application> utility to configure a multiqueue queue
discipline and filters to bias certain traffic to be transmitted on certain slave devices.
For example, if using the above configuration and wanting to force all traffic bound to
<systemitem class="ipaddress">192.168.1.100</systemitem> to use
<interface>eth1</interface> in the team as its output device, issue commands
as <systemitem class="username">root</systemitem> in the following
format:
+These queue ID's can be used in conjunction with the
<application>tc</application> utility to configure a multiqueue queue
discipline and filters to bias certain traffic to be transmitted on certain port devices.
For example, if using the above configuration and wanting to force all traffic bound to
<systemitem class="ipaddress">192.168.1.100</systemitem> to use
<interface>eth1</interface> in the team as its output device, issue commands
as <systemitem class="username">root</systemitem> in the following
format:
<screen>~]# <command>tc qdisc add dev team0 handle 1 root
multiq</command>
~]# <command>tc filter add dev team0 protocol ip parent 1: prio 1 u32 match ip dst
\</command>
<command> 192.168.1.100 action skbedit queue_mapping
3</command></screen>
@@ -1002,9 +1023,9 @@ This mechanism of overriding runner selection logic in order to bind
traffic to
</section>
<section
id="sec-Configure_BPF-based_Tx_Port_Selectors_for_Hash_Computation_Algorithm">
- <title>Configure BPF-based Tx Port Selectors for Hash Computation
Algorithm</title>
+ <title>Configure BPF-based Tx Port Selectors</title>
<para>
- The loadbalance and LACP runners uses hashes of packets to sort network traffic flow.
The hash computation mechanism is based on the <firstterm>Berkeley Packet
Filter</firstterm> (<acronym>BPF</acronym>) code. The BPF code is used
to generate a hash rather than make a policy decision for incoming packets. The hash
length is 8 bits giving 256 variants. This means many different <firstterm>socket
buffers</firstterm> (<acronym>SKB</acronym>) can have the same hash and
therefore pass traffic over the same link. The use of a short hash is a quick way to sort
traffic into different streams for the purposes of load balancing across multiple links.
In static mode, the hash is only used to decided out of which port the traffic should be
sent. In active mode, the runner will continually reassign hashes to different ports in an
attempt to reach a perfect balance.</para>
+ The loadbalance and LACP runners uses hashes of packets to sort network traffic flow.
The hash computation mechanism is based on the <firstterm>Berkeley Packet
Filter</firstterm> (<acronym>BPF</acronym>) code. The BPF code is used
to generate a hash rather than make a policy decision for outgoing packets. The hash
length is 8 bits giving 256 variants. This means many different <firstterm>socket
buffers</firstterm> (<acronym>SKB</acronym>) can have the same hash and
therefore pass traffic over the same link. The use of a short hash is a quick way to sort
traffic into different streams for the purposes of load balancing across multiple links.
In static mode, the hash is only used to decide out of which port the traffic should be
sent. In active mode, the runner will continually reassign hashes to different ports in an
attempt to reach a perfect balance.</para>
<para>
The following fragment types or strings can be used for packet Tx hash computation:
@@ -1085,37 +1106,42 @@ Connection 'Team0' (fcafb3f0-4c95-48df-9e28-7ac7213f38ba)
successfully added.</s
</para>
<para>
To view the team interfaces just configured, issue a command as follows:
- <screen>~$ <command>nmcli connection show</command>
+ <screen>~]$ <command>nmcli connection show</command>
NAME UUID TYPE TIMESTAMP-REAL
Team0 fcafb3f0-4c95-48df-9e28-7ac7213f38ba team never
team-ServerA 981eb129-1707-4a2e-a6ea-413330d96c10 team never</screen>
</para>
<para>
To load a team configuration file for a team that already exists, issue a command as
follows:
- <screen>~]$ <command>nmcli connection modify team-ServerA team.config
<replaceable>JSON-Config</replaceable></command></screen>
+ <screen>~]$ <command>nmcli connection modify team-ServerA team.config
<replaceable>JSON-config</replaceable></command></screen>
+ You can specify the team configuration either as JSON string or provide a file name
containing the configuration. The file name can include the path. In both cases, what is
stored in the <parameter>team.config</parameter> property is the JSON string.
In the case of a JSON string, use single quotes around the string and paste the entire
string to the command line.
+</para>
+<para>
+ To review the <parameter>team.config</parameter> property, enter a command
as follows:
+ <screen>~]$ <command>nmcli conn show team-ServerA | grep
team.config</command></screen>
</para>
<para>
- To add, or enslave, an interface to the team, with name
<interface>team-slave-ens3</interface>, issue a command as follows:
+ To add an interface to the team, with name
<interface>team-slave-ens3</interface>, issue a command as follows:
<screen>~]$ <command>nmcli connection add type team-slave ifname ens3
master Team0</command>
Connection 'team-slave-ens3' (a33d5d32-87d7-4dc4-8a27-5a44aabfa440) successfully
added.</screen>
Notice that the name was derived from the interface name by prepending the type.
Alternatively, specify a name with <option>con-name</option> as follows:
- <screen>~]$ <command>nmcli con add type team-slave con-name Team0-slave1
ifname ens3 master Team0</command>
-Connection 'Team0-slave1' (adbf21f2-51b6-492f-8fc8-48b831383ac9) successfully
added.
-~]$ <command>nmcli con add type team-slave con-name Team0-slave2 ifname ens7 master
Team0</command>
-Connection 'Team0-slave2' (e5317075-c0c1-472f-b25d-0433b0297ea3) successfully
added.</screen>
-At time of writing, <application>nmcli</application> only supports Ethernet
slaves.
+ <screen>~]$ <command>nmcli con add type team-slave con-name Team0-port1
ifname ens3 master Team0</command>
+Connection 'Team0-port1' (adbf21f2-51b6-492f-8fc8-48b831383ac9) successfully
added.
+~]$ <command>nmcli con add type team-slave con-name Team0-port2 ifname ens7 master
Team0</command>
+Connection 'Team0-port2' (e5317075-c0c1-472f-b25d-0433b0297ea3) successfully
added.</screen>
+At time of writing, <application>nmcli</application> only supports Ethernet
ports.
</para>
<para>
- In order to bring up a team, the slaves must be brought up first as follows:
- <screen>~]$ <command>nmcli connection up Team0-slave1</command>
+ In order to bring up a team, the ports must be brought up first as follows:
+ <screen>~]$ <command>nmcli connection up Team0-port1</command>
Connection successfully activated (D-Bus active path:
/org/freedesktop/NetworkManager/ActiveConnection/2)</screen>
-<screen>~]$ <command>nmcli connection up Team0-slave2</command>
+<screen>~]$ <command>nmcli connection up Team0-port2</command>
Connection successfully activated (D-Bus active path:
/org/freedesktop/NetworkManager/ActiveConnection/3)</screen>
</para>
<para>
-You can verify the team interface was brought up by the activation of the slaves, as
follows:
+You can verify the team interface was brought up by the activation of the ports, as
follows:
<screen>~]$ <command>ip link</command>
3: Team0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state
UP mode DEFAULT
link/ether 52:54:00:76:6f:f0 brd ff:ff:ff:ff:ff:f</screen>
@@ -1178,7 +1204,7 @@ Connection successfully activated (D-Bus active path:
/org/freedesktop/NetworkMa
class="directory">/usr/share/doc/kernel-doc-<replaceable><kernel_version></replaceable>/Documentation/</filename>
— This directory, which is provided by the <package>kernel-doc</package>
package, contains information on bonding which is also relevant to teaming. Before
accessing the kernel documentation, you must run the following command as <systemitem
class="username">root</systemitem>:</para>
<screen>~]# <command>yum install
kernel-doc</command></screen>
<para>
-
<filename>/usr/share/doc/kernel-doc-<replaceable>version</replaceable>/Documentation/networking/multiqueue.txt</filename>
— Describes kernel support for multiqueue devices.
+
<filename>/usr/share/doc/kernel-doc/Documentation/networking/multiqueue.txt</filename>
— Describes kernel support for multiqueue devices.
</para>
</listitem>
</itemizedlist>
@@ -1189,7 +1215,7 @@ Connection successfully activated (D-Bus active path:
/org/freedesktop/NetworkMa
<para>
<variablelist>
<varlistentry>
-<term><ulink url="www.libteam.org"/></term>
+<term><ulink url="http://www.libteam.org"/></term>
<listitem>
<para>
The upstream project.
@@ -1198,7 +1224,7 @@ Connection successfully activated (D-Bus active path:
/org/freedesktop/NetworkMa
</varlistentry>
<varlistentry>
-<term><ulink
url="www.w3schools.com/json/json_syntax.asp"/></term>
+<term><ulink
url="http://www.w3schools.com/json/json_syntax.asp"/></te...
<listitem>
<para>
An explanation of JSON syntax.