春望録

国破れて山河あり

Ubuntu 16.04 LTSでBondingをやってみた

中古の4ポートの1GbE NICがすごく安く流通しているのに気づいたので、自宅サーバ(兼NAS)用に入手してみた。 以下の製品が3,000円だった。

2ポートの10GbENICも5,000程度で買えるみたいけど、インターフェイスがSFP+ だし、対応スイッチはまだ高いし…ということで自重しておいた。(趣味マシンへの導入するなら、玄人志向の20,000弱する10GbE NICを新品で買うよりも良い気がする)

前提知識

Bondingのモードや負荷分散方式については、以下で確認した。

modeは4(802.3ad、LACP)で、ハッシュポリシーはxmit_hash_policy=2(layer2+3) を設定する。

設定

NICは差しただけでenp1s0f[0-3]として自動で認識された。 サーバ側の設定は以下を参考にした。

ほぼほぼリンクの通りでいけたのだが、以下の点だけ修正して対応した。

NICに出来るだけ均等に働いてもらいたいので ネットワークインターフェイスの設定で xmit-hash-policy layer2+3 と記載したのですが 上記cat /proc/net/bonding/bond0を見ると layer2となっていて思った通りの動作をしていません。

/etc/network/interfaces へのxmit-hash-policyの書き方がよろしくなかったようだ。 「他の行と違って、この行だけbondからはじまってないな~」くらいの気持ちで以下のように修正したら、期待通り、layer2+3で動作した。

(変更前)

auto bond0
iface bond0 inet static
address 192.168.1.10
gateway 192.168.1.5
netmask 255.255.255.0
dns-nameservers 192.168.1.5

bond-mode 802.3ad
bond-miimon 100
bond-lacp-rate 1
bond-slaves eno1 enp5s0f0 enp5s0f1
xmit-hash-policy layer2+3

(変更後)

auto bond0
(中略)
bond-xmit_hash_policy 2

スイッチにもLACPのイーサチャンネルを作成した。

結果

試しに他のマシンからパケットを送りつけてみると、4つのポートがランダムに光って楽しいことがわかった。 それ以外に、オンボードRealtek)のLANよりも少し高速化した気もするけど、Bondingのおかげというより、IntelNICだから(気持ち分だけ)速いんじゃないかと思う。

「マシンAで写真のバックアップをかけながら、マシンBでサーバから動画を持ってきて…」なんてときにはネットワークが原因で詰まってる感じがしていたので、そこらへんの改善が実感できたら嬉しい(ボトルネックがI/O等にシフトしているだけかもだけど)。

いずれにしても定量的に把握出来たら良いので、今度は複数台のマシンから高負荷をかけるような検証をしてみたい。

スイッチ側の設定とLinux側の設定の組み合わせについての理解が浅いので、そこらへんもう少し勉強しよう。