CentOS7からbonding以外の選択肢としてのteam Driver使えるようになったので、そちらの調査をしてみました。
基本設定
基本設定内容
以下のような基本設定で行ってみます。
| 項目 | 設定値 |
|---|---|
| 接続プロファイル名 | team0-master |
| チーミングデバイス名 | team0 |
| スレーブデバイス | eth2,eth3 |
| IPアドレス | 192.168.133.46/24 |
| GW | 192.168.133.5 |
| DNS1 | 8.8.8.8 |
| DNS2 | 8.8.4.4 |
手順
まず、マスターデバイスとしてteam0を作成します。チーミングの対象のNICはこのマスターデバイスのスレーブとしてアサインされます。
# nmcli c add type team con-name team0-master ifname team0 \ ip4 192.168.133.46/24 \ gw4 192.168.133.5
必要に応じてDNSなどの設定も追加します。
# nmcli c modify team0-master ipv4.dns 8.8.8.8 +ipv4.dns 8.8.4.4
team0が作成されています。
# nmcli c
NAME UUID TYPE DEVICE
team0-master d93e67a8-07bf-4a4d-8bb5-af11cd205364 team team0
〜中略〜
ここに対象となるNICをスレーブとしてアサインしていきます。まず、接続プロファイルを生成します。
nmcli c add type team-slave con-name team0-eth2 ifname eth2 master team0 nmcli c add type team-slave con-name team0-eth3 ifname eth3 master team0
生成した接続プロファイルを有効化します。
nmcli c up team0-eth2 nmcli c up team0-eth3
teamdctlコマンドで今の状態が確認できます。アサインしたNICがUPになっているのが確認できればもう繋がるようになっていると思います。
また、設定内容を見ると、以下の項目が確認できると思います。こちらはTeamingの挙動を設定するパラメータになります。後述します。
- runner
- link watches
# teamdctl team0 state -v
setup:
runner: roundrobin
kernel team mode: roundrobin
D-BUS enabled: yes
ZeroMQ enabled: no
debug level: 0
daemonized: no
PID: 642
PID file: /var/run/teamd/team0.pid
ports:
eth2
ifindex: 4
addr: 08:00:27:dd:bc:14
ethtool link: 1000mbit/fullduplex/up
link watches:
link summary: up
instance[link_watch_0]:
name: ethtool
link: up
down count: 0
link up delay: 0
link down delay: 0
eth3
ifindex: 5
addr: 08:00:27:dd:bc:14
ethtool link: 1000mbit/fullduplex/up
link watches:
link summary: up
instance[link_watch_0]:
name: ethtool
link: up
down count: 0
link up delay: 0
link down delay: 0
Teaming動作設定
設定できる項目
runner
runnerは複数NIC間の負荷分散やバックアップ方法の設定値です。
| runner | 説明 |
|---|---|
| broadcast | データは全ポートで送信されます |
| round-robin | データは全ポートで順番に送信されます |
| active-backup | 1 つのポートまたはリンクが使用され、他はバックアップとして維持されます |
| loadbalance | アクティブ Tx 負荷分散と BPF ベースの Tx ポートセレクターを使用 |
| lacp | 802.3ad リンクアグリゲーション制御プロトコルを実装 |
link watches
名前のまま、リンクを確認するための方式です。
| link watches | 説明 |
|---|---|
| ethtool | Libteam lib は ethtool を使用してリンク状態の変更を監視。設定ファイルで他のリンク監視が指定されていなければ、これがデフォルトになります。 |
| arp_ping | arp_ping ユーティリティーは、ARP パケットを使用して先方のハードウェアアドレスの存在を監視します。 |
| nsna_ping | IPv6 近隣検索プロトコルからの近隣アドバタイズと近隣要請を使って近隣のインターフェイスの存在を監視します。 |
参考URL: 「ネットワークチーミングデーモンおよび「ランナー」について」
設定手順
基本はサンプルが用意されているので、そちらを修正して使います。サンプルの場所は以下のディレクトリになります。
runnerとlink watchsの組み合わせでサンプルが用意されています。
# cd /usr/share/doc/teamd-<version>/example_configs # ls -1 activebackup_arp_ping_1.conf activebackup_arp_ping_2.conf activebackup_ethtool_1.conf activebackup_ethtool_2.conf activebackup_ethtool_3.conf activebackup_multi_lw_1.conf activebackup_nsna_ping_1.conf activebackup_tipc.conf broadcast.conf lacp_1.conf loadbalance_1.conf loadbalance_2.conf loadbalance_3.conf random.conf roundrobin.conf roundrobin_2.conf
サンプルをコピー&修正して使います。
cd work/ cp /usr/share/doc/teamd-1.17/example_configs/activebackup_ethtool_1.conf myactivebackup.conf vi myactivebackup.conf
今回はeth2とeth3を使うので以下のように修正しました。 また、VirtualBoxの場合は以下のようにhwaddr_policyというパラメータの設定をしないとTeamingが上手く動きませんでした。
{ "device": "team0", "runner": {"name": "activebackup", "hwaddr_policy": "by_active"}, "link_watch": {"name": "ethtool"}, "ports": { "eth2": { "prio": 1 }, "eth3": { "prio": 10 } } }
設定を反映します。
nmcli connection modify team0-master team.config myactivebackup.conf nmcli connection up team0-master
これで後はhttpやPINGでアクセスしながらLANケーブル抜き差ししたりして、機能していることを確認します。
nmcli d dis eth2 nmcli d con eth2 teamdctl team0 state nmcli d dis eth3 nmcli d con eth3 teamdctl team0 state
参考URL
本家が詳しいです。
Bondingとの対比もあります。動き近いのでBondingの記事も理解に役立ちました。
VirtualBox環境でハマっていたのを助けてもらいました。