web-dev-qa-db-ja.com

LACPで同じアグリゲーターIDを取得していないボンドスレーブインターフェイス

LACP(802.3ad)が機能しない一部のサーバーにバグがあります。すべてのサーバーに、2つのethスレーブを備えたボンディングデバイスbond0があり、各インターフェイスが異なるスイッチに接続されており、両方のスイッチがLACPで構成されています。

すべてが問題ないようですが、ネットワークエンジニアは、物理デバイスが稼働しているときに一部のMLAG(Arista LACP実装)が機能していないことを検出しました。

影響を受けるサーバーの/proc/net/bonding/bond0を調べたところ、各インターフェイスに異なるAggregator IDがあることがわかりました。通常のサーバーでは、Aggregator IDは同じです。

スイッチのポートをオフにしてからオンにすることで問題を再現できます。その後、物理リンクが稼働しているにもかかわらずMLAGがダウンしているのを確認できます。このバグはRHEL 6および7に存在します(ただし、すべてのサーバーが影響を受けるわけではありません)。

構成

#/etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
MACADDR=14:02:ec:44:e9:80
IPADDR=xxx.xxx.xxx.xxx
NETMASK=xxx.xxx.xxx.xxx
BONDING_OPTS="mode=802.3ad lacp_rate=slow xmit_hash_policy=layer3+4"
BOOTPROTO=none
ONBOOT=yes
USERCTL=no
NM_CONTROLLED=no
PEERDNS=no

# /etc/sysconfig/network-scripts/ifcfg-eno49 (same for other interface)
HWADDR=14:02:ec:44:e9:80
MASTER=bond0
SLAVE=yes
BOOTPROTO=none
ONBOOT=yes
USERCTL=no
NM_CONTROLLED=no
PEERDNS=no

サーバーにethインターフェースを設定してセットアップしますが、これは理想的ではありません。

LACPプロトコルを確認するために、

tcpdump -i eno49 -tt -vv -nnn ether Host 01:80:c2:00:00:02

1つのインターフェイスで30秒ごとにパケットを表示できますが、LACPセッションを確立しようとしていたので、もう1つでは1秒ごとにパケットが表示されます。

それをトラブルシューティングして修正する方法はありますか?

(申し訳ありませんが、ネットワークに正しい用語を使用しなかった場合、LACPにはあまり熟練していません)

ありがとう

いくつかのドキュメントといくつかのテストを掘り下げた後、サーバーがボンディングを使用しているとき、miimonモジュールのbondingパラメーターを使用してネットワークリンクを強制的に監視する必要があることがわかりました。

/proc/net/bonding/bond0を見ると、デバイスの1つがMIIステータスdownを持っているのがわかりました。実際には、リンクレベルで稼働しています。

https://access.redhat.com/articles/172483#Link_Monitoring_Modes は次のように述べています。

miimonまたはarp_intervalおよびarp_ip_targetパラメータのいずれかのリンク監視モードを指定することが重要です。リンク監視モードなしで結合を構成することは、結合ドライバーの有効な使用法ではありません

ifcfg-bond0ファイルでそれを報告するには、BONDING_OPTSオプションで渡します

#/etc/sysconfig/network-scripts/ifcfg-bond0
...
BONDING_OPTS="mode=802.3ad lacp_rate=slow xmit_hash_policy=layer3+4 miimon=100"
...

したがって、100msごとにリンクをポーリングする必要があります。

ネットワークサービスを再起動して、変更を適用します。