ネットワークリンクのグループ化について
ネットワークリンクをグループ化して冗長化する技術については、
- チャンネルボンディング
- イーサネットボンディング
- ポートトランキング
- チャンネルチーミング
- NIC チーミング
- リンクアグリゲーション
など様々な名前があるが、Red Hat Enterprise Linux 7 においては元々ボンディング機能があり、ネットワークチーミング(またはネットワークチームともいう)はその代替機能に位置づけられる。
ボンディングとネットワークチーミングの違いは以下の公式ページ参照。
https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/7/html/networking_guide/sec-comparison_of_network_teaming_to_bonding
ボンディング設定については以下記事を参照。
→【CentOS 8】ネットワークボンディング設定について
ネットワークチーミングの負荷分散またはバックアップの方式としては以下がある。
- broadcast
- データは全ポートから送信される
- round-robin(デフォルト)
- データは全ポートで順番に送信される
- active-backup
- 1 つのポートまたはリンクが使用され、他はバックアップとして維持される
- loadbalance
- アクティブ Tx 負荷分散と BPF ベースの Tx ポートセレクターを使用
- lacp
- 802.3ad リンクアグリゲーション制御プロトコルを実装
ネットワークチーミングデーモンのインストール
- ネットワークチーミングデーモンは
teamd
- デフォルトでは teamd はインストールされていない
- インストールコマンドは以下の通り
yum install teamd
ネットワークチーミング設定方法について
以下の設定方法がある。
- nmtui を使用する
- NetworkManager のテキストユーザーインターフェース
- nmcli を使用する
- NetworkManager のコマンドラインツール
- teamd を使用する
- ifcfg ファイルを使用する
- GUI を使用する
nmcli を使用したネットワークチーミングの設定
チームデバイスおよびコネクションの作成
チームデバイスおよびそのコネクションを作成するコマンドは以下。
nmcli con add type team ifname Interface-name
- コネクション名を指定しない場合
nmcli con add type team con-name Connection-name ifname Interface-name
- コネクション名を指定する場合
$ nmcli con add type team ifname ServerA
Connection 'team-ServerA' (b954c62f-5fdd-4339-97b0-40efac734c50) successfully added.
$ nmcli con add type team con-name Team0 ifname ServerB
Connection 'Team0' (5f7160a1-09f6-4204-8ff0-6d96a91218a7) successfully added.
チームデバイスおよびコネクション作成時は自動で以下のように設定される。
- connection.id = team-
Interface-name
(con-name を指定しない場合) - connection.autoconnect = yes
- ipv4.method = auto
- ONBOOT = yes
- BOOTPROTO = dhcp
/etc/sysconfig/network-scripts/ifcfg-team-Interface-name
が作成される
■作成したチームコネクションの表示
$ nmcli con show
NAME UUID TYPE DEVICE
team-ServerA b954c62f-5fdd-4339-97b0-40efac734c50 team ServerA
enp2s0 0e8185a1-f0fd-4802-99fb-bedbb31c689b 802-3-ethernet --
enp1s0 dfe1f57b-419d-4d1c-aaf5-245deab82487 802-3-ethernet --
Team0 5f7160a1-09f6-4204-8ff0-6d96a91218a7 team ServerB
チームデバイスの IP アドレスを設定
nmcli con modify Con-name ipv4.method manual ipv4.addresses x.x.x.x/prefix
nmcli con modify team0 ipv4.method manual ipv4.address 192.168.1.2/24
チームデバイスへの物理インターフェースの追加
事前準備として、チームデバイスに追加する物理インターフェースに対応するコネクションが存在する場合は、そのコネクションを削除しておく。
以下コマンドでチームデバイスへ物理インターフェースを追加する。
nmcli con add type team-slave con-name Connection-name ifname Interface-name master Parent-team
Connection-name
は追加するコネクションの名前を指定- 追加する物理インターフェースに対応するコネクションになる
Interface-name
は追加する物理インターフェースの名前Parent-team
は追加先のチームデバイスの名前- デバイス名でもコネクション名でもどちらでも良い
$ nmcli con add type team-slave con-name Team0-port1 ifname enp1s0 master Team0
Connection 'Team0-port1' (ccd87704-c866-459e-8fe7-01b06cf1cffc) successfully added.
$ nmcli con add type team-slave con-name Team0-port2 ifname enp2s0 master Team0
Connection 'Team0-port2' (a89ccff8-8202-411e-8ca6-2953b7db52dd) successfully added.
※ネットワークチーミングにおいて、チームデバイスのことをマスタ、そのメンバーである物理インターフェースのことをスレーブという
チームの有効化
チームを有効化させるにはスレーブ、マスタの順にコネクションを up させる。
$ nmcli con up Team0-port1
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/2)
$ nmcli con up Team0-port2
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/3)
$ nmcli con up Team0
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)
チームデバイスの状態確認
nmcli con
ip link
teamdctl team-device-name state
# teamdctl team0 state
setup:
runner: roundrobin
ports:
ens37
link watches:
link summary: up
instance[link_watch_0]:
name: ethtool
link: up
down count: 0
ens38
link watches:
link summary: up
instance[link_watch_0]:
name: ethtool
link: up
down count: 0
参考資料

第8章 ネットワークチーミングの設定 Red Hat Enterprise Linux 7 | Red Hat Customer Portal
Access Red Hat’s knowledge, guidance, and support through your subscription.

8.10. コマンドラインを使用したネットワークチームの設定 Red Hat Enterprise Linux 7 | Red Hat Customer Portal
Access Red Hat’s knowledge, guidance, and support through your subscription.

RHEL7 Teamingによる冗長化 - Qiita
RHEL7 Teamingによる冗長化TeamingBondingドライバーは、すべての機能がカーネルモジュールとして実装されており、機能拡張が困難。また、設定変更にはモジュールの再読み込み…
―――――――――――――