NICのTeaming設定(RHEL)

想定構成

以下構成で10GbpsのNICを2本束ねる。

参考URL  nmcli を使用したネットワークチーミングの設定

  1. チーミングインタフェースを作成
  2. 物理IFをチーミングに所属
  3. チーミングIFを有効化

teamingを設定する方法にはいくつかあるが,ここでは公式ドキュメント最初に出てくるnmcliを利用して設定する。なお,teamdは永続性がないためnmcliやifcfgファイルで設定する方がよさそう。

想定する設定は,

  1. interfaceは「enp1s0f0」「enp1s0f1」の2つを利用。
  2. LACP利用
  3. 送信負荷分散のハッシュ値にmac address(scx/dst), ip address(src/dst), tcp port(src/dst) の3つを含める。

Teamingインタフェース作成

nmcliコマンドでTeamingの論理インタフェースを作成する。

# nmcli connection add type team ifname team0 con-name team0 config '{"device": "team0", "runner": {"name": "lacp", "active": true, "fast_rate": true, "tx_hash":  ["eth", "ipv4", "ipv6", "l4"]}, "link_watch": {"name": "ethtool"}}'
接続 'team0' (380df2de-dcef-4436-aded-9c4ab20e13e6) が正常に追加されました。

team0に所属させるインタフェースを設定する。オプションで「con-name」をつけると別名でインタフェースを定義できるが指定しないと「team-slave-enp1s0f0」のようになる。

# nmcli con add type team-slave ifname enp1s0f0 master team0
# nmcli con add type team-slave ifname enp1s0f1 master team0

IFの有効化

物理IF,TeamingIFのどちらを有効にしてもよい。

# nmcli con up team-slave-enp1s0f0
接続が正常にアクティベートされました (D-Bus アクティブパス: /org/freedesktop/NetworkManager/ActiveConnection/22)
# nmcli con up team-slave-enp1s0f1
接続が正常にアクティベートされました (D-Bus アクティブパス: /org/freedesktop/NetworkManager/ActiveConnection/25)

# nmclie con up team0
# ip link
18: team0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default qlen 1000
    link/ether 00:1b:21:6e:82:1d brd ff:ff:ff:ff:ff:ff

IPアドレスが設定されないとUPにならないが,後々内部ブリッジに接続させる予定なので今回はここまで。

MikroTik CRS309を手に入れた

欲しかった10Gのスイッチを米アマ経由で調達した。
環境準備や設定・スループット測定などいろいろと手間取ったのでメモ。
購入したのMikroTik CRS309。米アマで購入当時およそ$270。輸送費やもろもろ税がかかって日本円で3.3万円程度で本体を手に入れた。
こちらは日本アマゾン

ざっと所感

– それなりにお金がかかる

・10GのSFPが必要なので,本体以外にもケーブル/デバイス側の10G NICといった費用も考えて調達しないとキツイ。なお,SFP+は(こちらも米アマで購入)SFP+とDACで大体4万円くらいかかった。
1なので,トータルで7.3万円で10GのL3SWを手に入れたことになる。

– 仕様はよくチェックしよう

公式のガイドラインで「10Gbase-TのときはRJ45モジュールが熱くなるから1ポート間隔あけて搭載することが推奨」あった。想定外だった。確かに触っていると火傷するほどアッツイ。よく調べよう。(以下,ガイドライン抜粋)
Even when using devices that come with separated SFP+ cages, for example CRS309-1G-8S+, it is still not recommended to deploy the S+RJ10 transceivers beside each other. Use S+RJ10 in every second interface to avoid transceivers overheating which may cause unpredictable behavior.

– CLIが独特

show run のような現状のConfigを確認するコマンドが無いので,CLIとWebUIを組み合わせて操作することになると思う。

– 設定も独特

bridgeやらswitchやらinterfaceやらと設定のセクション分けが困惑する。丸1日2日触っているとだいぶ慣れてくるけど,IOSやJunosのような感覚でいると訳分からなくなる。

スループット測定

– snake test

snake test
snake test イメージ
10Gに対応しているPCを2台準備できなかったので,CentOS8にDual portの10Gを積んで,network namespaceで分離しiperf3で測定した。

– 測定準備

予めNIC側のMTUを9000に設定する。
nmcli connection show でデバイスのUUIDを確認。
9000へ変更。
nmcli con mod UUID1 802-3.mtu 9000
nmcli con mod UUID2 802-3.mtu 9000
systemctl restart NetworkManager
Namespace作成
sudo ip netns add NIC1
sudo ip netns add NIC2
そえぞれのNICをNamespaceへ割り当てる。
sudo ip link set enp1s0f0 netns NIC1 up
sudo ip link set enp1s0f1 netns NIC2 up
IP設定
sudo ip netns exec NIC1 bash
ip addr add 10.10.10.1/30 dev enp1s0f0
sudo ip netns exec NIC2 bash
ip addr add 10.10.10.2/30 dev enp1s0f1
CSR309のL2MTUはMAXで10218。
interface set l2mtu=10218 1

テスト結果

およそ10Gbpsでました。
実環境ではここまでではないだろうけれど,パーソナルユースなので細かいところまではテストしない。
なお,公式でスループットのテスト結果が公開されているのでこれで十分だと思う。
この後はCisco891Mとのリプレースをやる。