Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

第8章 ネットワークチーミングの設定

8.1. ネットワークチーミングについて

ネットワークリンクを結合させてより高いスループットの論理リンクや冗長性を提供する手段には、チャンネルボンディングイーサネットボンディングポートトランキングチャンネルチーミングNIC チーミング、または リンクアグリゲーション など多くの名前が付けられています。もともと Linux カーネルで実装されたこの概念は、広く ボンディング と呼ばれています。この概念の新しい実装の呼び方として、ネットワークチーミング という用語が選択されました。既存のボンディングドライバーは影響を受けません。ネットワークチーミングは Red Hat Enterprise Linux 7 のボンディングの代替メカニズムとして提供されるもので、これに置き換わるものではありません。
注記
モード 4 Link Aggregation Control Protocol (LACP) チーミングモードについては、リンクを集約するようにスイッチを設定する必要があります。詳細は https://www.kernel.org/doc/Documentation/networking/bonding.txt を参照してください。
ネットワークチーミング (またはチーム) は、高速でパケットフローを処理する小型のカーネルドライバーおよびその他すべてのユーザースペースタスクを実行する様々なユーザースペースのアプリケーションを提供するという、異なる方法でこの概念を実装するように設計されています。このドライバーには Team Netlink API と呼ばれる アプリケーションプログラミングインターフェイス (API) が備わっており、これが Netlink 通信を実装します。ユーザースペースのアプリケーションは、この API を使用してドライバーと通信できます。libと呼ばれるライブラリーは、Team Netlink 通信と RT Netlink メッセージのユーザースペースラッピングを行うために提供されています。libteam ライブラリーを使用するアプリケーションデーモンの teamd も利用可能です。teamd の 1 つのインスタンスが、チームドライバーの 1 つのインスタンスを制御できます。このデーモンは、ランナーと呼ばれる新たなコードを使用することで、ラウンドロビンなどの負荷分散やアクティブバックアップ論理を実装します。このようにコードを分離することで、ネットワークチーミングの実装は負荷分散および冗長性要件に対して容易に拡張可能およびスケーラブルなソリューションを提供します。たとえば、カスタムランナーを作成して teamd により新たな論理を実装するのも比較的簡単です。teamd の使用は必須ではないので、libteam を使用するために独自のアプリケーションを作成することさえ可能です。
teamdctl ユーティリティーは、D-bus を使用して teamd の実行中のインスタンスを制御するために使用できます。teamdctl は、teamd D-Bus API に関する D-Bus ラッパーを提供します。デフォルトでは、teamd D-Bus API を覆う D-Bus ラッパーを提供します。デフォルトでは、teamd は Unix Domain Sockets を使用してリッスン、通信しますが、D-Bus の監視も継続します。これは、D-Bus が存在しない、またはまだ読み込まれていない環境でも teamd を使用可能とするためです。ランタイム時に teamdctl ユーティリティーを使うと、設定およびリンク監視の状態を読み取ることや、ポートの状態の確認および変更、ポートの追加および削除、ポートをアクティブおよびバックアップ状態間で切り替えることができます。
Team Netlink API は、Netlink メッセージを使ってユーザースペースのアプリケーションと通信します。ユーザースペースのライブラリーである libteam はこの API と直接対話しませんが、libnl または teamnl を使ってドライバー API と対話します。
要約すると、カーネルで実行中のチームドライバーのインスタンスは、直接設定、制御されることはありません。設定はすべて、teamd アプリケーションのようなユーザースペースのアプリケーションを使って行われます。アプリケーションはその後、カーネルドライバーのパートに適切に指示します。
注記
ネットワークチーミングにおいては、ポート の代わりに スレーブ という用語が使われることもあります。直接 teamd を用いている場合には、ポート を使うのが一般的です。一方、NetworkManager を用いている時にチームを形成するインターフェイスを参照する場合には、スレーブ を使います。