5 votes

Comment atteindre un débit total de 2 gigabits sous Linux en utilisant le pilote de liaison ?

Pour cette application, je suis moins préoccupé par la haute disponibilité que par le débit total. J'ai une adresse IP du côté du serveur et je veux pouvoir envoyer plus de 1 gigaoctet de trafic à partir du serveur. Le serveur possède deux cartes de 1 gigabit et est connecté à une paire de commutateurs. L'application implique des milliers de clients distants dans le monde entier qui se connectent au serveur (c'est-à-dire qu'il ne s'agit pas d'un réseau local).

Actuellement, le bonding est configuré en utilisant le mode 5 (balance-tlb), mais le résultat est que le débit de chaque port ne dépassera pas 500Mbit/s. Comment puis-je dépasser cette limite ? Veuillez supposer que je n'ai pas accès aux commutateurs et que je ne peux donc pas mettre en œuvre la norme 802.3ad.

(J'espérais pouvoir ajouter le tag "bonding", mais je ne peux pas ajouter de nouveaux tags, donc ce sera "teaming").

6voto

Jeremy Points 1287

Il est peu probable que vous puissiez atteindre 2 gigabits sans coopération au niveau du commutateur et même dans ce cas, cela pourrait être difficile avec une seule combinaison source/destination IP. La plupart des équipes sont configurées pour le hachage d'IP qui alloue un seul chemin NIC à chaque source/destination. En tant que tel, vous n'obtiendrez que 1 gigabit. Il existe des schémas round-robin, mais il arrive souvent que les paquets arrivent dans le désordre, ce qui les rend indésirables, à moins que l'hôte et la destination ne prennent en charge ce schéma.

4voto

nik Points 6970

Vous aurez besoin de Agrégation de ports au niveau des ports du commutateur (les deux ports du commutateur d'accès qui sont câblés aux ports 2 gigabits de votre machine doivent être agrégés). Mais, une fois cela réalisé, vous devriez vous rapprocher d'un chemin de 2Gbps (limité par les capacités de la machine).

Avec l'agrégation de ports sur le commutateur correspondant au port logique 2Gbps du pilote de liaison, vous utiliseriez un chemin redondant multiplexé avec une seule adresse IP sur la machine.

Il y a quelques notes intéressantes que j'ai trouvées en regardant ça maintenant, ici .

Cette merveilleuse fonctionnalité du pilote de liaison Linux a un revers : elle ne fonctionne qu'avec les interfaces réseau qui permettent de modifier l'adresse MAC lorsque l'interface est ouverte. Le mode balance-alb dépend d'une astuce ARP rapide pour tromper le noyau et lui faire croire que les deux interfaces physiques ne font qu'une en réécrivant l'adresse MAC à la volée. Le pilote de l'interface doit donc prendre en charge ce mode, et beaucoup d'entre eux ne le font pas.

Mais ce n'est pas tout ce que le pilote de liaison peut faire. L'option mode vous offre sept choix, et vous n'avez pas à vous soucier de la compatibilité des interfaces. Cependant, vous devez tenir compte de ce que vos commutateurs prennent en charge. Les modes balance-rr, balance-xor et broadcast nécessitent des ports de commutation regroupés. Cela porte toutes sortes de noms différents, alors cherchez "trunk grouping", "etherchannel", "port aggregation", ou autre. La norme 802.3ad nécessite un support 802.3ad dans le commutateur.

3voto

Matt Simmons Points 20098

Tout d'abord, vous savez probablement que vous n'atteindrez jamais réellement 2Gb/s. L'overhead de TCP/IP vous limitera probablement à 90% du maximum.

Deuxièmement, même si vous utilisez un moteur de déchargement TCP, la pile au-dessus de la couche 3 affecte définitivement la localisation du goulot d'étranglement. En d'autres termes, comment transmettez-vous les données ? Je pourrais avoir des cartes réseau à 10 Gb/s et un croisement entre elles et je ne dépasserais pas quelques centaines de Mb/s si j'utilisais rsync sur un tunnel ssh.

Que pouvez-vous nous dire d'autre sur la topologie ? Vous avez dit que le serveur est connecté à quelques commutateurs et que les clients distants sont répartis dans le monde entier. Avez-vous > 500Mb/s (agrégé) de connexions WAN ?

1voto

Nous n'avons pas vraiment résolu ce problème. Ce que nous avons fait, c'est mettre en place deux serveurs, l'un lié à une IP sur chaque interface, puis suivre les instructions données ici pour forcer le trafic à sortir par le port d'origine :

http://kindlund.wordpress.com/2007/11/19/configuring-multiple-default-routes-in-linux/

Légèrement modifié pour notre situation. Dans cet exemple, la passerelle est 192.168.0.1 et les IP du serveur sont 192.168.0.211 et 192.168.0.212 sur eth0 et eth1 respectivement :

printf "1\tuplink0\n" >> /etc/iproute2/rt_tables
printf "2\tuplink1\n" >> /etc/iproute2/rt_tables

ip route add 192.168.0.211/32 dev eth0 src 192.168.0.211 table uplink0
ip route add default via 192.168.0.1 dev eth0 table uplink0
ip rule add from 192.168.0.211/32 table uplink0
ip rule add to 192.168.0.211/32 table uplink0

ip route add 192.168.0.212/32 dev eth1 src 192.168.0.212 table uplink1
ip route add default via 192.168.0.1 dev eth1 table uplink1
ip rule add from 192.168.0.212/32 table uplink1
ip rule add to 192.168.0.212/32 table uplink1

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X