Sophie

Sophie

distrib > * > 2010.0 > * > by-pkgid > a412ceb851151854794ced2a242192bb > files > 3807

howto-html-fr-20080722-1mdv2010.0.noarch.rpm

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Chapitre 10. Équilibrage de charge sur plusieurs interfaces</title><link href="style.css" rel="stylesheet" type="text/css" /><meta content="DocBook XSL Stylesheets V1.73.2" name="generator" /><link rel="start" href="index.html" title="HOWTO du routage avancé et du contrôle de trafic sous Linux" /><link rel="up" href="index.html" title="HOWTO du routage avancé et du contrôle de trafic sous Linux" /><link rel="prev" href="ch09s07.html" title="Le périphérique de file d'attente intermédiaire (The Intermediate queueing device (IMQ))" /><link rel="next" href="ch11.html" title="Chapitre 11. Netfilter et iproute - marquage de paquets" /></head><body><div class="navheader"><table summary="Navigation header" width="100%"><tr><th align="center" colspan="3">Chapitre 10. Équilibrage de charge sur plusieurs interfaces</th></tr><tr><td align="left" width="20%"><a accesskey="p" href="ch09s07.html">Précédent</a> </td><th align="center" width="60%"> </th><td align="right" width="20%"> <a accesskey="n" href="ch11.html">Suivant</a></td></tr></table><hr /></div><div class="chapter" lang="fr"><div class="titlepage"><div><div><h2 class="title"><a id="lartc.loadshare" />Chapitre 10. Équilibrage de charge sur plusieurs interfaces</h2></div></div></div><div class="toc"><p><b>Table des matières</b></p><dl><dt><span class="sect1"><a href="ch10.html#lartc.loadshare.caveats">Avertissement</a></span></dt></dl></div><p>Il existe plusieurs manières pour le faire.
Une des plus faciles et des plus directes est <acronym class="acronym">TEQL</acronym> 
(<em class="wordasword">True (or Trivial) Link Equalizer</em>.
Comme la plupart des éléments en relation avec la gestion de file d'attente,
l'équilibrage de charge est bidirectionnel.
Les deux équipements terminaux du lien ont besoin de participer pour obtenir 
une efficacité optimale.
</p><p>Imaginez la situation suivante :
</p><pre class="screen">                 +-------+   eth1   +-------+
                 |       |==========|       |
 'réseau 1' -----|   A   |          |   B   |---- 'réseau 2'
                 |       |==========|       |
                 +-------+   eth2   +-------+
</pre><p><code class="literal">A</code> et <code class="literal">B</code> sont des routeurs dont nous
supposerons qu'ils fonctionnent avec Linux pour le moment.
Si le trafic va du réseau 1 vers le réseau 2, le routeur <code class="literal">A</code>
a besoin de distribuer les paquets sur les deux liens allant vers 
<code class="literal">B</code>.
Le routeur <code class="literal">B</code> a besoin d'être configuré pour l'accepter.
On retrouve la même chose dans le sens inverse, pour les paquets allant du 
réseau 2 vers le réseau 1.
Le routeur <code class="literal">B</code> a besoin d'envoyer les paquets à la fois sur
<code class="literal">eth1</code> et <code class="literal">eth2</code>.
</p><p>La répartition est faite par un périphérique <acronym class="acronym">TEQL</acronym>,
comme ceci (cela ne pouvait pas être plus simple) :
</p><pre class="screen"># tc qdisc add dev eth1 root teql0
# tc qdisc add dev eth2 root teql0
# ip link set dev teql0 up
</pre><p>N'oubliez pas la commande <span class="command"><strong>ip link set up</strong></span> !
</p><p>Ceci a besoin d'être fait sur les deux hôtes.
Le périphérique <code class="literal">teql0</code> est basiquement un distributeur 
tourniquet au-dessus de <code class="literal">eth1</code> et <code class="literal">eth2</code>
pour l'envoi des paquets.
Aucune donnée n'arrive jamais à travers un périphérique 
<code class="literal">teql</code>, mais les données apparaissent sur 
<code class="literal">eth1</code> et <code class="literal">eth2</code>.
</p><p>Nous n'avons pour le moment que les périphériques et nous avons 
également besoin d'un routage correct.
L'une des possibilités pour réaliser cela est d'assigner un réseau 
<code class="literal">/31</code> sur chacun des liens, ainsi que sur le périphérique
<code class="literal">teql0</code> :
</p><p>
FIXME: Avons nous besoin de quelque chose comme 
<code class="literal">nobroadcast</code> ?
Un <code class="literal">/31</code> est trop petit pour contenir une adresse réseau et 
une adresse de diffusion.
Si cela ne marche pas comme prévu, essayez un <code class="literal">/30</code>,
et ajustez les adresses IP.
Vous pouvez même essayer sans attribuer d'adresses à <code class="literal">eth1</code>
et <code class="literal">eth2</code>.
</p><p>Sur le routeur A:
</p><pre class="screen"># ip addr add dev eth1 10.0.0.0/31
# ip addr add dev eth2 10.0.0.2/31
# ip addr add dev teql0 10.0.0.4/31
</pre><p>Sur le routeur B:
</p><pre class="screen"># ip addr add dev eth1 10.0.0.1/31
# ip addr add dev eth2 10.0.0.3/31
# ip addr add dev teql0 10.0.0.5/31
</pre><p>Le routeur <code class="literal">A</code> devrait maintenant être capable de
lancer un <span class="command"><strong>ping</strong></span> vers <code class="literal">10.0.0.1</code>, 
<code class="literal">10.0.0.3</code> et <code class="literal">10.0.0.5</code> à travers les deux
liens physiques et le périphérique « <span class="quote">égalisé</span> ».
Le routeur <code class="literal">B</code> devrait maintenant être capable de lancer un
<span class="command"><strong>ping</strong></span> vers <code class="literal">10.0.0.0</code>,
<code class="literal">10.0.0.2</code> et <code class="literal">10.0.0.4</code> à travers les liens.
</p><p>Si cela marche, le routeur <code class="literal">A</code> peut prendre 
<code class="literal">10.0.0.5</code> comme route vers le réseau 2 et le routeur 
<code class="literal">B</code> <code class="literal">10.0.0.4</code> comme route vers le réseau 1.
Pour le cas particulier où le réseau 1 est votre réseau personnel et où le 
réseau 2 est l'Internet, le routeur <code class="literal">A</code> peut prendre 
<code class="literal">10.0.0.5</code> comme passerelle par défaut.
</p><div class="sect1" lang="fr"><div class="titlepage"><div><div><h2 class="title"><a id="lartc.loadshare.caveats" />Avertissement</h2></div></div></div><p>Rien n'est aussi simple qu'il y paraît.
Les interfaces <code class="literal">eth1</code> et <code class="literal">eth2</code> sur les deux
routeurs <code class="literal">A</code> et <code class="literal">B</code> ne doivent pas avoir la
fonction de filtrage par chemin inverse activée.
Dans le cas contraire, ils rejetteront les paquets destinés à des adresses
autres que les leurs :
</p><pre class="screen"># echo 0 &gt; /proc/sys/net/ipv4/conf/eth1/rp_filter
# echo 0 &gt; /proc/sys/net/ipv4/conf/eth2/rp_filter
</pre><p>Il y a un sérieux problème avec le réordonnancement des paquets.
Supposons que six paquets aient besoin d'être envoyés de <code class="literal">A</code>
vers <code class="literal">B</code>.
Par exemple, <code class="literal">eth1</code> peut traiter les paquets 1, 3 et 5 et 
<code class="literal">eth2</code> les paquets 2, 4 et 6.
Dans un monde idéal, le routeur <code class="literal">B</code> devrait recevoir ces 
paquets dans l'ordre 1, 2, 3, 4, 5, 6.
Mais il est plus probable que le noyau les recevra comme ceci :
2, 1, 4, 3, 6, 5.
Ce problème va perturber TCP/IP.
Alors qu'il n'y a pas de problèmes pour les liens transportant différentes
sessions TCP/IP, vous ne serez pas capable de regrouper plusieurs liens et
obtenir par ftp un simple fichier beaucoup plus rapidement, à moins que
le système d'exploitation envoyant ou recevant ne soit Linux.
En effet, celui-ci n'est pas facilement perturbé par de simples réordonnancements. 
</p><p>Cependant, l'équilibrage de charge est une bonne idée pour de nombreuses
applications.
</p></div></div><div class="navfooter"><hr /><table summary="Navigation footer" width="100%"><tr><td align="left" width="40%"><a accesskey="p" href="ch09s07.html">Précédent</a> </td><td align="center" width="20%"> </td><td align="right" width="40%"> <a accesskey="n" href="ch11.html">Suivant</a></td></tr><tr><td valign="top" align="left" width="40%">Le périphérique de file d'attente intermédiaire (The Intermediate queueing device (IMQ)) </td><td align="center" width="20%"><a accesskey="h" href="index.html">Sommaire</a></td><td valign="top" align="right" width="40%"> Chapitre 11. Netfilter et iproute - marquage de paquets</td></tr></table></div></body></html>