web-dev-qa-db-ja.com

Ubuntu12.04およびCiscoスイッチのネットワークボンディングモード802.3ad

2台のサーバーで3枚のネットワークカードをチーム化しようとしています。サーバー間でデータを複製するために最大3Gbpsのスループットを達成しようとしています。セットアップは簡単です。3台のギガビットネットワークカードを備えた2台のサーバーが同じCiscoスイッチに接続されています。サーバー1の場合はポート1-2-3で、サーバー2の場合はポート4-5-6で正確に。私のインターフェース構成は次のようになります。

auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet manual
        bond-master bond0

auto eth1
iface eth1 inet manual
        bond-master bond0

auto eth2
iface eth2 inet manual
        bond-master bond0

auto bond0
iface bond0 inet static
        address 192.168.1.11
        netmask 255.255.255.0
        gateway 192.168.1.1

        bond-miimon 100
        bond-mode 802.3ad
        #bond-downdelay 200
        #bond-updelay 200
        bond-lacp-rate 1
        # tried bond with slaves and no slaves interfaces
        bond-slaves eth0 eth1 eth2 
        # bond-slaves none

これらのカードで複数の構成を試しましたが、常に一度に1つのネットワークカードしか使用しませんでした。

Iperfとnetcatでパフォーマンスをテストしました

# server-1
iperf -s

# server-2 
iperf -c 192.168.1.10

# Wait for trafic
nc.traditional -l -p 5000 | pv > /dev/null 

# Push trafic
dd if=/dev/zero | pv | nc.traditional 192.168.1.11 5000

また、ポートチャネルなし、ポートチャネルあり、常に1つのネットワークカードのみを使用して、Ciscoスイッチで多くの構成を試しました。各カードを個別にテストすると、1Gbpsで動作します。

/ proc/net/bonding/bond0では、モードは802.3adを示し、LACPレートはFASTを示しているとも言えます。リンクカウントエラーはなく、3つのインターフェイスが表示されます。また、ethtoolを使用して各ethインターフェイスを確認しましたが、見た目は問題ありません。

このガイドに従ってセットアップしました https://help.ubuntu.com/community/UbuntuBondingmodprobe bondingを使用してカーネルで結合モジュールを有効にし、lsmodを使用するとボンディングモジュールが稼働しているかどうかを確認します。はい、リストに含まれています。

これを機能させるために何が欠けていますか?

4
drivard

2台のサーバー間で複数のNICのパフォーマンスが得られることはありません。スイッチは、単一のソースからのフレームをリンクアグリゲーショングループ(LAG)内の複数のリンクに分散しません。彼らが実際に行うことは、ソースMACまたはIP(あるいはその両方)をハッシュし、そのハッシュを使用してクライアントを1つのNICに割り当てることです。

したがって、サーバーは必要な数のNICを介して送信できますが、それらのフレームはすべて1つのリンクで宛先サーバーに送信されます。

4
longneck

LAGをテストするには、複数のスレッドを使用して複数のリンクを使用します。 netperf tryの使用:

netperf -H ipaddress &
netperf -H ipaddress &
netperf -H ipaddress &
netperf -H ipaddress &
netperf -H ipaddress &

ボンド内の他のスレーブにヒットするトラフィックの一部が表示されるはずです。

LACPボンドに4つの10GbEポートがあり、2つのサーバー間で32Gbから36Gbに片道ずつ取得しています。

もう1つの方法は、複数のIPアドレスを使用してボンドにエイリアスを設定し、複数のnetperfインスタンスを異なるアドレスに起動することです。

Intel XeonプロセッサX5690を搭載したサーバーには、コアあたり10Gb近くを駆動するのに十分な電力があります。

8x1GbEポート間で80Gb単方向トラフィックを駆動しました。キーは、スイッチとNICの両方でl3 + l4ハッシュを使用し、複数のスレッドを使用することです。

これが私の4x10GbE構成の例です...私のインターフェース構成ファイル:

#Ports that will be used for VXLAN Traffic in on Bond0
auto p4p1
auto p4p2
auto p6p1
auto p6p2

iface p4p1 inet manual
bond-master bond0

iface p4p2 inet manual
bond-master bond0

iface p6p1 inet manual
bond-master bond0

iface p6p2 inet manual
bond-master bond0

#Configure Bond0. Setup script will provide VXLAN VLAN configuration on bond0
auto bond0
iface bond0 inet manual
#address 10.3.100.60
#netmask 255.255.0.0
bond-mode 4
bond-slaves none
bond-lacp-rate 0
bond-ad-select 1
bond-miimon 100
bond-xmit_hash_policy 1

猫/ proc/net/bonding/bond0

root@Host2:~# 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: layer3+4 (1)
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0

802.3ad info
LACP rate: slow
Min links: 0
Aggregator selection policy (ad_select): bandwidth
Active Aggregator Info:
    Aggregator ID: 2
    Number of ports: 4
    Actor Key: 33
    Partner Key: 32768
    Partner Mac Address: 54:7f:ee:e3:01:41

Slave Interface: p6p1
MII Status: up
Speed: 10000 Mbps
Duplex: full
Link Failure Count: 1
Permanent HW addr: 90:e2:ba:47:2b:e4
Aggregator ID: 2
Slave queue ID: 0

Slave Interface: p4p2
MII Status: up
Speed: 10000 Mbps
Duplex: full
Link Failure Count: 1
Permanent HW addr: 90:e2:ba:47:2b:69
Aggregator ID: 2
Slave queue ID: 0

Slave Interface: p4p1
MII Status: up
Speed: 10000 Mbps
Duplex: full
Link Failure Count: 1
Permanent HW addr: 90:e2:ba:47:2b:68
Aggregator ID: 2
Slave queue ID: 0

Slave Interface: p6p2
MII Status: up
Speed: 10000 Mbps
Duplex: full
Link Failure Count: 1
Permanent HW addr: 90:e2:ba:47:2b:e5
Aggregator ID: 2
Slave queue ID: 0

次に、netperfの複数のインスタンスを実行した結果を示します。

root@Host6:~# vnstat -i bond0.192 -l
Monitoring bond0.192...    (press CTRL-C to stop)

   rx:    36.83 Gbit/s 353202 p/s          tx:   162.40 Mbit/s 314535 p/s

bond0.192  /  traffic statistics

                           rx         |       tx
--------------------------------------+------------------
  bytes                   499.57 GiB  |        2.15 GiB
--------------------------------------+------------------
          max           36.90 Gbit/s  |   170.52 Mbit/s
      average           20.05 Gbit/s  |    86.38 Mbit/s
          min               0 kbit/s  |        0 kbit/s
--------------------------------------+------------------
  packets                   39060415  |        34965195
--------------------------------------+------------------
          max             369770 p/s  |      330146 p/s
      average             186891 p/s  |      167297 p/s
          min                  0 p/s  |           0 p/s
--------------------------------------+------------------
  time                  3.48 minutes

お役に立てれば...

4
user200693

これを回答として投稿して申し訳ありません。 @longneckの回答にコメントを追加できません。おそらく評判が悪いためです...?

ISスイッチはMAC/IPだけでなくポート番号にも基づいてトラフィックを分散できるため、2つのサーバー間で複数のNICのパフォーマンスを得ることができます。シスコデバイスは、これを行うが、デフォルトである可能性があるL2およびL3アドレスだけでなく、L4ポートを参照するようにスイッチを設定する必要がある場合があります。

おそらくが2つのサーバー間で1 NICのパフォーマンスを超えない本当の理由は、1Gbps双方向が最新のCPUが処理する大量のトラフィックであるためです。私はあなたのサーバーがどれほど汚れているかわかりませんが、サーバーが受信する各パケットで意味のあることをしている場合、サーバーが1 Gbpsの全二重を処理できるとしたら驚きます。

申し訳ありませんが、上記の@longneckの回答を踏むつもりはなく、いくつかの追加のポイントを明確にしたかっただけです。

2
wookie919