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

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

ネットワークリンクを結合させてより高いスループットの論理リンクや冗長性を提供する手段は、チャンネルボンディングイーサネットボンディングポートトランキングチャンネルチーミングNIC チーミングリンクアグリゲーション など多くの名前が付けられています。もともと Linux カーネルで実装されたこの概念は、広く ボンディング と呼ばれています。この概念の新規実装の呼び方として、ネットワークチーミングという用語が選択されました。ネットワークチーミングは Red Hat Enterprise Linux 7 で代わりとなるものして提供されており、既存のボンディングドライバーには影響がなく、ボンディングを置換するものではありません。
ネットワークチーミング、またはチーム、は、小型のカーネルドライバーを提供して迅速なパケットフロー処理を実装し、様々なユーザースペースのアプリケーションがユーザースペースでその他のタスクを実行するという異なる方法でこの概念を実装するように設計されています。このドライバーには Team Netlink API と呼ばれる アプリケーションプログラミングインターフェース (API) が備わっており、これが Netlink 通信を実行します。ユーザースペースのアプリケーションは、この API を使ってドライバーと通信できます。lib と呼ばれるライブラリーは、チーム Netlink 通信と RT Netlink メッセージのユーザースペースラッピングを行うために提供されています。アプリケーションデーモンの teamd も提供されており、これは Libteam lib を使用します。teamd の 1 つのインスタンスが チームドライバーの 1 つのインスタンスを制御できます。このデーモンは、ランナー と呼ばれる新たなコードを使用することで、ラウンドロビンなどの負荷分散やアクティブバックアップ論理を実装します。この方法でコードを分離することで、ネットワークチーミング実装は負荷分散および冗長性要件に対して容易に拡張可能およびスケーラブルなソリューションを提供します。teamdlibteam ライブラリーを使用するデーモンです。ユーザーは新たな teamd 論理を実装するカスタムランナーを書き込んだり、libteam ライブラリーを使用する独自のデーモンを書き込むこともできるので、teamd をデーモンとして使用することはオプションになります。
D-bus を使用して実行中の teamd インスタンスを制御するツールは、teamdctl が提供します。これは、teamd D-Bus API を囲む D-Bus ラッパーを提供します。デフォルトでは、teamd は Unix Domain Sockets を使用してリッスン、通信しますが、D-Bus の監視も継続します。これは、D-Bus が存在しない、またはまだ読み込まれていない環境でも teamd を使用可能とするためです。たとえば、teamd リンクで起動する際には、D-Bus はまだ読み込まれていません。ランタイム時に teamdctl ツールを使うと、設定およびリンク監視の状態を読み取ることやポートの状態の確認および変更、ポートの追加および削除、ポートをアクティブおよびバックアップ状態に変更することができます。
チーム Netlink API は、Netlink メッセージを使ってユーザースペースのアプリケーションと通信します。ユーザースペースのライブラリーである libteam はこの API と直接対話しませんが、libnl または teamnl を使ってドライバー API と対話します。
要約すると、カーネルで実行中のチームドライバーのインスタンスは、直接設定、制御されることはありません。設定はすべて、teamd アプリケーションのようなユーザースペースのアプリケーションを使って行われます。アプリケーションはその後、カーネルドライバーのパートに適切に指示します。