web-dev-qa-db-ja.com

カーネルレベルでLinux LACPの問題を診断するにはどうすればよいですか?

内部で何が行われているのかを判断するための、Linuxボンディングドライバーに対する基本的な管理または診断インターフェイスはありますか?

LinuxボックスとCiscoスイッチの間のリンク集約を長年使用してきました。 Linux側が単にCisco LACPパケットに応答しない新しいボックスをセットアップするとき、私は定期的に行き詰まりに遭遇します。サーバーごとに厳密な一連の指示に細心の注意を払いますが、結果は異なるようです。

ボンドに1つまたは8つのスレーブが含まれるかどうかに関係なく、tcpdumpは、すべてのボンディングされたインターフェイス上のスイッチからのLACPパケットを表示し、パケットは送信されません。実際には、パケットは送信されません。 rx_packetsはインターフェースのトラフィックを示していますが、tx_packetsはゼロです。 MIIまたは結合に関するログには何も興味深いものはありません。エラーすらありません。

現在、nicsが2つしかないボックスを扱っています。現時点では、私はeth1だけをボンドに持っています。明らかに、これは退化した構成です。状況は、ボンドのeth0とeth1の両方で変化しません。ネットワークスタックが完全にダウンしていると、マシンでの作業が困難になります。必要に応じて両方のNIC用に再構成し、管理インターフェース(DRAC)を使用できますが、その方法でボックスからコピーして貼り付けることができません。

いくつかの予備:

  • NIC、ポート、ケーブルをテストしました。インターフェースが結合されていない場合、すべてが期待どおりに機能します。
  • 再起動し、モジュールが正しくロードされていることを確認しました。
  • 私はこれをVLANトランキングの有無にかかわらず試しました。リンク集約はスタック内のそのポイントの下で行われるため、問題にはなりません。
  • スイッチには、他のLinuxボックスに接続する、機能するトランクチャネルグループがあります。 Linuxマシンのディストリビューション、カーネル、ハードウェアが異なっていても、構成はほぼ同じです。

これは、今日ダウンロードされたdebian 8.6です。

Linux box 3.16.0-4-AMD64 #1 SMP Debian 3.16.36-1+deb8u2
    (2016-10-19) x86_64 GNU/Linux

省略された設定:

iface eth1 inet manual

auto bond0
iface bond0 inet manual
        slaves eth1
        address 10.10.10.10
        netmask 255.255.255.0
        bond_mode 4
        bond_miimon 100
        bond_downdelay 200
        bond_updelay 200
        bond_xmit_hash_policy layer2+3
        bond_lacp_rate slow

一部の状態:

# cat /proc/net/bonding/bond0 
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)

Bonding Mode: IEEE 802.3ad Dynamic link aggregation
Transmit Hash Policy: layer2+3 (2)
MII Status: down
MII Polling Interval (ms): 100
Up Delay (ms): 200
Down Delay (ms): 200

802.3ad info
LACP rate: slow
Min links: 0
Aggregator selection policy (ad_select): stable
bond bond0 has no active aggregator

Slave Interface: eth1
MII Status: down
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 78:2b:cb:5a:2b:3e
Aggregator ID: N/A
Slave queue ID: 0

スイッチからのeth1のインバウンドtcpdumpレコード:

22:18:47.333928   M 44:ad:d9:6c:8d:8f ethertype Slow Protocols (0x8809),
          length 126: LACPv1, length 110
        Actor Information TLV (0x01), length 20
          System 44:ad:d9:6c:8d:80, System Priority 32768, Key 12,
          Port 272, Port Priority 32768
          State Flags [Activity, Aggregation, Synchronization,
            Collecting, Distributing, Default]
        Partner Information TLV (0x02), length 20
          System 00:00:00:00:00:00, System Priority 0, Key 0, Port 0,
            Port Priority 0
          State Flags [none]
        Collector Information TLV (0x03), length 16
          Max Delay 32768
        Terminator TLV (0x00), length 0

シスコ側:

interface GigabitEthernet1/0/15
 switchport trunk allowed vlan 100,101,102
 switchport mode trunk
 channel-group 12 mode active
end
interface Port-channel12
 switchport trunk allowed vlan 100,101,102
 switchport mode trunk
end

最終的に、スイッチはあきらめ、インターフェイスは「スタンドアロン」モードになります。チャネルグループに2つのインターフェイスがある場合、それらはbothでスタンドアロンモードになります。

#show etherchannel 12 sum
Flags:  I - stand-alone

Group  Port-channel  Protocol    Ports
------+-------------+-----------+-----------
12     Po12(SD)        LACP      Gi1/0/15(I)

私はこれで一日中頭を悩ませました。シスコの構成を何度か切り離して再構築しました。 LACPv1パケットがLinuxインターフェイスに到着することを示すtcpdumpがなければ、Cisco側を調べていました。残念ながら、Linuxカーネルはパケットを完全に無視しているようです。次の目的は、カーネルソースコードと最悪の場合の診断用カスタムカーネルです。うまくいけば、誰かがボンディングドライバーとそれを正しく実行する原因についてある程度の洞察を得ることができます。

8
jjoganic

ボンディングドライバーはLACPステートマシンのデバッグをユーザー空間に公開しません。コードを理解し、SystemTapなどのカーネルインスツルメンテーションを使用するか、独自のデバッグを独自のボンディングモジュールに書き込んで、カーネル用にコンパイルする必要があります。

ただし、問題は、結合ドライバーがスレーブがダウンしていると見なしていることです。

_MII Status: down
_

スレーブがリンクを持っていると確信しているので、物理的な問題は無視します。

ボンド/スレーブが適切に構成されておらず、スレーブが管理上ダウンしている、または使用中のドライバーがカーネル内のnetif_carrier()スタイルのリンク検出をサポートしておらず、_use_carrier=0_を設定する必要があるボンディングモジュールのオプション。

5
suprjami

Linux側の次のLACPプロパティを次のように設定してみてください:

bond_downdelay 0
bond_updelay 0
bond_xmit_hash_policy layer3+4
bond_lacp_rate fast

シスコ側で、ポートチャネルを再作成し、LACPの高速レートを有効にします。

port-channel load-balance src-dst-ip
interface GigabitEthernet1/0/15
    lacp rate fast
exit

Ciscoスイッチがlacp rate fastを設定できない場合は、IOSを更新する必要があります。

シスコはLinuxよりもLACPと連携しています。 Ciscoスイッチで可能な場合は、port-channel load-balance src-dst-portを設定します。

4
Mikhail Khirgiy