• このエントリーをはてなブックマークに追加

【centos7】teamingが切り替わらないトラブル

  • このエントリーをはてなブックマークに追加

nic
zaco muraです。
centos7で新しく使えるようになったteamingですが、郷に入っては郷に従えということで早速使ってみました。ところが、これが原因でトラブルとなってしまったので原因と対処法を書いておきます。
(なお、このやり方で解決しない場合や不具合が発生した場合でも責任はとれません。自己責任でお願いします。)

背景説明

centos7では、bondingの代わりにteamingが使えるようになりました。(bondingも使えますが)
私の扱うシステムでは、NICの冗長のためにactivebackupで運用しています。(片系のNIC/上位NW機器が故障してもサービス断にしないため)
ちなみにteamingについては、このへんがわかりやすいかと。

事象概要

activebackupで運用しているはずのteamingインターフェイスが切り替わらず、通信断が発生しました。それも、うまくいったりいかなかったりしてタイミングによって動作が変わります。

環境

OS : CentOS7.1.1503
HW : 物理サーバ
team : teamd-1.15-1.el7.x86_64
nmcli : 1.0.0-14.git20150121.b4ea599c.el7

事象詳細

以下のような構成のシステムで、サーバAからサーバBに通信しています。
2

今回はサーバBとL2Switchのケーブルを抜きました。期待していた動作は以下のように迂回して通信ができることでしたが、
3

実際には以下のように切り替わらず通信が途切れてしまいました。
4

切り分け

いろいろと切り分けていったところ、サーバAのNICでパケットキャプチャすると、うまくいく時にはケーブルを抜いた時にarpを受信し、うまくいかない時にはarpを受信しない、ということがわかりました。
どうやらサーバBはteamingが切り替わったことをarpを送信して伝えるようですが届く場合、届かない場合があるようです。

原因

さらに切り分けを進めてteamingインターフェイスとteamingに入れている(slaveに設定している)物理NICでキャプチャをすると、teamingインターフェイスからはarpが出ているけど、物理NICからはarpが出ていない場合があることがわかりました。
ということで、原因はteamingの切り替わり(の判断)が物理NICが実際に切り替わるタイミングよりも早く判断されるため、実際に切り替わる前にarpを投げてしまうことと考えました。

対処

結局、teamingの設定を変更することでとりあえずは解決しました。
元の設定は以下でした

# grep TEAM_CONFIG /etc/sysconfig/network-scripts/ifcfg-team0
TEAM_CONFIG="{\"runner\": {\"name\": \"activebackup\"}}"

変更後は以下のようになります。

# grep TEAM_CONFIG /etc/sysconfig/network-scripts/ifcfg-team0
TEAM_CONFIG="{\"device\":\"team0\",\"notify_peers\":{\"interval\":1000,\"count\":3},\"runner\":{\"name\":\"activebackup\"}}"

変更した内容としては、以下になります。
(解釈は私が英語を見て書いたものなので、合っていない可能性が高いですw)

device : デバイス名を明示的に指定(これは無くても動く?)
notify_peers.count : 切り替わったことを通知する(arpを投げる)回数
notify_peers.interval : 切り替わったことを通知する(arpを投げる)間隔

ちなみに、manページを見ると以下のようになっています。

# man teamd.conf
notify_peers.count (int)
Number of bursts of unsolicited NAs and gratuitous ARP packets sent after port is enabled or disabled.

Default: 0 (disabled)

Default for activebackup runner: 1

notify_peers.interval (int)
Value is positive number in milliseconds. Specifies an interval between bursts of notify-peer packets.

Default: 0

ただ、上のように設定しても投げるarpの回数は 3 にはならないので、正しく聞いているかはわかりません。ですが、とりあえず切り替わって数秒間はarpを投げ続けるので、確実に通知できています。

最後に

とりあえず確実に切り替わるようにはなりましたが、数秒間の断は発生してしまいます。私の扱うシステムではこれでも問題ないですが、bondingと同等に使うためにはまだチューニングが必要ですね。
それにしてもCentOS7はまだ文献も少なく、google先生に甘やかされてきた私としてはけっこう大変です。英語読めるようにならないとなぁ。。

ではでは。

スポンサーリンク
Sponsords Link
  • このエントリーをはてなブックマークに追加

ZacoDesign

スポンサーリンク
Sponsords Link