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/UbuntuBonding とmodprobe bonding
を使用してカーネルで結合モジュールを有効にし、lsmod
を使用するとボンディングモジュールが稼働しているかどうかを確認します。はい、リストに含まれています。
これを機能させるために何が欠けていますか?
2台のサーバー間で複数のNICのパフォーマンスが得られることはありません。スイッチは、単一のソースからのフレームをリンクアグリゲーショングループ(LAG)内の複数のリンクに分散しません。彼らが実際に行うことは、ソースMACまたはIP(あるいはその両方)をハッシュし、そのハッシュを使用してクライアントを1つのNICに割り当てることです。
したがって、サーバーは必要な数のNICを介して送信できますが、それらのフレームはすべて1つのリンクで宛先サーバーに送信されます。
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
お役に立てれば...
これを回答として投稿して申し訳ありません。 @longneckの回答にコメントを追加できません。おそらく評判が悪いためです...?
ISスイッチはMAC/IPだけでなくポート番号にも基づいてトラフィックを分散できるため、2つのサーバー間で複数のNICのパフォーマンスを得ることができます。シスコデバイスは、これを行うが、デフォルトである可能性があるL2およびL3アドレスだけでなく、L4ポートを参照するようにスイッチを設定する必要がある場合があります。
おそらくが2つのサーバー間で1 NICのパフォーマンスを超えない本当の理由は、1Gbps双方向が最新のCPUが処理する大量のトラフィックであるためです。私はあなたのサーバーがどれほど汚れているかわかりませんが、サーバーが受信する各パケットで意味のあることをしている場合、サーバーが1 Gbpsの全二重を処理できるとしたら驚きます。
申し訳ありませんが、上記の@longneckの回答を踏むつもりはなく、いくつかの追加のポイントを明確にしたかっただけです。