<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE article PUBLIC "-//OASIS//DTD Docbook XML V4.1.2//EN"
"/usr/local/share/sgml/docbook/xml-dtd-4.1.2/docbookx.dtd">

<article>
	<articleinfo>
	<title>LVS-mini-HOWTO French</title>
	<author>
		<firstname>Joseph</firstname>
                <surname>Mack</surname>
                <affiliation>
			<orgname>jmack (at) wm7d (dot) net </orgname>
			<orgdiv></orgdiv>
		</affiliation>
	</author>
	<pubdate>v2003.07 Jul 2003, publié sous license GPL.</pubdate>
	<copyright>
		<year>2001</year>
		<year>2002</year>
		<year>2003</year>
		<holder>Joseph Mack</holder>
	</copyright>
	</articleinfo>

<abstract>
<para>
<emphasis role="bold">Convention pour la version française de ce document</emphasis>
</para>
<para>
    Dans la suite de ce document le serveur virtuel linux sera désigné par son
    nom anglais : Linux Virtual Server (LVS) car c'est le terme sous lequel il 
    est le plus souvent référencé.
</para>
<para>
<emphasis role="bold">Objectif de ce document</emphasis>
</para>

<para>
Vous monter comment installer un Linux Virtual Server (LVS)
et mettre en place quelques serveurs virtuels de démonstration.
Aucune connaissance du fonctionnement de LVS n'est requise ni expliquée ici.
Vous aurez besoin de quelques connaissance dans la configuration de linux.
Une fois que vous aurez réussi à faire fonctionner LVS, vous devriez lire la 
documentation
et le <ulink url="http://www.linuxvirtualserver.org/Joseph.Mack/HOWTO/index.html">
    HOWTO</ulink> (Version Anglaise)
sur le site web de LVS, pour comprendre comment LVS fonctionne et pour l'installer 
exactement selon vos désirs.
</para>

</abstract>

<section id="title">
<title>Introduction</title>

<para>
    Tout ce que vous voudriez savoir (code, documentation, liste de diffusion, archives 
    de la liste de diffusion) peut 
    être trouvé quelque part sur le <ulink url="http://www.linuxvirtualserver.org">
        site web LVS</ulink>
</para>

<para>
    La nécessité de ce mini-HOWTO a été mise en relief par ratz 
    <emphasis>ratz (at) tac (dot) ch</emphasis> qui a fait des 
    suggestions sur son contenu et l'a relu.
    D'autres suggestions ont été données par John Cronin 
    <emphasis>jsc3 (at) havoc (dot) gtf (dot) org</emphasis>. 
    Ce document était à l'origine un ensemble d'instructions pour mettre en place 
    rapidement un LVS sans avoir à comprendre comment un LVS marche.
    Cependant cela a ammené à une duplication des instructions entre 
    le HOWTO et le mini-HOWTO.
    Par la suite, il est devenu plus facile de rassembler toutes les instructions 
    au même endroit.
    Maintenant le mini-HOWTO contient un peu plus que le strict minimum nécessaire 
    à la mise en place d'un LVS de démonstration fonctionnel.
</para>

<para>
Ce document est (à l'origine) écrit en xml.
</para>

	<section id="location">
	<title>Emplacement de ce document</title>

	<para>
        Sur le <ulink url="http://www.linuxvirtualserver.org/Joseph.Mack/
            mini-HOWTO/LVS-mini-HOWTO French.html">
		site web LVS</ulink> et aussi par la page de
		<ulink url="http://www.linuxvirtualserver.org/Documents.html">Documentation LVS</ulink>
		 (Anglais).
	</para>

	</section>
	
	<section id="what">
	<title>Ce que fait un LVS</title>
	<para>
        Un LVS est un groupe de serveurs avec un directeur qui apparait pour le monde 
        extérieur (un client sur l'internet) comme un seul serveur.
        Le LVS peut proposer plus de services, ou des services avec une plus grande 
        capacité/débit, ou des services redondants
        (ou des serveurs peuvent être éteints pour maintenance de manière individuelle) 
        par rapport à ce qui est possible avec un seul serveur.
        Dans ce document, on appele service une connection à un port unique, par exemple 
        telnet, http, https, nntp, nfs, ntp, ssh, smtp, pop, bases de données.
        Certains services à plusieurs ports (par exemple ftp pour LVS_NAT) sont aussi 
        supportés comme des cas à part.
        D'autres services à plusieurs ports (<emphasis>par exemple</emphasis> ftp passif, 
        http/https pour les site de e-commerce) sont supportés par la persistance
        LVS ou plus récement par <ulink url="http://www.linuxvirtualserver.org/Joseph.Mack
            /HOWTO/LVS-HOWTO.fwmark.html">fwmark</ulink> comme décrit dans le HOWTO.
	</para>

	<para>
Dans le bestiare des ordinateurs, LVS est un switch de couche (ISO) 4.
La sémantique standard client-serveur est préservée. Chaque client pense 
être connecté directement
au serveur réel. Chaque serveur réel pense être connecté direcement au client.
Ni le client ni les serveurs réels n'ont quelque moyen que ce soit de dire 
qu'un directeur est intervenu dans la connection.
	</para>

	<para>
        Un LVS n'est pas un beowulf - un beowulf est un groupe de machines où chacune 
        d'elles coopère pour le calcul d'une petite partie d'un problème plus important.
        Un LVS n'est pas un cluster - un cluster de machines est un groupe de machines 
        qui se répartie la charge de manière coopérative.
        Les serveurs réels dans un LVS ne coopèrent pas - ils n'ont pas conscience
        de la présence d'autres serveurs réels dans le LVS.
Tout ce qu'un serveur réel sait c'est qu'il reçoit des connections d'un client.
	</para>

	<para>
Ce mini-HOWTO va expliquer la mise en place d'un LVS pour les services telnet et http.
	</para>
	</section>
</section>

<section id="lvs_ascii">
<title>Minimun requis pour le matériel et le réseau</title>

<para>
Voici une configuration LVS-NAT typique :
</para>

<programlisting>
<![CDATA[
                        ________
                       |        |
                       | client | (local ou sur l'internet)
                       |________|
                           |
                        (routeur)
                       DIRECTOR_GW
                           |
--                         |
L                      IP Virtuelle
i                      ____|______
n                     |           | (le directeur peut avoir 1 ou 2 carte(s) réseau)
u                     | directeur |
x                     |___________|
                          DIP 
V                          |
i                          |
r         -----------------+----------------
t         |                |               |
u         |                |               |
a        RIP1             RIP2            RIP3
l   ______________    ______________     ______________
   |              |  |              |   |              |
S  | serveur réel |  | serveur réel |   | serveur réel |
e  |______________|  |______________|   |______________|
r
v
e
r
]]>
</programlisting>

<para>
Voici une configuration LVS-DR ou LVS-Tun typique :
</para>

<programlisting>
<![CDATA[
                        ________
                       |        |
                       | client | (local ou sur l'internet)
                       |________|
                           |
                        (routeur)------------
                           |    SERVER_GW   |
--                         |                |
L                         VIP               |
i                      ____|______          |
n                     |           | (le directeur peut avoir 1 ou 2 carte(s) réseau)
u                     | directeur |         |
x                     |___________|         |
                          DIP               |
V                          |                |
i                          |                |
r         -----------------+-----------------
t         |                |                |
u         |                |                |
a      RIP1,VIP         RIP2,VIP        RIP3,VIP
l   ______________    ______________     ______________
   |              |  |              |   |              |
S  | serveur réel |  | serveur réel |   | serveur réel |
e  |______________|  |______________|   |______________|
r
v
e
r
]]>
</programlisting>

<para>
    Pour la redondance du directeur (abordée dans le <ulink url="http://www.linuxvirtualserver.org/Joseph.Mack/HOWTO/LVS-HOWTO.failover.html">
        LVS-HOWTO</ulink> (Anglais)),
    la VIP (IP Virtuelle) et la DIP (IP du directeur) seront déplacées sur un directeur 
    de backup. Les deux IPs ne pourront donc pas être l'adresse primaire des 
    cartes réseau du directeur <emphasis>donc</emphasis> elles doivent être des 
    adresses secondaires (ou des alias comme on les appelait autrefois :).
    Les adresses primaires sur le directeur peuvent être n'importe quoi du moment 
    qu'elles sont compatibles avec la topologie réseau déployée.
</para>

<para>
    Toutes les procédures de déployement (y compris le script de configuration) 
    supposent que vous avez déjà configuré toutes les IPs et les connections 
    réseau, sauf la (les) VIP(s) et la DIP :
    <emphasis>donc</emphasis>  configurez les RIP1..n, l'adresse primaire du 
    directeur, la passerelle du directeur (DIRECTOR_GW),
    la passerelle des serveur réels (SERVER_GW) et installez les connexions
    réseau entre tous ces éléments.
    Le script de configuration mettra en place la VIP et la DIP (la version 
    0.9.x les configurera en tant qu'alias, si tout va bien les versions postérieures
les configureront en tant qu'adresses secondaires).
</para>

<para>
    Dans une configuration de test, avec toutes les machines dans la même 
    pièce, un routeur (dans le <link linkend="lvs_ascii">diagram ascii</link>) 
    ne sera pas installé et la machine cliente aura les IPs de la passerelle 
    du directeur (DIRECTOR_GW) ou de la passerelle des serveurs réels (SERVER_GW).
</para>

<para>
Vous aurez besoin de 3 machines minimum (1 client, 1 directeur, 1 serveur réel).
Si vous avez 4 machines (<emphasis>c'est à dire</emphasis> 2 serveurs réels), 
vous pourrez alors voir la répartition de charge
(la connection depuis le client au LVS est alors envoyée à un serveur réel 
puis à l'autre).
</para>

<para>
    Vous pouvez configurer un LVS avec 2 machines (1 client, 1 directeur) 
    en utilisant la
<ulink url="http://www.linuxvirtualserver.org/Joseph.Mack/HOWTO/LVS-HOWTO.localnode.html">
fonctionnalité localnode de LVS</ulink> (Anglais),
avec le directeur fonctionnant aussi en tant que serveur réel, mais cela ne 
montre pas la façon de 
dimensionner une ferme de serveurs, et vous pourriez éprouver des difficultés 
à dire si cela marche 
correctement si vous êtes novice par rapport à LVS.
</para>

<para>
Le directeur est connecté à toutes les machine.
Si vous avez un seul clavier et un seul moniteur, vous pouvez tout configurer 
à partir du directeur.
</para>

<para>
Vous avez besoin :
</para>

<itemizedlist>
	<listitem>
	<emphasis role="bold">Client :</emphasis>
	<para>
N'importe quelle machine, n'importe quel OS
avec un client telnet et/ou un client http (<emphasis>c'est à dire</emphasis> 
netscape, lynx, IE).
(J'ai utilisé un client Mac pour mon premier LVS).
	</para>
	</listitem>

	<listitem>
	<emphasis role="bold">Directeur :</emphasis>

	<para>
Une machine tournant avec un noyau Linux 2.2.x (x&gt;=14) ou 2.4.x
patché avec ipvs. Si vous commencez à partir de zéro, utilisez
un noyau 2.4.x, car le développement d'ipchains (pour les noyaux 2.2.x) a été arrété.
	</para>

	<para>
        Pour un test, cette machine n'a pas besoin d'être puissante - n'importe quel 
        
        486 avec de l'ethernet 10Mbps fera l'affaire.
        Dans la vrai vie, un Pentium I 75Mhz peut délivrer 50Mbps de packets sur de l'ethernet 
        100Mbps. Dans ce cas la couche réseau
(bus à 33Mhz pour un port PCI) est la goulet d'étrangelement et le CPU travaille peu.
Comparez ce débit avec la capacité d'un connexion T-1 (1.5Mbps) et vous pouvez 
voir que pour des réseaux à faible traffic, la 
fonction essentielle est la redondance. Ce n'est qu'avec une infrastructure 
réseau à 1Gbps que les ressources CPU deviennent
limitantes avec un Pentium III à 300Mhz.
	</para>
	</listitem>

	<listitem>
	<emphasis role="bold">Serveur(s) réel(s) :</emphasis>
	<para>
Ce sont ces machines qui offrent le service intéressant (ici telent et/ou http).
Dans un environnement de production, ils peuvent être de n'importe quel OS mais
par simplicité je ne parlerai que du cas où ils sont des linux avec un noyau &gt;=2.2.14.
(Le support de versions antérieures du noyau a été retiré du HOWTO).
	</para>

	<para>
Le directeur peut transmettre les packets selon 3 methodes.
L'OS des serveurs réels peut être :
	</para>
	<itemizedlist>
		<listitem>
            LVS-NAT - n'importe quelle machine, n'importe quel OS, avec des services 
            interessants (par exemple httpd, ftpd, telnetd, smtp, nntp, dns, daytime ...).
	Le serveur réel doit juste avoie une pile TCP/IP - même une imprimante réseau fera l'affaire.
		</listitem>
		<listitem>
	LVS-DR  - les OS connus poour fonctionner sont listés dans le 
<ulink url="http://www.linuxvirtualserver.org/Joseph.Mack/HOWTO/LVS-HOWTO.LVS-DR.html">
HOWTO</ulink> (Anglais) : pratiquement tous les unix et les OS Microsoft.
		</listitem>
		<listitem>
            LVS-Tun - les serveurs doivent avoir un OS capable de faire des tunnels 
            (uniquement Linux jusqu'à présent).
(only Linux so far).
		</listitem>
	</itemizedlist>
	</listitem>
</itemizedlist>	

	<section id="link_layer">
	<title>Connectivité réseau</title>

	<para>
Elle doit être de l'ethernet, soit coaxial soit sur paires torsadées avec un hub ou un switch.
Pour une démonstration de l'ethernet 10Mbps est suffisant.	
(L'ATM ne marche pas, enfin pas encore, voir le 
<ulink url="http://www.linuxvirtualserver.org/Joseph.Mack/HOWTO/LVS-HOWTO.arp_problem.html#ATM">HOWTO</ulink> (Anglais)).
	</para>

		<section id="number_networks">
		<title>Choisir le nombre de réseau</title>
		
		<para>
Normalement, les serveurs réels sont connectés à un réseau privé (par exemple 192.168.1.0/24).
Ils ne sont pas contactés directement par les clients. De temps en temps, les serveurs réels
sont des machines (sur le réseau local) utilisées pour d'autres choses, dans ce cas, laissez
les sur leur réseau (d'adressage eventuellement public) d'origine.
		</para>

		<para>
Le directeur est joint par le(s) client(s) sur la VIP.
Si la VIP doit être joignable de façon publique (la configuration normale),
alors elle devrait normalement être sur un réseau différent de celui des serveurs réels,
dans ce cas vous aurez un LVS à deux réseaux. La VIP sera laors sur le réseau qui relie
le directeur et le routeur (ou le(s) client(s) de test). Si le(s) client(s) est(sont) sur 
le même réseau que les serveur réels, alors vous aurez seulement un LVS à un réseau.
		</para>

		<para>
Le nombre de réseau est un problème distinct du nombre de carte réseau.
Une carte réseau peut avoir plusieurs adresses IP et peut être sur plusieurs 
réseaux (logiques sur le même réseau physique).		
Vous pouvez avoir 1 carte réseau sur le directeur avec un LVS à 2 réseaux.
		</para>

		<para>
		<note>
La VIP est habituellement sur une interface ethernet (<emphasis>par exemple</emphasis> eth0).
Cependant <emphasis>dec (at) rm-f (dot) net</emphasis> 01 Jun 2002 l'a 
mis sur lo et le LVS a fonctionné sans problème.
		</note>
		</para>
		</section>

		<section id="number_nics">
		<title>Choisir le nombre de carte(s) réseau sur le directeur</title>

		<para>
Pour une première configuration, vous n'aurez besoin que d'une seule carte réseau sur le directeur
Avoir 2 cartes réseau sur le directeur sépare les packets de l'intérieur et 
les packets de l'extérieur, ce qui simplifie les règles de filtrage et la sécurité.
Les cartes à 100Mbps sont bon marché et pour la production vous pouvez en mettre
autant que peut en accepter votre carte mère
(il existe quelques cartes réseau à quatre ports, j'utilise la D-Link quad tulip sur mon directeur).
Le debit de packet sera limité par le bus PCI/la pile TCP/IP (400Mbps 
pour des cartes mère en 2000) - <emphasis>c'est à dire</emphasis> 4 cartes réseau.
Le directeur peut avoir un carte réseau pour chaque serveur réel même si 
chaque carte n'est pas utilisée à sa vitesse maximale.
Augmenter le nombre de cartes réseau augmentera le débit tant que quelque 
chose d'autre ne sera pas le facteur limitant, par exemple la vitesse du CPU ou celle du bus PCI.
		</para>
	
		<para>
Le <link linkend="configure_script">script de configuration</link>
prendra en compte 1 ou 2 carte(s) réseau sur le directeur.
Dans le cas 1 carte, la carte est connectée à la fois au monde extérieur 
et au réseau des serveurs réels.
Dans le cas 2 cartes, ces deux réseaux sont physiquement séparés, une carte
connecté au monde extérieur, l'autre aux serveurs réels.
		</para>
		</section>
	</section>

	<section id="gotchas">
	<title>Gotchas: vous avez besoin d'un client à l'extérieur</title>

	<para>Vous avez besoin d'un client à l'extérieur.</para>

	<para>
        Le VLs fonctionne comme une seule machine. Vous devez accéder au LVS depuis 
        un client qui ne fait pas partie du LVS.
        Vous ne pouvez pas accéder à un service controllé par un LVS  (par ex. http, 
        telent) depuis n'importe laquelle des machines du LVS;
        un accès depuis le directeur plantera, un accès depuis un serveur réel se 
        connectera au service local, bypassant le LVS.
	</para>
	<note>
Avril 2003: 
Julian a trouvé 
<ulink url="http://www.linuxvirtualserver.org/Joseph.Mack/HOWTO/LVS-HOWTO.LVS
    -NAT.html#clients_on_realserver_contacting_services_on_VIP">
comment avoir un serveur réel comme client d'un LVS-NAT</ulink> (Anglais).
	</note>
	<para>Minimum 3 machines: client, directeur, serveur(s) réel(s)
	</para>

	</section>

	<section id="test_with_telnet">
	<title>Le service de départ pour les tests devrait être telent (ou netcat)</title>

	<para>
        Tous les test de votre LVS devraient être faits avec des service simples 
        (<emphasis>telnet, http</emphasis>).
Telnet a 
	</para>

	<itemizedlist>
		<listitem>un client simple (disponilve avec tous les OSs)</listitem>
		<listitem>un protocole simple (un port)</listitem>
		<listitem>des échanges tous en ascii (et peuvent être observés avec tcpdump)</listitem>
        <listitem>des connections non persistantes (vous pouvez tester
            la planfication tourniquet (round robin))</listitem>
		<listitem>telnetd ecoute d'habitude sur toutes les IP sur un serveur 
(<emphasis>c'est à dire</emphasis> sur 0.0.0.0) au moins avec inetd</listitem>
        <listitem>le plus important, quand une connection est faite vous 
            verez une entrée dans la colonne ActConn de la sortie de ipvsadm.</listitem>
	</itemizedlist>

	<para>
        Pour des raisons de sécurité, vous éteindrez telnet plus tard, mais tant que 
        
        vous êtes en train de tester votre LVS ou votre nouveau service, regardez
        toujours si telnet marche si vous avez des soucis. Si telnet n'est pas transmis 
        par LVS vous devriez réparez cela en premier.
</para>

	<para>
Un autre client utile est :	
<ulink url="http://www.linuxvirtualserver.org/Joseph.Mack/HOWTO/LVS-HOWTO.
    services.multi-port.html#netcat">
netcat</ulink> 
ou son remplaçant, phatcat.
	</para>
	</section>

	<section id="filter_rules">
	<title>Tester sans règles de filtre (Firewall)</title>
	<para>Vous pouvez les ajouter après avoir fait fonctionner LVS.</para>
	</section>

</section>

<section id="software">
<title>Logiciels</title>
	<section id="compiler">
	<title>Compilateur</title>
	<para>
Wensong utilise egcs-2.91.66 sur RedHat 6.2 et gcc-2.96 sur RedHat 7.3.
	</para>
	<para>
J'ai eu beaucoup de problèmes (Mai 2003) avec les nouveaux noyaux et gcc-3.x.
Les noyeaux compilent mais ne fonctionnent pas correctement (sur une de mes 
machines, la scsi, et le réseau ne fonctionne pas quand j'active le SMP).
Le nombre de paramètres dans ip_select_ident a changé ce qui conduit à des erreurs 
de compilation (le nouveau paramètre a la valeur 0, je l'ai juste effacé
- ca a compilé mais je ne sais si ce code ne me lachera pas)? J'ai aussi trouvé 
quelques packages qui ne compilent pas avec gcc-3.3.
	</para>
	</section>
	<section id="getting_files">
	<title>Récupérer les fichiers : directeur, serveurs réels</title>

		<section id="fresh_kernel">
		<title>Noyau standard pour le directeur et les serveurs réels</title>

		<para>
            Pour le directeur, vous avez besoin du noyau standard, qui peut être obtenu sur 
            le <ulink url="ftp://ftp.kernel.org/pub/linux/kernel/">site ftp noyau</ulink> (Anglais).
            Pour les noyaux linux-2.4.x, vous devrez patcher avec le patch 'caché' (hidden); 
            (qui a été testé seulement avec ces noyaux standards).
		</para>

		<para>
		<note>
            Le noyau fourni avec votre distribution est généralement une version évoluée du 
            noyau standard et qui ne sera surement <emphasis>pas</emphasis> patché
            correctement avec LVS.
            Le noyau RedHat a les patchs LVS pré-appliqués, mais a une version qui sera déjà 
            dépassée lorsque vous lirez ces lignes.
            SuSE (Mai 2003) fait de même.
            Si vous arrivez à faire fonctionner LVS avec le noyau standard mais pas avec 
            celui de votre distribution,
            alors nous pouvons peut être trouver la source du probléme, mais vous feriez 
            mieux de contacter votre distributeur - ils ont besoin de votre feedback, nous non.
            Si vous êtes vraiment intéressé par le fait de faire fonctionner LVS avec le noyau de 
            votre distribution, vous pouvez le faire après avoir réussi avec le noyau standard.
		</note>
		</para>
		</section>
		
		<section id="ipvs_patch">
		<title>Patch IPVs pour le directeur</title>

		<para>
            Cliquez sur le lien 'software' sur la <ulink url="http://www.linuxvirtualserver.org">
                page de garde de LVS</ulink> (Anglais).
            Récupérez la dernière archive tar ipvs pour le directeur (disponible 
            en version 2.2.x, 2.4.x, et 2.5.x).
Elle contient le patch pour le noyau et le code source pour quelques programmes et utilitaires.
		</para>
		<para>
Vous devez patcher le noyau standard avec le patch ip_vs correspondant, re-compiler le noyau,
rebooter et compiler ensuite le programme <link linkend="ipvsadm">ipvsadm</link>.
		</para>

		<para>
Le directeur fonctionne dans une (parmis plusieurs) méthode de transfert; LVS-NAT (network
address translation (Translation d'Adresse Réseau)); LVS-DR 
(direct routing (routage direct)) et LVS-Tun (tunneling (par tunnel)).
La méthode de transfert est configurée pour chaque service/serveur réel par ipvsadm.
		</para>
		
		<para>
Le code du directeur a été bien testé sur les processeurs Intel.
Il est également utilisé avec succès par quelques personnes sur du matériel Alpha.
En général, il devrait fonctionner sur n'importe quel matériel qui peut faire tourner Linux.
		</para>
		</section>


		<section id="realserver_code">
		<title>Fichiers pour les serveurs réels</title>

		<para>
Les serveurs réels doivent être configurés correctement par rapport à la méthode de tranfert.
Pour cela vous devez
		</para>
		<itemizedlist>
			<listitem>régler le problème arp.
(Vous trouverez ici plus d'infos au sujet du <ulink url="http://www.linuxvirtualserver.org/Joseph.Mack/HOWTO/LVS-HOWTO.arp_problem.html">problème arp</ulink> (Anglais).)
			</listitem>
			<listitem>
configurer la passerelle. 
			<itemizedlist>
				<listitem>
LVS-NAT: la DIP
				</listitem>
				<listitem>
LVS-DR, LVS-Tun: un routeur (pas le directeur).
				</listitem>
			</itemizedlist>
			</listitem>
		</itemizedlist>

		<para>
            Pour régler le problème arp pour LVS-DR/LVS-Tun, les serveurs réels 
            avec des noyaus linux 2.2.x/2.4.x, faites tourner un noyau standard 
            patché avec le patch "hidden"
            (disponible sur la <ulink url="http://www.linuxvirtualserver.org/~julian/">
            page de patchs et de programmes de Julian</ulink> (Anglais)).
            Pour les noyaux 2.2.x, ce patch est déjà dans le noyau standard (<emphasis>
            c'est à dire</emphasis> qu'il est prépatché pour vous).
            Pour les noyaux 2.4.x, vous devrez appliquer ce patch vous même.
            A la fin 2001, il était possible d'appliquer au noyau le patch hidden 
            et le patch ipvs en même temps, ce qui permettait d'utiliser le même noyau
            pour le directeur et pour les serveurs réels.
            La partie du noyau touchée par le patch ne change pas beaucoup d'une version 
            à une autre de noyau, donc le patch hidden pour le noyau 2.4.5 est toujours
            valable pour le noyau 2.4.19pre4.
		</para>

		<para>
            Voici la liste des OS qui ont été testés avec les méthodes de transfert.
            (nous pensons qu'on peut arriver à faire fonctionner les OS avec 
            toutes les méthodes d'une manière ou d'une autre.)
		</para>

		<para>
		<itemizedlist>
			<listitem>Serveurs réels par Mode  -
			<itemizedlist>
				<listitem> 
				LVS-NAT - n'importe quel OS
				</listitem>
				<listitem> 
				LVS-DR - la plupart des OS (tous devraient y arriver).
				<para>
Le problème avec les OS autre que linux est (comme d'habitude) de régler le problème arp.
Ratz a rassemblé des instructions pour configurer des 
<link linkend="other_unices">serveur réels utilisant des OS autre que Linux</link> (Anglais).
				</para>
				</listitem>
				<listitem> 
			LVS-Tun - linux uniquement
				</listitem>
		</itemizedlist>
		</listitem>
		<listitem>Serveurs réels par OS - 
		<itemizedlist>
			<listitem>Les autres OS
			<itemizedlist>
				<listitem> LVS-NAT - auncune modification nécessaire sur les serveurs réels</listitem>
				<listitem> LVS-DR - fonctionne avec la plupart des OS rencontrés jusqu'a présent, 
                    bien que quelques astuces ont été nécessaires pour 
                    trouver les commandes indispensable à la configuration de la 
                    VIP sur les serveurs réels pour quelques OS.
                    Si vous faites tourner Linux-2.2.x, ou Linux-2.4.x, 
                    vous devez régler le problème arp.
				</listitem>
				<listitem> LVS-Tun - linux uniquement
(les serveurs réels doivent pouvoir désencapsuler les packets IP sur IP).
Si vous faites tourner Linux-2.2.x, ou Linux-2.4.x, vous devez régler le problème arp.
				</listitem>
			</itemizedlist>
			</listitem>
			<listitem>
Linux 2.0.36:
aucune modification ni patch ne sont nécessaires.
Fonctionne avec tous les modes LVS : LVS-NAT, LVS-Tun et LVS-DR.
			</listitem>
			<listitem>Linux 2.2.x,2.4.x: 
			<itemizedlist>
				<listitem> LVS-NAT - aucune modification aux serveurs réels.</listitem>
				<listitem> LVS-DR and LVS-Tun - 
                    (roulement de tambours - ceci est la partie difficile, connue 
                    sous le nom du <label id="arp_problem">&quot;problème arp&quot;</label>;).
				<para>
La théorie du problème arp peut être sautée lors d'une première lecture.
Vous devrez comprendre ce problème pour mettre en place votre propre configuration LVS.
Voici un résumé :
				</para>
<programlisting>
<![CDATA[
SI   (
        (vous utilisez LVS-DR ou LVS-Tun sur votre directeur)
        ET
        (vous utilisez un kernel Linux 2.2.x, 2.4.x sur un serveur réel)
        ET
        (
            la VIP sur les serveurs réels est sur une interface ethernet 
            (par ex. lo:0, tun10:0)
        	c'est à dire qui n'est pas acceptée par un proxy transparent
        )
        ET
        (
        les serveurs réels peuvent répondre à des requêtes arp provenant 
        du client/routeur (les serveurs réels sont sur le même cable réseau|le même 
        réseau que le directeur)
        )
     )
ALORS
     {
     VOUS DEVEZ GERER CE PROBLEME
     }
IS
]]>
</programlisting>
<para>
Pour faire simple,
en général vous devrez gérer le problème arp.
</para>

				</listitem>
				</itemizedlist>
				</listitem>
			</itemizedlist>
			</listitem>
		</itemizedlist>
		</para>

		<para>
La manière la plus courante de régler le probleme arp est de cacher la VIP des requêtes arp.
		</para>

		<itemizedlist>
			<listitem>
2.2.x: Le noyau standard est déjà patché avec le patch hidden.
Utilisez le noyau 2.2.x prépatché de la distribution standard.
			</listitem>
			<listitem>
2.4.x: Le noyau standard <emphasis>n'a pas</emphasis> le patch hidden appliqué.
Vous devez patcher le noyau standard avec le patch hidden 2.4.x trouvé sur la page 'software' de LVS.
			</listitem>
		</itemizedlist>

		<para>
Les exemples suivants vont vous montrer comment gérer le problème arp.
Toutes ces méthodes pour gérer le problème arp fonctionnent, avec à peu
près le même indice de performance (débit, lantence) et sont à peu près
aussi faciles/difficiles à mettre en place.
		</para>

		<para>
La méthode "hidden" pour dissimuler des interfaces aux requêtes arp est la plus proche
du comportement standard NOARP d'unix et c'est la méthode la plus utilisée sur les 
serveurs réels Linux.
		</para>

		<para>
Pour des noyaux plus anciens (2.0.x et au moins les premiers 2.2.x),
une autre méthode simple est d'installer une carte réseau supplémentaire dans les serveurs réels
pour la VIP et de ne pas la connecter au réseau.
La carte réseau ne reçoit pas de paquets, c'est juste un moyen d'avoir la VIP sur les serveurs réels.
La carte réseau peut être une vieille carte ISA 10Mbps.
La prix de certaines cartes tulip PCI 100Mbps est maintenant inférieur au salaire que vous seriez payé
pour recompiler un noyau avec le patch 'hidden'. 
(Note, 2002: - cela ne marche pas pour les noyaux 2.4.x).
		</para>
		</section>
	
		<section id="upgrading">
		<title>Mettre à jour LVS</title>

		<para>
            Le seul moyen est de compiler un nouveau noyau, 
            redémarrer puis compiler/installer l'ipvsadm correspondant,
comme si vous faisiez une installation depuis le début.
Vous ne pouvez pas mettre à jour in situ, vous aurez à éteindre votre directeur.
		</para>

		<para>
            J'utilise le script <command>rc.system_map</command> (qui est fourni avec le 
            <link linkend="configure_script">configure_script</link>)
            pour être sur d'avoir la bonne version d'ipvsadm, du noyau et des fichiers 
            system.map bien synchrones, quand j'utilise de multiples versions de LVS
(<emphasis>c'est à dire</emphasis> une version 2.2 et 2.4).
		</para>
    </section>
</section>
<section id="software">
<title>Logiciel </title>
	<section id="compiler">
	<title>Compiler</title>
	<para>
Wensong utilise egcs-2.91.66 sur RedHat 6.2 et gcc-2.96 sur RedHat 7.3.
	</para>
	<para>
Mai 2003 - J'ai eu beaucoup de problème avec les nouveaux kernels et gcc-3.x . 
Les kernels sont construits mais ne marchent pas correctement (sur l'une de mes 
machines le scsi et le réseau ne fonctionne pas quand le SMP est allumé ). 
Le nombre de paramètres de la commande ip_select_ident a changé 
ce qui amène des erreurs de compilation (le nouveau paramètre a la valeur '0', 
Je l'ai simplement supprimé - Il se compile maintenant mais 
je ne sais pas si le code me renverras une erreur maintenant). J'ai aussi trouvé que 
certains packages ne se compilent pas avec gcc-3.3.
	</para>
	<para>
Fev 2004 - Peu importe les problèmes, il semble qu'ils aient disparues. 
Avr 2004 - Il semble que gcc-2.95.3 est toujours le compilateur recommandé pour 
les kernels. L'utilisation d'un autre compilateur est à votre propre risque.
	</para>
	</section>
	<section id="fresh_kernel">
	<title>Utilisez le kernel standard</title>
	<para>
Vous avez besoin du kernel standard pour à la fois le directeur ainsi que pour les serveus réels. 
Vous pouvez obtenir le kernel standard ici 
<ulink url="ftp://ftp.kernel.org/pub/linux/kernel/">site kernel ftp</ulink>
(ftp://ftp.kernel.org/pub/linux/kernel/).
	</para>
	<para>
Si vous utilisez une version commercial améliorée du kernel 
(<emphasis>i.e.</emphasis> d'une distribution linux), 
Il y a de forte chance que le patch <emphasis role="bold">ne</emphasis> marche 
<emphasis role="bold">pas</emphasis> correctement avec LVS. 
Le kernel de Redhat a les patches LVS pré-appliqués, 
avec une version qui sera déjà vieille  
au moment où vous parlerez avec nous. 
SuSE (Mai 2003) fait la même chose. 
Si vous arrivez à faire fonctionner LVS avec le kernel standard, 
mais que vous n'y arrivez pas avec votre distribution, 
nous savons peut etre quel est le problème, 
mais il serait mieux de contacter le distributeur - 
il ont besoin de ces retours, pas nous. 
Si vous ètes vraiment interressé par le fait de faire fonctionner le kernel de votre 
distribution avec LVS, vous pouvez faire ce que vous avez fait avec le kernel standard. 
Si vous venez sur la mailing list avec un problème et que vous utillisez 
un kernel commercial amélioré, prennez soin de nous dire que vous n'utilisez 
pas un kernel standard.
	</para>
	</section>
	<section id="ifup">
	<title>Utilisez les utilitaires standard (pas ifup)</title>
	<para>
Utilisez les utilitaires standard, <emphasis>e.g.</emphasis> 
les outils <filename>iproute2</filename> 
(ou les anciennes commandes <command>ifconfig/route</command>, 
qui ne marche bien qu'avec un noeud simple avec une IP).
		<note>
Nous mettons en place LVS depuis le premier jour avec <command>ifconfig</command> 
et des alias ip, mais ces derniers ne sont pas compatibles avec la plupart 
des outils réseaux, alors soyez prudent si vous utilisez 
<command>ifconfig</command>.
		</note>
	</para>
	<para>
Des personnes se sont rendus compte que LVS ne marche pas s'il a été mis en place  
avec le <command>ifup</command> de Redhat 
(regardez les <ulink url="http://marc.theaimsgroup.com/?l=linux-virtual
    -server&amp;m=108132810628417&amp;w=2">archives LVS</ulink>).
Le problème est que <command>ifup</command>
lance la commande <command>arping</command> qui n'a rien à faire là, 
et qui inonde votre configuration de LVS. 
D'autre logiciel réseau améliorés ajoutent des routes bizarre. 
Si vous voulez vous rouler vous même en utilisant des commandes 
qui ont été couçu pour améliorer l'unicité d'une distribution sur le marché, 
au lieu de faire le travail qui doit être fait, 
alors vous méritez amplement les problèmes qui vous arrive, 
mais nous, sur la mailing list devons cerner comment vous avez planté 
votre cofiguration et nous considérons que vous utilisez les utilitaires normaux. 
Nous sommes en général très content d'apprendre au bout de plusieurs échanges 
que vous avez utilisé délibérément des outils non fiable écris par  
des gens qui ne comprennent pas le réseau. 
Autant utiliser Windows...
	</para>
	<para>
Utilisateur infortuné
	</para>
	<blockquote>
		<para>
Avant de lancer le script, je peut me connecter à tout mes serveurs réels, mais après l'avoir lancé 
je pert la connection et la seul différence dans la table de routage est :
		</para>
<programlisting><![CDATA[
$VIP dev lo  scope link  src $VIP
]]></programlisting>
	</blockquote>
	<para>
Francois JEANMOUGIN <emphasis>Francois (dot) JEANMOUGIN (at) 123multimedia (dot) com</emphasis>
16 Jan 2004 
and Avr 07, 2004
	</para>
	<para>
Vous ne devriez pas ajouter aucune route lo. 
N'utilisez jamais ifup pour monter des interfaces noarp. 
Dans le script ifup, vous trouverez des commandes arp. 
Si c'est le premier serveur réel que vous configurez, 
ce n'est pas vraiment un problème, 
mais si vous ajoutez un serveur réel à un groupe de serveur, 
celà va embrouiller la structure du routage de LVS en lançant une annonce arp.
	</para>
	<para>
Christopher DeMarco <emphasis>cdemarco (at) md (dot) com (dot) my</emphasis> 07 Juil 2004
	</para>
	<para>
RedHat utilise <command>ifup</command> au démarrage. 
	</para>
<programlisting><![CDATA[
[08:55:05][root@sunset root]# cat /etc/redhat-release 
Red Hat Enterprise Linux WS release 3 (Taroon Update 2)
[08:55:14][root@sunset root]# grep  -n ifup /etc/init.d/network 
73:     action $"Bringing up loopback interface: " ./ifup ifcfg-lo
137:            action $"Bringing up interface $i: " ./ifup $i boot
148:            action $"Bringing up interface $i: " ./ifup $i boot
]]></programlisting>
	<para>
Pourquoi ne pas simplement commenter les bits 
<command>ifup</command> qui appel arp(8) et arping(8)? 
Ce n'est pas l'idéal dans cette situation car chaque 
mise à jour du système nécessitera le nétoyage du code 
de la commande <command>ifup</command>, 
mais il me semble que ce serait la procédure la moins envahissante. 
Ré_écrire des scriptes d'initialisation propre va interrompre 
les fonctionnalités de configuration point-n-drool de RedHat que 
les utilisateurs pourrait vouloir utiliser. 
Selon moi, la manipulation des caches arp est le seul empèchement 
à l'utilisation de RedHat avec LVS, ou y en a-t'il d'autre ?
	</para>
	<para>
Horms 
	</para>
	<para>
Oui, c'est certainement ce que je ferais.
Peut être que RedHat serait incité (à travers un rapport de bug sur bugzilla)
à en faire une option de configuration.
RedHat est la seul distribution qui à ma connaissance fait celà .
Mais il semblerai normal que les autres aient le meme fonctionnement.
	</para>
	<para>
Kjetil Torgrim Homme <emphasis>kjetilho (at) ifi (dot) uio (dot) no</emphasis>
11 Jul 2004
	</para>
	<blockquote>
		<para>
Arptables est une méthode supportée par Red Hat. 
Le package, <filename>arptables_jf</filename>,
fait parti de l'Advanced Server, mais le fichier src.rpm peut etre téléchargé, 
reconstruit et utilisé sur une station de travail puisqu'il a le même support du kernel.
La configuration est plutôt directe:
		</para>
<programlisting><![CDATA[
# arptables -A IN -d $VIP -j DROP
# arptables -A OUT -s $VIP -j mangle --mangle-ip-s $RIP
# service arptables_jf save
# chkconfig --add arptables_jf
# chkconfig --levels 12345 arptables_jf on
]]></programlisting>
		<para>
Ce service est lancé avant que le réseau soit mis en place. Notez que vous
avez à spécifier un niveau de lancement explicite, car bettement 
il ne démarrera pas en mode simple utilisateur par défaut.
		</para>
	</blockquote>
	</section>
	<section id="packages">
	<title>Récupérer des fichiers dans un package</title>
	<para>
Si vous voulez un package de fichier pour une distribution,
en général, vous devrez allez chez son distributeur. 
Quelques fois des personnes de la mailing list font des packages 
de fichier pour une utilisation général. 
LVS est une activité pratiquée pendant le temps libre pour quelques d'entre nous. 
Nous sommes content de générer des fichiers que tout le monde peut utiliser,
mais il n'y a vraiment pas de raison de créer des packages pour 
l'ensemble des distributions, alors qu'on ne peut les tester toutes et nous savons 
pas si quelqu'un les utilisera un jour.
	</para>
	<para>
Mon point de vue personnel est que à moins de savoir 
compiler le code, vous devriez tout simplement utiliser windows. 
Je sais que certain sont soumis à des autoritées qui veulent des packages de 
codes originaire d'un distributeur homologué, et sont près à payer pour celà. 
Désolé, nous ne sommes pas organisé pour faire celà. 
	</para>
	</section>
	<section id="getting_files_director">
	<title>Récupérer des fichiers: le directeur</title>
	<para>
Le logiciel est disponible ici
<ulink url="http://www.linuxvirtualserver.org/software/ipvs.html">
http://www.linuxvirtualserver.org/software/ipvs.html</ulink>.
	</para>
	<para>
Le code pour le directeur a été testé sur les processeurs Intel. 
Comme plusieurs personnes utilisent du alpha hardware. 
On peut supposer qu'il devrait fonctionner sur tout matériel sur lequel Linux marche.
	</para>
		<section id="director_patch">
		<title>Patch du Kernel</title>
		<para>
Vous avez besoin d'un Kernel avec le correctif the ip_vs
		</para>
		<itemizedlist>
			<listitem>
				<para>
2.6.x kernels: 
				</para>
				<para>
le kernel (de ftp.kernel.org) est déjà corrigé avec le code ip_vs.
				</para>
			</listitem>
			<listitem>
				<para>
2.4.x kernels: 
				</para>
				<para>
pour les versions 2.4.23 et suivantes, le kernel (from ftp.kernel.org) est
déjà corrigé avec le code ip_vs.
				</para>
				<note>
Ne lancez pas la commande <command>make patchkernel</command> sur la version 2.4.23
kernel (ou précédentes). 
Ces kernels sont déjà patché avec LVS. 
Malgrè son nom la commande <command>make patchkernel</command> 
remplace les fichiers, au lieu de les corriger.
La commande réussira mais va produire un kernel qui ne compilera pas.
				</note>
				<note>
La version 2.4.23 a un problème d'exploitation root qui a été réglé à la version 2.4.24.
La version 2.4.25 règle aussi un problème d'exploitation root. 
Il vaut mieux éviter les versions 2.4.23/24 pour les systèmes de production.
				</note>
				<para>
Pour la version 2.4.22 et précedentes, il faut que vous téléchargiez le patch ip_vs 
pour la version de votre kernel et le patcher.
				</para>
			</listitem>
			<listitem>
				<para>
2.2.x kernels:
				</para>
				<para>
Toute les versions ont besoin du téléchargement du patch et de son installation.
				</para>
			</listitem>
		</itemizedlist>
		<para>
Dans tous les cas quand vous compilez un kernel, 
vous devez mettre en marche l'option ip_vs dans la commande 
<command>make configure</command> 
(Networking options -&gt; IP: Virtual Server Configuration).
Si vous ne savez pas ce que vous faites, compilez toutes les options en tant que module
et ne changez pas la taille de la table de connection 
(voir plus loin pour plus de détails sur les options de compilation).
		</para>
		<blockquote>
			<para>
Horms 14 Nov 2003
			</para>
			<para>
En général chaque version en fait en deux formes
(faites votre choix pour le style de construction du kernel).
			</para>
			<itemizedlist>
                <listitem>
Une archive tar (tarball) que vous pouvez utiliser pour construire LVS 
en dehors ou à l'intérieur de l'arborescence du kernel.
				</listitem>
                <listitem>
Et un patch qui ne peut être utilisé pour construire 
LVS à l'intérieur de l'arborescence du kernel.
				</listitem>
			</itemizedlist>
			<para>
Pour la version 2.4.22, le patch <filename>linux-2.4.21-ipvs-1.0.11.patch.gz</filename>
peut être utilisé.
A moins que vous ayez une excellente raison pour utiliser un kernel plus ancien, 
utilisez les versions 2.4.23 ou suivantes avec LVS inclus.
			</para>
		</blockquote>
		</section>
		<section id="user_level_interface">
		<title>ipvsadm: L'interface utilisateur pour ip_vs</title>
		<para>
Vous pouvez controler et configurer le code du kernel grâce à la commande <command>ipvsadm</command>
		</para>
		<itemizedlist>
			<listitem>
				<para>
Si vous avez un kernel avec ip_vs pré installé :  
téléchargez <filename>ipvsadm</filename> ici
<ulink url="http://www.linuxvirtualserver.org/software/ipvs.html">
http://www.linuxvirtualserver.org/software/ipvs.html</ulink>.
				</para>
				<para>
				<note>
Veillez à prendre la version de <filename>ipvsadm</filename> correspondant à votre kernel.
Les différentes versions (2.2.x, 2.4.x, 2.6.x) nécessite différentes 
versions de <filename>ipvsadm</filename>. 
Mais attention les numéros de version de <filename>ipvsadm</filename> ne correspondent pas aux kernel.
Vous ne pouvez pas deviner le kernel concerné grâce au numéro de version. 
(<emphasis>e.g.</emphasis> <filename>ipvsadm-1.24.tar.gz</filename> 
correspond aux kernels 2.6, alors que 
<filename>ipvsadm-1.21.tar.gz</filename> 
correspond aux kernels 2.4). 
Si vous venez de récupérer la dernière version de <filename>ipvsadm</filename> (Jan 2004 est v1.24), 
elle ne marchera pas avec les kernels 2.4 ). 
				</note>
				</para>
			</listitem>
			<listitem>
				<para>
Si vous utilisez un patch ip_vs pour votre kernel:
<filename>ipvsadm</filename> sera inclus dans le patch.
				</para>
				<note>
Compilez <filename>ipvsadm</filename> après que vous ayez compilé le kernel
et bootez sur votre nouveau kernel avec ip_vs, pour que <filename>ipvsadm</filename>
soit compilé avec la version correcte des fichiers header du kernel.
Vous devrez donc vous souvenir qu'après avoir lancé votre nouveau kernel 
il vous reste encore une étape de compilation et d'installation de
<filename>ipvsadm</filename>.

				</note>
			</listitem>
		</itemizedlist>	
		</section>
		<section id="upgrading">
		<title>Mise à jour de LVS</title>
		<para>
Le seul moyen est de compiler un nouveau kernel, redémarrer, 
et ensuite de compiler et d'installer le patch ipvsadm correspondant, 
comme si vous reprenniez tout depuis le début.
Vous ne pouvez pas mettre à jour en fonctionnement, vous devez arréter le directeur.
		</para>
		<para>J'utilise le script <command>rc.system_map</command> 
(qui vient avec le script
<link linkend="configure_script">configure_script</link>)
pour être sûr que j'ai les bonnes versions de ipvsadm, du kernel et des fichiers System.map 
qui fonctionnent ensemble, quand je teste plusieurs versions de LVS
(<emphasis>e.g.</emphasis> une version 2.2 et 2.4).
		</para>
		<para>
Horms 01 Fev 2005
		</para>
		<para>
LVS fait partie du kernel. Vous pouvez les compiler en tant que module ou alors à 
l'intérieur du kernel lui même. Pour le premier vous pouvez changer 
les modules n'importe quand, bien que LVS sera redémarrer et que toutes 
les connections en cours seront perdues - ceci peut etre évité en le synchronisant 
à un directeur Linux de backup. Toutefois, si vous avez besoin de mettre à jour
d'autres parties du kernel, qui sont plus commune que LVS, 
vous avez alors besoin de rebooter. 
Cela inclus aussi la situation où la mise à jour de LVS 
réside dans un changement autre part dans le kernel.
		</para>
		</section>
		<section id="cvs">
		<title>LVS en CVS</title>
		<para>
Le respository CVS de IPVS est disponible ici
		</para>
<programlisting><![CDATA[
cvs -d :pserver:anonymous@cvs.linuxvirtualserver.org:/home/lvscvsroot login
(type anything for the password of user anonymous)
cvs -d :pserver:anonymous@cvs.linuxvirtualserver.org:/home/lvscvsroot co ipvs
]]></programlisting>
		</section>
	</section>
	<section id="arp_problem">
	<title>Realserver OS avec la méthode de forwarding</title>
	<para>	
        Les serveurs réels peuvent avoir à peu n'importe quel OS. 
        Ils sont listés ici par la méthode de forwarding.
	</para>
	<itemizedlist>
		<listitem>
LVS-NAT - n'importe quel OS. Puisque juste une adresse IP est nécessaire tout 
ce qui gère l'encapsulation IP marche. Vous pouvez utiliser une imprimante réseau comme serveur réel.
		</listitem>
		<listitem>	
LVS-DR - la plupart des OS (Ils peuvent peuvent tous échouer).
		</listitem>
		<listitem>
LVS-Tun - seulement des Linux. L'outil tunl0 est nécessaire pour désencapsuler 
les paquets ipip (mis en marche dans la configuration du kernel
sous &quot;Network options&quot;). 
Windows avait mis en place pendant peu de temps le tunneling sur leur 
dernières versions, mais l'ont finalemnent abandonné.
		</listitem>
	</itemizedlist>
	<para>
Le problème des serveurs réels est de traiter le problème arp pour LVS-DR et LVS-Tun.
Le problème se pose car toutes les machines (directeur, serveurs réels) ont la VIP 
et que seul le directeur peut répondre aux requètes pour l'adresse MAC de la VIP, si le 
LVS est en marche.
Ratz a rassemblé les instructions pour la configuration des 
<link linkend="other_unices">serveurs réels qui n'utilisent pas des OS Linux</link>.
Tous les modules standard respectent les flags <filename>-noarp</filename> 
pour <command>ifconfig</command>,
par conséquent traiter le problème arp est trivial. Pour Linux vous devez appliquer
les logiciels au kernel des serveurs réels, ou utiliser des astuces de routage (méthode Lars).
	</para>
	</section>
	<section id="do_I_need_to_handle_the_arp_problem">
        <title>Serveur réel : Ai-je besoin de traiter le problème arp ?</title>
	<itemizedlist>
		<listitem>
LVS-NAT: pas de problème arp (les serveurs réels n'ont pas de VIP) 
		</listitem>
		<listitem>
Pour les serveurs réels avec LVS-DR (et supposément LVS-Tun),
vous aurez besoin de traiter le problème arp.
		</listitem>
	</itemizedlist>
	<para>
La théorie pour les problèmes arp peut etre sautée à la première lecture.
Finalement, vous aurez besoin de comprendre cela pour mettre en place votre 
configuration de LVS. 
En voila un résumé:
	</para>
<programlisting>
<![CDATA[
IF   (
        (vous utilisez LVS-DR ou LVS-Tun sur le directeur)
        AND
        (vous faite tournez un kernel Linux 2.2.x, 2.4.x, 2.6.x sur un serveur réel)
        AND
        (
                le VIP sur le serveur réel est sur dispositif ethernet eg lo:0, tunl0:0
                i.e. les paquets vers le VIP ne sont pas acceptés par le proxi transparent
        )
        AND
        (
                les serveurs réels peuvent répondre à des requètes arp de la part du 
                client/router (les serveurs réels sont sur le même 
                cable|réseau|segment que le directeur)
        )
     )
THEN
     {
     VOUS DEVEZ TRAITER LE PROBLEME ARP
     }
FI
]]>
</programlisting>
	<para>
En général vous aurez à gérer le problème arp.
	</para>
	</section>
	<section id="arp_problem_by_kernel_version">
        <title>Serveur Réel: problème arp par version de kernel Linux</title>
	<itemizedlist>
		<listitem>
<emphasis role="bold">2.0.x</emphasis>:
respecte le flag <filename>-noarp</filename> pour la commande <command>ifconfig</command>.
Aucun patch kernel nécessaire.
Utilisez l'option NOARP dans ifconfig pour installer le VIP sur lo:0 
(comme pour les unices)
		</listitem>
		<listitem>
			<para>
<emphasis role="bold">2.2.x</emphasis>: 
ne respecte pas le flag <filename>-noarp</filename>.
			</para>
			<para>
Le patch <filename>hidden</filename> de Julian est présent dans les kernels 
standard pour les versions 2.2.x (où x&gt;=12). 
Aucun patch kernel n'est nécessaire.
			</para>
			<para>
Le matériel est caché pour les appel arp 
en modifiant le fichier système <filename>/proc</filename>. 
Cela donne le même résultat que la configuration du matériel avec l'option <filename>-noarp</filename>.
			</para>
		</listitem>
		<listitem>
			<para>
<emphasis role="bold">2.4.x</emphasis>: ne respecte pas le flag 
<filename>-noarp</filename>.
			</para>
			<para>
Il n'y a <emphasis role="bold">aucun</emphasis> patches dans le kernel pour traiter le problème arp.
			</para>
			<para>
Vous pouvez corriger le kernel avec le patch hidden de Julian 
ou charger le module <filename>noarp</filename> de Maurizio. 
Pour les versions 2.4.26 et suivantes, Julian a un autre patch (voir 2.6.x).
			</para>
		</listitem>
		<listitem>
			<para>
<emphasis role="bold">2.6.x</emphasis>: ne respecte pas le flag <filename>-noarp</filename>.
			</para>
            <para>
Il n'y a <emphasis role="bold">aucun</emphasis> patches dans le kernel pour traiter le problème arp.
			</para>
			<para>
Pour les versions 2.6.x Julian a de nouveaux codes
			</para>
			<para>
Julian Anastasov <emphasis>ja (at) ssi (dot) bg</emphasis> 25 Fev 2004
			</para>
			<blockquote>
2.4.26pre et 2.6.4pre
sortiront avec 2 nouveaux outils flag pour modifier l'encapsulation arp :
<filename>arp_announce</filename> et <filename>arp_ignore</filename>. 
Tous les IPVS comme les setups peuvent utilisés
arp_announce=2 et arp_ignore=1/2/3 pour résoudre le problème arp avec les setups DR/TUN. 
Ces flags vont alors remplacer les fonctionnalitées "cacher" 
qui ne marche pas très bien pour les directeurs quand ils changent 
de rôle entre master/slave dans une VIP.

Le risque est que d'autres hôtes peuvent sonder les VIP 
qui utilisent des paquets unicast auxquels le flag hidden 
répond toujours. Je vais continuer à soutenir le hidden 
flag pour les versions 2.4 et 2.6 pour aider 
les installations existantes mais les remplacer par les 
outils flag (ou autre solution) est recommandé.
			</blockquote>
		</listitem>
	</itemizedlist>
	</section>
	<section id="method_arp_problem">
	<title>Serveur Réel: Méthodes pour traiter le problème arp</title>
	<para>
Toutes les méthodes pour traiter le problème arp, ont toutes en gros la même performance
(transfert, latence) et ont à peu près la même difficulté/facilité à installer.
	</para>
	<para>
        La méthode utiliisé courament pour traiter le problème arp est
	</para>
	<itemizedlist>
		<listitem>
			<para>
le patch hidden de Julian
disponible ici
<ulink url="http://www.ssi.bg/~ja/">
Julian's patches and software page</ulink>.
Il arrète les réponses du matériel aux requètes (<emphasis>e.g.</emphasis>
lo, où toutes les IP sur le matériel sont cachées).
Ceci est la plus vieille méthode utilisée et donc est la plus 
familière pour les personnes qui utilisent LVS depuis quelques temps.
			</para>
			<para>
En fin 2001, à la fois le hidden patch et le patch ipvs 
peuvent être appliqués simultanément au kernel,
ce qui vous permet d'utiliser le même kernel pour 
le directeur ainsi que pour les serveurs réels.
La partie du kernel modifié par le patch ne change pas beaucoup entre les versions
du kernel, donc le patch hidden pour les versions 2.4.5 marche 
toujours pour les versions 2.4.19pre4.
			</para>
			<para>
La commande pour le pacth est
			</para>
<programlisting>
<![CDATA[
realserver:/usr/src/linux# patch -p1 <../arch/hidden-2.4.4-1.diff
]]>
</programlisting>
		</listitem>
		<listitem>
<ulink url="http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS-HOWTO.arp_problem.html#sartori">
Le module noarp de Maurizio Sartori</ulink>.
(http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS-HOWTO.arp_problem.html#sartori)
<filename>noarp</filename> module. 
Vous n'avez pas besoin de patcher le kernel, 
il suffit de charger le module. 
Le module de Maurizio agit sur les adresses IP, 
et non pas sur le matériel donc vous pouvez faire le <filename>noarp</filename> VIP,
en laissant les autres IP sur le même matériel répondrent aux requètes arp.
C'est pour le moment (Fev 2004) disponible pour les kernels 2.4.x, 
une version pour les 2.6.x est attendu sous peu.
		</listitem>
		<listitem>
<ulink url="http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS-HOWTO.arp_problem.html#arp_filtering">
Filtrage arp par Julian</ulink>.
(http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS-HOWTO.arp_problem.html#arp_filtering)
Julian a ajouté les extensions arp aux règles de filtrage des tables ip. 
Il semble que ce soit le moyen le plus simple pour traiter le problème,
sauf que les gens hésitent à écrire les règles des tables IP. 
Il semble que personne n'utilise cette méthode.
		</listitem>
		<listitem>
Combine de routage<emphasis>e.g.</emphasis>
<ulink url="http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS-HOWTO.LVS-DR.html#Lars_method">
    Lar's method</ulink>.
		</listitem>
		<listitem>
			<para>
Pour des kernels plus ancien (2.0.x et jusqu'à  2.2.x ),
une autre méthode simple est de mettre une carte réseau supplémentaire 
à l'intérieur des serveurs réels pour la VIP et ne pas la connecter au réseau.
La carte ne gére aucun paquets, c'est juste un moyen de mettre la VIP sur les serveurs réels.
La carte peut être une vieille carte ISA 10Mbps.
Le prix d'une carte PCI 100Mbps tulip maintenant est moins chère 
que le salaire que vous seriez payé pour le temps de recompiler un kernel avec le patch hidden.
(Note, 2002: - cela ne marche pas avec les kernels 2.4.x).
			</para>
			<para>
Il y a eu des réponses (de la part de Ratz et Julian) doutant du fonctionnement de cette méthode.
Enfin, les résultats des tests sont ici 
<ulink url="http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS-HOWTO.arp_problem.html#vip_devices">
    HOWTO: the arp problem</ulink>
(http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS-HOWTO.arp_problem.html#vip_devices)
si vous voulez en savoir plus.
Cette propriété est surement discutable maintenant, puisque plus personne n'utilise ces kernels.
			</para>
		</listitem>
	</itemizedlist>
	</section>
	<section id="255_4">
	<title>Pourquoi le netmask est à /32 pour le VIP avec LVS-DR?</title>
	<para>
Horms 29 Oct 2003
	</para>
	<para>
Si vous utilisez le LVS-DR les paquets qui arrivent sur les 
serveurs réels portent l'adresse IP de destination de la VIP. 
Il faut donc quelque chose pour que les serveurs réels 
considèrent ce traffic comme étant local. 
Une façon de faire est d'ajouter une interface sur l'adresse locale 
et de la cacher pour qu'elle ne réponde pas aux requètes arp. 
	</para>
	<para>
Le netmask doit être 255.255.255.255 car l'adresse locale répondra aux paquets 
pour tous les hôtes sur chaque interface configurées.
Donc l'adresse 192.168.1.110 avec un netmask de 255.255.255.0
amènera la machine à accepter des paquets pour toutes les adresses entre 
 192.168.1.0 et 192.168.1.255,
ce qui n'est a priori pas ce que vous voulez.
	</para>
	<para>
Josef Pospisil Juil 15, 2005
	</para>
	<blockquote>
        Pourquoi le VIP sur les serveurs réels doit être sur l'interface lo et non pas 
        comme le directeur par exemple sur eth0:05 ?
	</blockquote>
	<para>
Horms
	</para>
	<para>
Vous pouvez le faire si vous préférez, toutefois soyez prudent 
sur le fait que les serveurs réels ne font pas de pub pour le VIP. 
Si vous utilisez lo, cela peut être facilement fait en utilisant arp_ignore
et arp_announce. Si vous utilisez eth0, alors la solution des tables arp
sera le façon de faire.
	</para>
	</section>
	<section id="forwarding">
	<title>Choisir le type de Forwarding : LVS-NAT, LVS-DR et LVS-Tun</title>
	<para>
Les serveurs réels doivent être corectement configurés selon la méthode de forwarding.
Pour cela vous devez
	</para>
	<itemizedlist>
		<listitem>
		<para>
Gérer le problème arp.
		</para>
		<para>
Pour plus d'information
<ulink url="http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS-HOWTO.arp_problem.html">
problème arp</ulink>.
		</para>
		</listitem>
		<listitem>
Régler la passerelle par défaut.
		<itemizedlist>
			<listitem>
LVS-NAT: la DIP
			</listitem>
			<listitem>
				<para>
LVS-DR, LVS-Tun: un router (n'importe sauf le directeur).
				</para>
				<para>
Si vou utilisez ceci
<ulink url="http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS-HOWTO.LVS-DR.html#LVS-DR_director_default_gw">
Julian's martian modification</ulink>
(http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS-HOWTO.LVS-DR.html#LVS-DR_director_default_gw)
, vous pouvez router les paquets en repassant par un directeur LVS-DR.
Mais vous ne voulez pas faire çà pour votre premier LVS.
				</para>
			</listitem>
		</itemizedlist>
		</listitem>
	</itemizedlist>
	<para>
Les exemples en dessous vous montrerons comment installer un 
LVS-NAT et LVS-DR sur un directeur avec une carte réseau.
	</para>
	<para>
Si vous voulez juste vous prouver que vous savez installer un LVS,
alors LVS-NAT a l'avantage que n'importe quel OS peut être utililsé 
pour les serveurs réels et qu'aucune modifications n'est nécessaire 
sur le kernel des serveurs réels.
	</para>

	<para>
Si vous avez une machine Linux avec un kernel 2.0.x, alors il 
peut être utilsé comme serveur réel pour un LVS de n'importe 
quel mode sans modifications.
	</para>

	<para>
Parce que LVS-NAT a été le premier mode de LVS développé, 
il a été le premier utilisé par les personnes mettant en place un LVS.
Pour les kernels 2.2.x, LVS-NAT est beaucoup plus gourmant en ressource 
processeur que le LVS-DR (LVS-NAT nécessite la réecriture des paquets).
Pour les kernels 2.4.x LVS-NAT donne de meilleurs performances et se rapproche de LVS-DR.
Quoi qu'il en soit pour un test simple, LVS-NAT 
ne nécessite que le patch d'une 
machine (le directeur) et une machine non modifiée avec 
n'importe quel OS comme serveur réel.
	</para>

	<para>
Pour les serveurs de production LVS-DR est le meilleur choix.
Après un simple test, à moins que vous ayez besoin des particularitées 
de LVS-NAT (possibilité d'utiliser les serveurs réels qui fournissent 
des services pas disponibles sur des machines Linux, 
remapping de port, les serveurs réels avec les couches tcpip primitive, 
imprimantes, services qui initient les requètes de connection),
alors il serait mieux d'utiliser LVS-DR.
	</para>

	<para>
Voici les contraintes de choix des différents LVS: 
LVS-NAT (network address translation), LVS-Tun (tunnelling)
et LVS-DR (direct routing).
	</para>

<programlisting> <![CDATA[
                       LVS-NAT      LVS-Tun            LVS-DR

realserver OS          any          must tunnel        most
realserver mods        none         tunl must not arp  lo must not arp
port remapping         yes          no                 no
realserver network     private      on internet        local
                       (remote  or  local)             -
realserver number      low          high               high
client connnects to    VIP          VIP                VIP
realserver default gw  director     own router         own router
]]> </programlisting>

	<para>
        Jusqu'à ce que vous sachiez quel méthode de réexpédition utiliser, choisisser dans cet ordre.
    </para>

	<itemizedlist>
		<listitem>
VS-DR par défaut, a une haute production, peu être installé sur la 
plupart des OS. Les serveurs réels doivent être sur le même réseau 
que le directeur. (les serveurs réels et les directeur peuvent se joindre en arp).
		</listitem>
		<listitem>
            VS-NAT, production moindre, plus haute latence. Les serveurs ont juste besoin des 
            couches tcpip (i.e n'importe quel OS, même une imprimante réseau).
Fonctionne avec plusieurs instance de services 
(<emphasis>i.e.</emphasis> plusieurs exemplaire d'un demon sur différent ports).

		</listitem>
		<listitem>VS-Tun, serveur réels sous Linux seulement. Même production que LVS-DR.
Nécessaire si les serveurs sont sur un autre réseau que le directeur (eg à un autre endroit).
		</listitem>
	</itemizedlist>

	</section>

	<section id="multiple_forwarding_methods">
	<title>plusieurs méthode de réexpédition</title>

	<para>
Bien que se ne soit pas fait souvent, vous pouvez installer un directeur
pour réexpédier avec plusieurs méthodes en même temps. Par conséquent,
vous pouvez avoir telnet redirigé par LVS-NAT vers un groupe de serveurs 
réels, et http redirigé par LVS-DR vers un autre groupe de serveurs réels (même
superposé).
	</para>
	</section>

	<section id="configure_tools">
        <title>Scripts et outils de configuration</title>
	<para>
Il y a quelques outils pour vous aider à configurer un LVS.
	</para>
	<para>
	<itemizedlist>
		<listitem>
Joe a écrit un <link linkend="configure_script">script de configuration</link>
pour tous les types, qui fait beaucoup de vérification de santé sur 
l'installation mais qui ne prend pas en charge la chute du directeur
(dans le cas d'un directeur simple).
Le script de configuration installera la commande <command>mon</command>
pour prendre en charge l'échec de service sur les serveurs réels.
		</listitem>
		<listitem>
			<para>
Des outils qui incluent la chute du directeur,
<emphasis>e.g.</emphasis>
<ulink url="http://www.ultramonkey.org/">Ultra Monkey</ulink>.
par Horms, qui supporte la chute du directeur, mais doit etre configuré à la main.
En avril, Horms a sorti 
<ulink url="http://www.ultramonkey.org/download/3">UltraMonkey v3</ulink>
(http://www.ultramonkey.org/download/3)
			</para>
			<itemizedlist>
				<listitem>
Connection Syncronisation (synchronisation de connections) permet 
aux connections de continuer même si le directeur actif tombe est amené en ligne.
				</listitem>
				<listitem>
Test de santé des serveurs MySQL natif (utilisant ldirectord).
				</listitem>
				<listitem>
Prise en charge amélioré des paquets arp.
				</listitem>
				<listitem>
Des kernels modifiés ne sont plus nécessaire (les patches LVS 
sont déjà dans la distribution standard des kernels et Horms n'a plus 
besoin de les distribuer les siens).
                </listitem>
			</itemizedlist>
		<para>
Selon des enquètes, UltrMonkey est la méthode la plus fréquement 
utilisée pour mettre en place un LVS.
        </para>
		</listitem>
		<listitem>
vrrpd/keepalived par Alexandre Cassen,
qui installe tout pour vous et est disponible ici
<ulink url="http://keepalived.sourceforge.net">keepalived</ulink> .
Il supporte les échecs du directeur et des serveurs réels.
		</listitem>
		<listitem>
Sylvain Maugiron <emphasis>sm (at) edatis (dot) net</emphasis> 05 Fev 2003,
a édité
<ulink url="http://ipvsadmin.virtux.org">cgi interface</ulink>.
		</listitem>
		<listitem>
Malcolm Turnbull <emphasis>malcolm (dot) turnbull (at) crocus (dot) co (dot) uk </emphasis>
28 Jan 2003, a écrit une
<ulink url="http://www.loadbalancer.org/">interface web php pour lvs/ldirectord</ulink>
		</listitem>
		<listitem>
Per Andreas Buer <emphasis>perbu (at) linpro (dot) no</emphasis> 27 Jan 2003
a écrit demon CLI-controlled LVS 
<ulink url="http://www.linpro.no/projects/lvs-kiss/">lvs-kiss</ulink>
qui utilise <command>ipvsadm</command> pour le balencement de charge et les échecs.
		</listitem>
		<listitem>Horms a écrit
<ulink url="http://www.vergenet.net/linux/lvs-gui/">lvs-gui</ulink>.
Cela vient des début de LVS, il installe juste un LVS-DR, il n'est plus 
maintenu à jour et ne doit pas être utilisé pour un travail aujourd'hui.
		</listitem>
		<listitem>
		<para>
Sylvain Maugiron <emphasis>sm (at) edatis (dot) net</emphasis> 27 Jan 2003
		</para>
		<para>
L'interface <command>ipvsadm</command> est disponible ici
<ulink url="http://ipvsadmin.virtux.org">Virtux</ulink>
J'essairai de développer cette interface.
		</para>
		</listitem>
	</itemizedlist>
	</para>
    <para>Malheureusement plusieurs de ces scripts créent des fichiers avec le nom
        <filename>rc.lvs</filename>
(seulement pour rendre les choses plus interressante en lisant la mailing list).
	</para>

    <para>Une enquète sur les LVS en production
(par Lorn Kay <emphasis>lorn_kay (at) hotmail (dot) com</emphasis>, résultats ici
<ulink url="http://www.linuxvirtualserver.org/survey/survey_200101.html">
LVS website</ulink>) a montré que 10 sur 19 ont été installés par 
des méthodes autres, i.e n'ont utilisé aucun des scripts du site LVS. 
Apparement les scripts ci dessus ne sont pas considéré par nos utilisateurs
comme ayant la qualité nécessaire à la production.
	</para>
		<section id="configure_script">
		<title>Script de configuration</title>
		<para>
Vous pouvez installer LVS à la main avec ipvsadm. Celà est néanmoins fastidieux 
et est enclain aux erreurs. Bien que ce soit faisable pour une 
configuration simple de LVS, mais ce n'est pas la bonne solution 
pour installer plusieurs configurations différentes de LVS.
		</para>
		<para>
Le script de configuration est fait pour rapidement installer un LVS avec 
un service d'echec. Ecrit en perl, il écrit un script shell, 
que vous lancez sur toutes les machines
(il se rend compte s'il est sur un directeur ou un serveur réel).
Cela signifie que vous n'avez pas besoin que perl tourne sur vos serveurs réels.
La version en court (0.9.x) réalise un bon nombre de vérification,
récupérant toutes les erreurs ou pathologies que j'ai pu trouver 
ces 2 dernières années.
Des vérifications élementaires sont faites sur le routage et la connectivité 
et le script a toujours généré un LVS qui fonctionne quand aucune erreur n'est renvoyée.
        </para>
		<para>
Le script de configuration est lancé de la console du directeur 
(ou sur le directeur d'une connexion d'un réseau RIP ou alors d'une carte réseau 
d'administration pas utilisée pas LVS). 
Les connections tcpip connections passant par la carte réseau en façade seront coupées. 
		</para>
		<para>
Le script de configuration est sur le 
<ulink url="http://www.linuxvirtualserver.org/software/index.html#configure_script">
site de logiciel LVS</ulink> (en bas de la page).
Cela met en place un directeur simple et ne peut gérer l'échec du directeur.
Pour les systèmes en production vous préfèrerez sûrement des outils qui gèrent les
<ulink url="http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS-HOWTO.failover.html">
échecs du directeur</ulink>.
		</para>
		<note>
		<para>
Le script de configuration teste et utilise les liens entre toutes les machines -
le réseau doit être en fonctionnement.
Vous devriez être capable de pinger toutes les machines du même réseau.
Vous aurez besoin de carte réseau configuré avec RIP, SIP et PIP(pour les versions 
après 0.10.x) ou DIP (pour les versions 0.9.x et précédentes).
		</para>
		<para>
Je n'est jamais publié la version v0.10.x.
		</para>
		</note>
		<para>
Le script de configuration lit un fichier conf et installe un lVS-DR, NAT, Tun 
avec des machines simple ou multi cartes réseaux en utilisant le matériel ethernet 
normal ou un proxi transparent pour accepter les paquets.
Le résultat est deux fichiers bien commentés <filename>rc.lvs</filename> et <filename>rc.mon</filename>
qui doivent être lancé au démarrage (ou quand vous installez un LVS).
		</para>
		<para>
Le script de configuration détecte la version du kernel du directeur 
(pour les vieilles versions de ipvs/kernels) et est lancé sur le directeur
pour générer le fichier <filename>rc.lvs</filename>.
Le fichier <filename>rc.lvs</filename> est ensuite lancé sur le directeur 
puis sur les serveurs réels. Cela permet au script <filename>rc.lvs</filename> 
de vérifier les connections du directeur maintenant configuré.
		</para>
		<para>
J'exporte par nfs les fichiers/dossiers vers les serveurs réels.
Après avoir lancé le script <filename>rc.lvs</filename> sur le directeur, 
je peut lancer le même script sur les serveurs réels.
(Après l'installation, les connections réseaux nécessaire 
pour l'exportation peuvent être enlevées.)
En alternant, le script de configuration copie et execute le fichier <filename>rc.lvs</filename> 
sur les serveurs réels en utilisant <command>ssh</command>,
avec l'option "-i" 
(pour vérifier que cela fonctionne lancez <command>`ssh realserver_name_or_IP hostname`</command> -
vous devriez récupérer le nom d'hôte du serveur réel).
Le fichier <filename>rc.lvs</filename> sait s'il tourne sur un directeur 
ou un serveur réel en regardant l'IP de la machine sur laquelle il tourne et en 
la comparant avec les IP du fichier conf.
		</para>
		<para>
Le script <filename>rc.lvs</filename> est verbeux et fait des rapports sur son évolution.
Le script est idempotent
<emphasis>i.e.</emphasis>-
vous pouvez lancer le script autant de fois que vous voulez sur une même machine.
Vous pouvez copier le fichier <filename>rc.lvs</filename> du directeur 
sur les serveurs réels pour les lancer.
J'ai mis le fichier conf sur le directeur dans le dossier (vous pouvez le mettre n'importe où)
qui est exporté dans le même dossier sur les serveurs réels.
De la même façon le script <filename>rc.lvs</filename> sur le directeur 
peut être lancé par les serveurs réels.
Dans un système production, vous pouvez démonter les dossiers 
sur les serveurs réels après l'installation.
En alternant, si vous lancez la configuration avec le "-i" (flag d'installation), 
le script de configuration va utiliser ssh pour copier les fichiers 
en sortie sur les serveurs réels et les éxécuter.
		</para>
		<para>
Le script de configuration a été testé avec des kernels 2.2 et 2.4
Il renvoie un avertissement s'il rencontre un kernel plus jeune que ceux qu'il connait.
Ces avertissement peuvent en fait être ignorés car ipvs n'est pas 
supposé changer de méthode de configuration. 
		</para>
		<para>
Le fichier conf et le script de configuration peuvent utiliser soit les IP ou les noms d'hôtes
(de <filename>/etc/hosts</filename>)
et peuvent utiliser soit les numéros de ports (eg 23) ou de service (telnet) 
(de <filename>/etc/services</filename>).
Il est probable que des modifications de votre <filename>/etc/services</filename> soit nécessaire.
		</para>
<programlisting>
<![CDATA[
ftp-data        20/tcp
ssh             22/tcp
domain          53/tcp  nameserver      dns #the string "dns" needs to be added here
domain          53/ucp  nameserver      dns #and here
shell           514/tcp cmd             rsh #add rsh here
https           443/tcp
https           443/udp
printer         515/tcp spooler         lpd #add the string "lpd" here
nfs             2049/udp        nfs
mysql           3306/tcp
mysql           3306/udp
netpipe         5002/tcp
]]>
</programlisting>
		<para>
Dans plusieurs instances, une machine aura besoin de plusieurs IP. Vous pouvez
mettre plusieurs IP sur une carte réseau avec l'aliasing d'IP (une option
à la construction du kernel) - entrez seulement l'interface aliased (eg
eth0:12) pour cette IP dans le fichier *.conf. (Note: Les versions du script 
de configuration depuis 0.10.x seront déplacé vers les outils iproute2 
et n'utiliseront pas les aliases. `ifconfig` et
`netstat -rn` ne fonctionneront pas pour l'installation du réseau avec les outils 
iproute2 - Vous devrez utiliser uniquement les outils iproute2).
		</para>
		<para>
La documentation du script de configuration est au format perldoc.
		</para>
<programlisting>
<![CDATA[
director:/etc/lvs:$ perldoc configure.pl
]]>
</programlisting>
		</section>
		<section id="configure_2.6">
		<title>Le script de configuration a besion d'aide pour les kernels 2.6.x</title>
		<para>
tito <emphasis>extlists (dot) e-inventa (dot) net</emphasis> 26 Mai 2004
		</para>
		<para>
J'ai résolu le problème du script n'étant pas compatible avec les versions 2.6
en changeant seulement le script rc.lvs_dr généré par configure-lvs, 
en cachant la version de mon kernel mais aussi en modifiant 
la fonction check_function_in_kernel().
Le problème avec cette fonction était qu'elle compare le résultat en cherchant 
avec grep -c dans System.map
pour son module ip_vs_init, avec 1, et dans mon kernel il y a deux références 
à ip_vs_init (ip_vs_init et ip_vs_init_hash_table)
		</para>
		</section>
		<section id="install">
		<title>Installer le script de configuration</title>
		<para>
Le script est en perl et requière les modules perl, pas nécessaire dans la démonstration.
Toutefois, le script ne se lancera pas sans eux,
donc vérifiez que vous avez les modules requis en lanceant :
		</para>

<programlisting>
<![CDATA[
$perl -w configure.pl
]]>
</programlisting>

		<para>
S'il vous manque un module perl (<emphasis>e.g.</emphasis> DNS.pm) vous aurez un message d'erreur
comme
		</para>

<programlisting>
<![CDATA[
director:/etc/lvs# ./configure lvs_dr.conf.IP.two_NIC_two_network -i
Can't locate Net/DNS.pm in @INC (@INC contains: /usr/local/lib/perl5/5.6.0/i586-linux
/usr/local/lib/perl5/5.6.0 /usr/local/lib/perl5/site_perl/5.6.0/i586-linux
/usr/local/lib/perl5/site_perl/5.6.0 /usr/local/lib/perl5/site_perl .) at ./configure line 1365.
BEGIN failed--compilation aborted at ./configure line 1365.]]>
</programlisting>

		<para>
Récupérez les modules supplémentaires ici 
<ulink url="http://www.perl.com">perl website</ulink>
ou téléchargez avec le module perl cpan, ce que vous pouvez faire avec
        </para>

<programlisting>
<![CDATA[
director:# cpan
or
director:# perl -MCPAN -e "shell"
]]>
</programlisting>


		<para>
Vous aurez la ligne de commande cpan. Vous pouvez obtenir l'aide en tapant 
"help". Pour bien utiliser cpan,
essayez la commande `r`, qui listera les plus récentes mise à jour 
pour les modules que vous avez installé.
Vous devriez pouvoir installer <filename>Net::DNS</filename> avec la commande
		</para>

<programlisting>
<![CDATA[
cpan> install Net::DNS
]]>
</programlisting>

		<para>
Si votre mise à jour a besoin d'autre fichier, vous serez demandé de les télécharger.
		</para>

		<para>
Le script <filename>rc.lvs</filename> utilise le fichier<filename>fping</filename>
pour tester les connections.
<filename>fping</filename> est disponible ici
		</para>

		<para>ftp://ftp.kernel.org/pub/software/admin/mon</para>

		<para>
Les nouvelles versions de ping ont la fonctionnalités de fping
et ce script de configuration teste cette fonctionnalité.
Pour les anciennes configuration, si vous ne voulez pas télécharger 
fping, vous pouvez utiliser ce script au lieu de fping (mettez 
le dans /usr/local/bin et rendez le excécutable).
		</para>

<programlisting>
<![CDATA[
#!/bin/sh
#fping replacement

ping -c 1 $1
#-----fping-------------
]]>
</programlisting>

		</section>
		<section id="running">
            <title>Lancer le script de configuration</title>
		<para>
Choisissez un fichier template conf approprié (lvs_nat.conf,
lvs_tun.conf ou lvs_dr.conf) pour le mode que vous lancez le LVS
(VS-NAT, LVS-Tun ou LVS-DR respectivement) et modifiez les IPs et les 
services correspondant à votre situation.
Il y a des fichiers de configuration d'exemple pour les différents types 
de redirection, nombre de réseaux et de carte réseaux.
Le format du fichier conf est le même pour toutes les installations de LVS, 
seul les adresses IP/réseaux changent quand vous changez entre 
les directeurs avec une ou deux cartes réseaux.
Plusieurs exemples de fichier conf sont fournis mais 
la seul chose qui change entre les diagrammes est le 
diagramme réseau (et la cible de la passerelle par défaut),
mais pas le format des directives des fichiers conf.
Les fichiers sont préconfigurés 
avec comme servive telnet.
C'est le service le plus simple pour les testes initiaux :
le client est directement disponible et connecté, la ligne de connexion 
vous dira sur quel serveur vous ètes connecté.
Utilisez un progamme tournant pour vérifier qu'ils fonctionnent tous.
        </para>
        <para>
D'autres services peuvent être ajouté en décommentant/ajoutant ou modifiant
les entrées dans les fichiers *.conf d'exemple. Les fichiers *.conf 
donnent des suggestions d'IPs pour les différetes machines (192.168.1.x/24, 10.1.1.x/24).
		</para>

		<para>Lancé le script de configuration</para>

<programlisting>
<![CDATA[
$ ./configure.pl lvs_nat.conf
]]>
</programlisting>

		<para>
Celà génère un script rc.lvs_xxx (eg rc.lvs_nat, rc.lvs_tun,
rc.lvs_dr), et un script mon_xxx.cf. (Après testes mettez rc.lvs_xxx dans
/etc/rc.d ou /etc/init.d et mettez mon_xxx.cf dans /etc/mon)
		</para>

		<para>
Lancez le script <filename>rc.lvs</filename> sur le directeur et sur 
les serveurs réels avec la commande
		</para>

<programlisting>
<![CDATA[
$ . ./rc.lvs_dr
]]>
</programlisting>

		<para>
ou alors (si vous avez des erreurs bizarre, eg il ne detecte pas correctement s'il 
tourne sur un directeur ou un serveur réel cela arrive sur serveur réel 2.0.36)
		</para>

		<para>
$sh rc.lvs_dr
		</para>

        <para>Le script <filename>rc.lvs</filename> -</para>

		<itemizedlist>
            <listitem>ajoute objet ethernet et routes au directeur, 
                serveurs réels (même les non Linux)</listitem>
			<listitem>vérifie les connexions avec fping.</listitem>
			<listitem>lance chaineip </listitem>
			<listitem>allume (VS-NAT) ou éteind (VS-DR, LVS-Tun) l'ipforwarding</listitem>
			<listitem>éteind les redirections icmp (VS-NAT)</listitem>
			<listitem>ajoute des services avec ipvsadm.</listitem>
		</itemizedlist>

		<para>Le script <filename>rc.lvs</filename> <emphasis>ne</emphasis> -</para>

		<itemizedlist>
            <listitem>connait pas l'échec du directeur. Il suppose qu'il y a qu'un seul directeur.
            </listitem>
		</itemizedlist>

		<para>
            Vérifiez les sorties de ipvsadm, ifconfig -a et netstat -rn 
            sur le directeur et les serveurs réels, pour voir si les services/IPs
            sont correctes. Si non re modifiez et relancez les scriptes.
		</para>
		</section>

		<section id="test">
		<title>Test avec telnet</title>
		
		<para>
            Telnet est un service non-persistant (dans le sens http, plutôt que dans le sens LVS)
            et va vous permettre de vérifier que tous les serveurs réels
            sont présents (vous aurez la demande de login pour chaque serveur).
		</para>

		<para>
            Vérifiez que les services tournent sur chaque serveur sur l'IP du VIP
            utilisez netstat -an). Certains services (eg telnet écoute
            0.0.0.0, ie toutes les IPs de la machine).
		</para>

		<para>
S'il n'y pas  d'erreurs lors de l'éxécution du script rc.lvs_xxx, alors
faites un telnet du client jusqu'à la VIP (ici 192.168.1.110). Vous serez routé à travers 
le circuit jusqu'à l'un des serveurs réels et vous aurez la demande de login
(et le nom réel) d'un serveur réel.
        </para>
        <para>
Sur le directeur, regardez sur la sortie de ipvsadm, vous devriez voir
une connexion à un serveur réel sur le port:23.
		</para>
			
		<para>Sur le serveur réel faites</para>

		<para>
$ netstat -an | grep 23
		</para>

		<para>et regardez les connexions sur le port telnet.</para>

        <para>
            Délogger vous et faites à nouveau un telnet sur le VIP. Vous arriverez
            alors sur la demande de login du serveur suivant.
		</para>
	
		</section>

		<section id="something_else">
		<title>Un test avec autre chose eg http</title>

		<para>
Modifiez lvs_nat.conf et activez http, relancez configure.pl et relancez
les nouveaux fichiers rc.lvs_nat.
		</para>

		<para>
http:
Faites pointer votre navigateur vers le VIP http://192.168.1.110.  Vous obtiendrez 
le document root d'un des serveurs.
Ouvrez un autre exemplaire du navigateur et connectez vous à nouveau.
Vous devriez avoir l'autre serveur (ce sera plus facile à voir si les pages sont différentes). 
Regardez sur la sortie de ipvsadm sur le directeur, les connections aux ports httpd, et 
sur le serveur regardez, sur la sortie de netstat -an | grep 80 (ou 8080 si vous ètes en LVS-NAT
avec le remappinng de ports), les connections.
		</para>

		<para>
            Si votre httpd est persistant (dans le sens http) il se peut que 
            vous vous connectiez toujours au même site.
		</para>
		</section>

	</section>
	<section id="install_general">
    <title>Installation - General</title>

		<section id="abbreviations">
		<title>Abreviations/conventions pour installation/test/configuration</title>

<programlisting><![CDATA[
client:      client's IP         =CIP
gateway:     gateway/router's IP =DGW (router will be the client in most test setups)
director:    director's IP       =DIP on director   eth0
             virtual IP          =VIP on director   eth0:x (eg eth0:1)
realserver:  realserver IP       =RIP on realserver eth0
             virtual IP          =VIP on realserver eth0:x/lo:0/tunl0/dummy0
             gateway             =SGW
]]></programlisting>

		<note>
		<para>
Les DIP et VIP doivent avoir des IPs différentes (ils peuvent être sur la même carte réseau).
        </para>
		</note>

		<note>
		<para>
Les DIP et VIP seront transférés vers un autre directeur en cas d'échec d'un directeur.
Ces IPs seront mise en place en tant qu'IP secondaire (aliases dans le 
langage des kernels 2.0 et 2.2) pour vous puissiez utiliser l'échec d'un directeur.
Le script de configuration met en place ces IPs pour vous (<emphasis
    >i.e.</emphasis> vous ne devez pas avoir les VIP et DIP comme adresse primaire 
déjà installé sur votre directeur).
		</para>
		</note>


		<para>
Julian Anastasov <emphasis>ja (at) ssi (dot) bg</emphasis> 06 Nov 2001
		</para>
		<blockquote>
		<para>
            Si DIP == VIP les serveurs réels recevront des paquets avec 
            l'adresse = ip_local de la part du directeur. Vous devez
            ajouter un IP(DIP) additionel à votre directeur et quand 
            vous éxécutez ip la route devient x.y.z.230 vous devez vérifier
            que x.y.z.180 n'est pas votre adresse source préférée.
            La façon habituel pour faire celà est de configurer le VIP sur un autre 
            matériel (eg lo) ou de les configurer après que le DIP soit configuré.
            De cette manière DIP sera votre source préféré lors d'échange dans votre
            sous réseau.
		</para>
		<para>
            Ajouter le DIP n'est pas obligatoire pour que l'installation de LVS 
            fonctionne mais vous ne pourrez pas envoyer du traffic non LVS 
            entre le directeur et les serveurs réels (ping dans ce cas).
		</para>
		</blockquote>
		</section>

		<section id="doing">
		<title>Qu'est ce que vous ferez</title>

		<para>
Chris <emphasis>chrisd (at) better-investing (dot) org</emphasis> 15 Avr 2002
		</para>
		<blockquote>

		<orderedlist>
			<listitem> J'ai téléchargé le kernel depuis kernel.org.</listitem>
			<listitem> J'ai téléchargé le patch ipvs (patch simple).</listitem>
			<listitem> J'ai téléchargé le patch "hidden".</listitem>
			<listitem> J'ai décompressé le kernel dans /usr/src.</listitem>
			<listitem> J'ai décompressé le patch "hiddent" dans /root.</listitem>
			<listitem> J'ai décompressé le fichhier simple ipvs.</listitem>
			<listitem> J'ai copié le patch "hidden" vers /usr/src/linux</listitem>
			<listitem> J'ai éxécuté : patch -p1 &lt;hidden-2.4.5-1.diff</listitem>
			<listitem> J'ai copié le patch ipvs vers /usr/src/linux</listitem>
			<listitem> J'ai éxécuté: patch -p1 &lt;linux-2.4.18-ipvs-1.0.2.patch</listitem>
			<listitem> J'ai configuré mon kernel</listitem>
            <listitem> J'ai fait exactement les mêmes étapes que tu as pour le compiler :
<programlisting><![CDATA[
make dep;make clean;make bzImage;make modules;make modules_install
]]></programlisting>
			</listitem>
		</orderedlist>

		<para>J'ai n'ai pas eu le moindre bugs.</para>

		<para>Les choses à vérifier:</para>

		<itemizedlist>
			<listitem>N'appliquez pas les patches plus d'une fois!</listitem>
			<listitem>
Si cela n'a pas marché en suivant les étapes suivantes et que vous avez
RedHat 7.2, vérifiez que vous avez tout les packages gcc installés. 
Si vous le devez, remettez le CD dans le lecteur et faites une 
mise à jour et installez les outils nécessaire.
			</listitem>
			<listitem>
Si ce n'est pas celà vérifiez que votre gcc est à jour.
Une façon facile de le faire est de télécharger red-carpet de Ximian.org.
C'est un outil de mise à jour Xwindows .
Vous n'avez plus besoin de gnome pour le lancer .
			</listitem>
			<listitem>
Si çà ne marche pas, trouvez vous un *vrai* guru, parce que là j'ai plus aucune idée !!
			</listitem>
		</itemizedlist>
		</blockquote>

		</section>
	</section>

	<section id="DIY">
	<title>Le kernel du directeur - le construire soi-même</title>
	<para>
(avec les suggestions de la part de John Cronin
<emphasis>jsc3 (at) havoc (dot) gtf (dot) org</emphasis>)
	</para>
	<note>
Ceci est la méthode préférée.
Récupérez un kernell tout neuf ici<ulink url="ftp://ftp.kernel.org/pub/linux/kernel">ftp.kernel.org</ulink>
et le <filename>ip_vs</filename> correspondant 
depuis le site LVS (sur la page software).
	</note>
	<note>
	<para>
Vous pouvez soit construire le code de ipvs dans le kernel soit en tant 
que module chargeable, suivant les deux versions de <filename>ip_vs</filename> 
pour chaque version d'OS.
Les deux versions sont rarement publiés en même temps. 
(il y a un petit délai entre les deux).
	</para>
	</note>
	<note>
	<para>
De Horms: Si vous voulez bidouiller le code ipvs,
(<emphasis>e.g.</emphasis> changer la taile de la table de hashage,
ce que nous ne vous recommandons pas)
et que vous compilez ipvs comme un module, alors vous avez besoin
de recompiler et recharger le module pour que les changements 
du module prennent effet.
Vous avez quand même besoin de patcher et de recompiler le kernel pour
pouvoir utiliser ipvs.Toutefois pour les kernels 2.4.x,
çà vaut le coup de remarquer que c'est juste pour qu'un symbol,
nécessaire à ipvsadm pour s'accrocher au netfilter, soit enregistré.
Le kernel ne connait pas et se fiche du code du module ipvs quand il est compilé
(à moins que vous compiliez directement ipvs dans le kernel).
Dans les kernel 2.2 les patches ipvs font plus de travail. 
	</para>
	</note>
	<para>
Vous devez commencer avec un arbre propre (tout juste téléchargé ou nétoyé 
avec la commande <command>make mrproper</command>).
Si vous avez déjà configurez le kernel pour votre matériel sans ipvs
vous devriez réutiliser votre fichier <filename>.config</filename>.
Il sera patcher, en même temps que le code du kernel (rajoutant une nouvelle 
entrée dans la section networking),
et votre configuration sans ipvs sera maintenu.
(Faites une sauvegarde de votre fichier <filename>.config</filename> en cas de problème).
	</para>
	<para>
Appliquez le patch ipvs du kernel
en utitisant les instructions dans l'archive ipvs. Vous ferez quelque chose comme 
    </para>

<programlisting>
<![CDATA[
director:/usr/src/linux# patch -p1 <../ipvs-1.0.6-2.2.19/ipvs-1.0.6-2.2.19.patch

ou

director:/usr/src/linux# patch -p1 <../ipvs-0.2.7-2.4.2/ipvs-0.2.7-2.4.2.patch
]]>
</programlisting>

	<para><emphasis role="bold">ext3 filesystems</emphasis></para>

    <para>
Il y a une collision dans les noms de variables quand les patch 
ipvs et ext3 sont mis tout les deux.
    </para>

	<para>Adam Kurzawa 4 Nov 2001</para>
	<blockquote>

	<para>
	Après avoir appliqué les deux, patch lvs et ext3 pour 2.4.13
j'ai des erreurs de compilation.
L'un appliqué sans l'autre marche très bien.
	</para>
	</blockquote>

	<para>Wensong</para>

    <para>
        Enlevez la ligne de  "EXPORT_SYMBOL(buffermem_pages);" dans
        le fichier linux/kernel/ksyms.c, puis recompilez le kernel.
	</para>

		<section id="compile_instructions">
		<title>Instructions de compilation</title>

		<para>
Les instructions pour le patch du kernel varient selon la 
version du patch. Vous pouvez construire ipvs directement dans le kernel 
ou alors le laisser comme un module chargeable - les deux font l'affaire
pour une première installation.
		</para>
        <para>
Vous devez allumer
"Prompt for developmental code... "
sous la section "Code Maturity" .
Dans la section "Networking", il faut que vous allumiez 
IP:masquerading avant d'avoir les options de ipvs.
		</para>

		<para>
Certaines des options de compilation du kernel ci dessous ne sont
explicitement nécessaire pour que LVS fonctionne, mais vous en aurez besoin 
un moment ou un autre -
<emphasis>e.g.</emphasis>
l'aliasing ip si vous avez besoin de construire un directeur avec une seul carte réseau
ou le tunneling si vous utilisez LVS-Tun. En attendant de savoir ce que vous
allez faire, activez toutes les options avec un "*" au début de la ligne.
La configuration des options du kernel ci dessous sont juste pour LVS.
Vous aurez besoin d'autre flag mis en place (<emphasis>e.g.</emphasis> filesystems, hardware...).
		</para>
		</section>

		<section id="2.2.x_kernels">
		<title>Les kernels2.2.x</title>
		<para>
Les instructions de compilation du kernel varieront selon la version du patch.
Voila ce que j'ai utilisé pour ipvs-0.9.9 sur un kernel 2.2.15pre9 
dans les options Networking.
		</para>

<programlisting>
<![CDATA[

           [*] Kernel/User netlink socket
           [*] Routing messages
   	< > Netlink device emulation
*          [*] Network firewalls
           [*] Socket Filtering
   	<*> Unix domain sockets
*          [*] TCP/IP networking
           [ ] IP: multicasting
*          [*] IP: advanced router
*          [*] IP: policy routing
           [ ] IP: equal cost multipath
           [ ] IP: use TOS value as routing key
           [ ] IP: verbose route monitoring
           [ ] IP: large routing tables
           [ ] IP: kernel level autoconfiguration
*          [*] IP: firewalling
           [ ] IP: firewall packet netlink device
*          [*] IP: use FWMARK value as routing key (NEW)
*          [*] IP: transparent proxy support
*          [*] IP: masquerading
           --- Protocol-specific masquerading support will be built as modules.
*          [*] IP: ICMP masquerading
           --- Protocol-specific masquerading support will be built as modules.
*          [*] IP: masquerading special modules support
*  	<M> IP: ipautofw masq support (EXPERIMENTAL)
*  	<M> IP: ipportfw masq support (EXPERIMENTAL)
*  	<M> IP: ip fwmark masq-forwarding support (EXPERIMENTAL)
*          [*] IP: masquerading virtual server support (EXPERIMENTAL)
*          (12) IP masquerading LVS table size (the Nth power of 2)
*  	<M> IPVS: round-robin scheduling
*  	<M> IPVS: weighted round-robin scheduling
*  	<M> IPVS: least-connection scheduling
*  	<M> IPVS: weighted least-connection scheduling
*          [*] IP: optimize as router not host
*  	<M> IP: tunneling
   	<M> IP: GRE tunnels over IP
           [*] IP: broadcast GRE over IP
           [ ] IP: multicast routing
           [*] IP: PIM-SM version 1 support
           [*] IP: PIM-SM version 2 support
*          [*] IP: aliasing support
           [ ] IP: ARP daemon support (EXPERIMENTAL)
*          [*] IP: TCP syncookie support (not enabled per default)
           --- (it is safe to leave these untouched)
   	< > IP: Reverse ARP
           [*] IP: Allow large windows (not recommended if <16Mb of memory)
   	< > The IPv6 protocol (EXPERIMENTAL)
]]>
</programlisting>
		<para>
<emphasis role="bold">Ne changez pas la taille de la table de masquage IP de LVS</emphasis>
à moins que vous ne connaissiez LVS beaucoup mieux que nous.
Si vous pensez toujours à changer la taille de la table de hashage 
au moins d'abord lisez le 
<ulink url="http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS-HOWTO.operation.html#Hash_Table">
HOWTO (en anglais)
</ulink>.
		</para>
		<para>
Faites tous les autres truc du kernel - faire les modules, installez les modules, 
copiez le nouveau kernel
(et optionellement System.map, requie par le
<link linkend="configure_script">le script de configuration</link>.)
dans  / ou /boot, et modifiez les fichiers de votre boot loader (lilo, grub).
Veillez à gardez votre vieux kernel et vos anciennes config, 
pour que vos puissiez reprendre au départ au cas ou çà ne se passe pas bien.
Redémarrez avec le nouveau kernel.
En chargeant le nouveau kernel (avec ipvs en module),
vérifiez que les modules sont bien chargés.
Le fichier dans l'arborescence source du kernel à toutes les informations nécessaire.
		</para>
		</section>

		<section id="2.4.x_kernels">
		<title>Les kernels 2.4.x</title>

		<para>
Les patches pour les premières versions des kernels 2.4.x ont été configurés 
et installés séparément du nemu "make menuconfig" du kernel. Cela requière de
déplacer les fichiers dans le dossier /lib/modules et de charger
les modules à la main.
Avec des versions plus récentes du kernel, vous pouvez avoir un ensemble de fichier 
et disposé dans l'arborescence et configuré avec la commande
<command>make configure</command>.
L'installation change selon les versions de patch <filename>ip_vs</filename>.
Veillez à lire la documentation.
		</para>

		<note>
		<para>
Les instructions ci-dessous sont pour un kernel 2.4.x .
Vous pouvez vous attendre à voire des différences entre chaque kernel.
Pour la version 2.4.18 (Simon Young <emphasis>simon-lvs (at) blackstar (dot) co (dot) uk</emphasis>, 1 Oct 2002)
	<blockquote>
Le Masquerading IP est :

<programlisting>
<![CDATA[
Networking options  --->
  IP: Netfilter Configuration  --->

  <M> IP tables support (required for filtering/masq/NAT)
  <M>   Full NAT
  <M>     MASQUERADE target support
]]>
</programlisting>
	<para>
Tout les trucs pour LVS doivent ce trouver :
	</para>

<programlisting>
<![CDATA[
Networking options  --->
  IP: Virtual Server Configuration  --->
]]>
</programlisting>
	</blockquote>

		</para>
		</note>

		<para>Voila la configuration du réseau</para>

<programlisting>
<![CDATA[
	<*> Packet socket
	[ ] Packet socket: mmapped IO
	[*] Kernel/User netlink socket
	[*] Routing messages
	<*> Netlink device emulation
	[*] Network packet filtering (replaces ipchains)
	[*] Network packet filtering debugging
	[*] Socket Filtering
	<*> Unix domain sockets
	[*] TCP/IP networking
	[ ]   IP: multicasting
	[*]   IP: advanced router
	[*]     IP: policy routing
	[*]       IP: use netfilter MARK value as routing key
	[*]       IP: fast network address translation
	[*]     IP: equal cost multipath
	[*]     IP: use TOS value as routing key
	[*]     IP: verbose route monitoring
	[*]     IP: large routing tables
	[*]   IP: kernel level autoconfiguration
	[ ]     IP: BOOTP support
	[ ]     IP: RARP support
	<M>   IP: tunneling
	< >   IP: GRE tunnels over IP
	[ ]   IP: multicast routing
	[ ]   IP: ARP daemon support (EXPERIMENTAL)
	[ ]   IP: TCP Explicit Congestion Notification support
	[ ]   IP: TCP syncookie support (disabled per default)
	  IP: Netfilter Configuration  --->
	  IP: Virtual Server Configuration  --->
	< >   The IPv6 protocol (EXPERIMENTAL)
	< >   Kernel httpd acceleration (EXPERIMENTAL)
	[ ] Asynchronous Transfer Mode (ATM) (EXPERIMENTAL)

	]]>
</programlisting>

		<para>
Voila ma configuration pour l'IP : Virtual Server configuration (turn it all on)
		</para>

<programlisting>
<![CDATA[
	<M> virtual server support (EXPERIMENTAL)
	[*]   IP virtual server debugging (NEW)
	(12)   IPVS connection table size (the Nth power of 2) (NEW)
	--- IPVS scheduler    
	<M>   round-robin scheduling (NEW)
	<M>   weighted round-robin scheduling (NEW)
	<M>   least-connection scheduling scheduling (NEW)
	<M>   weighted least-connection scheduling (NEW)
	<M>   locality-based least-connection scheduling (NEW)
	<M>   locality-based least-connection with replication scheduling (NEW)
	<M>   destination hashing scheduling (NEW)
	<M>   source hashing scheduling (NEW)
	--- IPVS application helper
	<M>   FTP protocol helper (NEW)
	]]>
</programlisting>
		<para>
<emphasis role="bold">Ne changez pas la taille de la table de hashage des connexions ipvs</emphasis>
 à moins que vous ne vous y connaissiez beaucoup plus que nous.
Si vous voulez toujours changer la taille de la table de hashage,
au moins d'abord lisez le
<ulink url="http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS-HOWTO.operation.html#Hash_Table">HOWTO</ulink>.
		</para>

		<para>Voici ma configuration pour la section netfilter</para>

<programlisting>
<![CDATA[
	<M> Connection tracking (required for masq/NAT)
	<M>   FTP protocol support
	<M> Userspace queueing via NETLINK (EXPERIMENTAL)
	<M> IP tables support (required for filtering/masq/NAT)
	<M>   limit match support
	<M>   MAC address match support
	<M>   netfilter MARK match support
	<M>   Multiple port match support
	<M>   TOS match support
	<M>   Connection state match support
	<M>   Unclean match support (EXPERIMENTAL)
	<M>   Owner match support (EXPERIMENTAL)
	<M>   Packet filtering
	<M>     REJECT target support
	<M>     MIRROR target support (EXPERIMENTAL)
	<M>   Full NAT
	<M>     MASQUERADE target support
	<M>     REDIRECT target support
	<M>   Packet mangling
	<M>     TOS target support
	<M>     MARK target support
	<M>   LOG target support
	< > ipchains (2.2-style) support
	< > ipfwadm (2.0-style) support
	]]>
</programlisting>

		</section>

		<section id="iptables_ipchains">
		<title>iptables/ipchains problèmes de compatibilité</title>
	
		<note>	
		<para>
J'ai enlevé les options ipchain ici.
C'était mis à l'option &lt;M&gt; dans une version antérieur du mini-HOWTO.
Toutefois çà soulève des problèmes
pour les personnes qui n'ont pas compris les problème de compatibililté de ipchains.
		</para>
		</note>

		<para>
Les ipchains dans les kernels 2.2.x ont été remplacé par les iptables pour les kernels 2.4.x.
Dans les kernels 2.4, ipchains est disponible pour la rétro-compatibilité.
Toutefois les ipchains et iptables ne peuvent pas être utilisé en même temps.
Vous ne devriez plus compiler les ipchains dans  les kernels 2.4 
(2.4.x sont sorties depuis 1999).
		</para>
		
		<para>Les ipchains sous 2.4 ralentissent le conntrack 
(voir le <ulink url="http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS-HOWTO.performance.html#conntrack">
HOWTO</ulink>).</para>

		<para><emphasis role="bold">Le module ip_tables est incompatible avec les ipchains.
S'il est présent, le module ip_tables doit être déchargé pour qu'ipchains fonctionne. </emphasis>
		</para>

		<para>
Si ip_tables est chargé,
vous aurez des erreurs incompréhensible si vous essayez de lancer
la commande ipchains avec un 2.4.
Plutôt que dire que les ipchains sous 2.4 sont la pour la compatibilité,
il serait plus correcte de dire que la commande ipchains est la pour vous poser des 
problèmes et qu'il serait plus rapide de réécrire vos scriptes pour les iptables 
au lieu de tomber dans touts les trous en utilisant la compatibilité.
Celà ne sera pas long avant que votre script/program doit lancer ip_tables sur votre 
machine 2.4 et au moment où çà arrive l'un ou les deux tomberont.
		</para>
		</section>

		<section id="compile_kernel">
		<title>Compilation du kernel</title>

        <para>
Faites tout les autres trucs pour le kernel - faites les modules, copiez le nouveau
kernel dans / ou /boot (en lui donnant un nom différent de votre kernel en fonctionnement
<emphasis>e.g.</emphasis> bzImage-0.9.4-2.4.12), modifiez lilo.conf et re-lancez lilo.
Velliez à laisser les anciennes informations dans le lilo.conf pour pouvoir 
y revenir si çà ne se passe pas bien. Puis rebootez le nouveau kernel.
		</para>
		</section>

		<section id="working_kernel">
            <title>Si vous construisez ip_vs en dehors d'un kernel 2.4, 
                faites fonctionner le kernel d'abord.</title>

		<para>
Bootez avec le nouveau kernel et vérifiez que /usr/src/linux pointe vers
votre arboréscence source du kernel (vous pouvez utiliser rc.system_map qui vient 
avec le <link linkend="configure_script">script de configuration</link>),
avant de construire ipvs (si vous le faites séparément) et ipvsadm.
		</para>
	
        <para>
N'oubliez pas de lancer la commande <command>depmod -a</command>
après avoir installé les modules ip_vs.</para>
		</section>
	</section>

	<section id="is_lvs_installed">
	<title>Comment puis-je vérifier si le patch ipvs est installé sur mon kernel ?</title>
	<para>
Réponse courte : Vous ne devriez pas utiliser le kernel de quelqu'un d'autre  -
compilez vous même un kernel avec un patch ipvs.
	</para>
	<para>
Réponse longue :
Si vous avez les binary de votre kernel, alors vous avez un peu de boulot devant vous.
Si vous l'avez compilé vous même, alors vous devriez le nommé
	</para>
<programlisting><![CDATA[
bzImage-0.9.3-2.4.9-module-forward-shared
]]></programlisting>
	<para>
pour vous souvenir de ce que c'est (ici ip_vs 0.9.3 compilé
comme module, kernel 2.4.9, avec patch forward-shared).
	</para>
	<para>
Sinon
	</para>
	<itemizedlist>
		<listitem>
		<para>
Si ipvs est compilé dans le kernel
		</para>
<programlisting><![CDATA[
$ grep ip_vs_init System.map
]]></programlisting>
		</listitem>
		<listitem>
Si le kernel est récent et que ipvs est compilé comme module,
lancer <command>ipvsadm</command> chargera le module pour vous.
De là vérifiez le module chargé avec lsmod.
		</listitem>
		<listitem>
Pour des kernel plus vieux, vous devez charger le module avant de lancer ipvsadm
Si le kernel n'as pas le patch ip_vs, le modulene ce lancera peu être pas.
		</listitem>
	</itemizedlist>
    </section>


	<section id="kernel_symbols">
	<title>Lister les symboles dans le kernel</title>
	<para>
S.W.Seo<emphasis>ohlyugen (at) yahoo (dot) co (dot) kr</emphasis>
	</para>
	<blockquote>
Y a t'il une méthode pour voir les symboles dans une image kernel ?
La commande <command>nm</command> montre les symboles dans un fichier,
mais ne marche pas sur une imae kernel.
	</blockquote>
	<para>
Peter T. Breuer <emphasis>ptb (at) oboe (dot) it (dot) uc3m (dot) es</emphasis> 8 Mar 2003
	</para>
	<para>
Dans l'image ou dans le kernel ?
Quand il est lancé, vous cherchez <filename>/proc/ksyms</filename>.
Mais vous pouvez utiliser la commande <command>nm</command> sur <filename>vmlinux</filename> 
et çà vous montrera les symboles.
Je suppose que vous parlez de l'image compressé avec boot header,
<filename>vmlinuz</filename>.
Il va faloir vous sacrifier et le compresser d'abord.
	</para>
	</section>
	<section id="ipvsadm">
	<title>ipvsadm</title>

	<para>
Ipvsadm fait parti de l'archive ipvs 
et est l'interface utilisateur pour LVS.
Ipvsadm s'utilise sur le directeur.
	</para>

	<para>
	Avant d'essayer de construire votre ipvsadm -
	</para>
	
	<itemizedlist>
		<listitem>
		<para>
		relancez votre kernel nouvellement patché.
		</para>
		<para>
Sinon vous aurez des erreurs à propos de fichier header manquant 
(vous utiliserez des header de la versions précédentes du kernel).
		</para>
		</listitem>
		<listitem>
Vérifiez que vous ètes dans le nouveau kernel patché.
		<para>
Faites <command>uname -a</command>, ou
si vous avez compilé ip_vs comme un module, faites <command>lsmod | grep ip_vs</command>.
		</para>
		</listitem>
	</itemizedlist>

	<para>
Faites un <command>make install</command> pour ipvsadm.
Vérifiez que le ipvsadm que vous utilisez vient de la même archive que 
les patches du kernel
(si vous faites le kernel et que vous oubliez d'installer 
le nouveau ipvsadm vous aurez la vieille version de ipvsadm
avec les nouveaux codes ipvs).
Comme vous ne pouvez pas lancer/compiler ipvsadm avant 
d'avoir lancer le nouveau kernel, il arrive que vous oubliez
de faire l'installation de ipvsadm après le 
redémarrage.
	</para>

	<note>
La commande <command>ipvsadm</command> n'a pas de fortes capacités à tester les versions.
Cà fonctionnera sur une version incompatible de ipvs et ce ne sera pas 
facile de se rendre compte, si vous ètes nouveau avec LVS que la sortie bizarre
est dû un problème de version
(Je l'ai fait et ai dû demander sur la mailing list).
J'ai généralement plusieurs versions de <filename>ip_vs</filename>
en cours pour des tests.
J'ai installé <filename>ipvsadm</filename> comme
<filename>/sbin/ipvsadm-(ip_vs_version-kernel_version)</filename>
<emphasis>e.g.</emphasis>
<filename>ipvsadm-0.2.12-2.4.4</filename>,
et je laisse
<ulink url="http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS-HOWTO.ipvsadm.html#rc.system_map">
rc.system_map</ulink>
refaire le lien vers ipvsadm au démarrage.
    </note>
		<section id="ipvsadm_popt">
		<title>Compiler ipvsadm avec popt</title>
		<para>
Vous pouvez compiler ipvsadm avec 
<ulink url="http://directory.fsf.org/libs/popt.html">popt libraries</ulink>,
qui permet à ipvsadm de soutenir des arguments plus compliqués dans 
la ligne de commande. Si votre librairie libpopt est trop ancienne, 
votre ipvsadm ne marchera pas.La compilation par défaut avant
utilisait des librairies popt statique alors que maintenant 
il utilise des librairies dynamiques.
Si vous avez des erreurs, POPT non trouvé,
c'est que vous n'avez pas installé popt,
ou que vous n'avez pas de popt récent.
		</para>

		<para>Torsten Buslei</para>
		<blockquote>
		<para>
Je viens juste de compiler et d'installer un nouveau kernel (2.4.18 avec patch
2.4.19-pre8 et linux-2.4.18-ipvs-1.0.2.patch.gz).
Après le redémarrage (jusque là tout va bien), compilation de
ipvsadm (soit ipvs-1.0.2.tar.gz ou ipvsadm-1.20.tar.gz)
Je récupère ce message d'erreur:
		</para>

<programlisting> <![CDATA[
ipvsadm.c:345: `POPT_ARGFLAG_OPTIONAL' undeclared (first use in this function)
]]> </programlisting>

		<para>
J'ai commenté cette partie de ipvsadm.c:345
		</para>

<programlisting>
<![CDATA[
{"persistent", 'p', POPT_ARG_STRING/*|POPT_ARGFLAG_OPTIONAL*/, &optarg, 'p'},
]]>     
</programlisting>

		<para>
Maintenant ipvsadm fonctionne correctement. Est ce correcte à faire ?
		</para>
		</blockquote>

		<para>
Horms <emphasis>horms (at) vergenet (dot) net</emphasis> 05 Mai 2002
		</para>
		<para>
Il semblerai que vous avez une version de popt qui ne supporte pas les 
arguments optionnel (POPT_ARGFLAG_OPTIONAL). Ta correction devrait être correcte, 
avec l'effet secondaire que vous devrez donner un argument à  -p / --persistent 
si vous utilisez cette option.
		</para>
		</section>
	</section>
	<section id="check_software">
	<title>Directeur: vérifié les logiciels</title>
	<para>
Avec un peut d'adresse et de chance vous aurez chargé tout les logiciels
sans aucun problèmes.
	</para>

	<para>Vérifiez que ipvsadm détecte les patches du kernel</para>

<programlisting>
<![CDATA[
director:/etc/lvs:# ipvsadm
]]>
</programlisting>

	<para>
En cas de réussite sa devrait ressembler à çà
	</para>

<programlisting>
<![CDATA[
director:/usr/src# ipvsadm
IP Virtual Server version 0.2.7 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port          Forward Weight ActiveConn InActConn
]]>
</programlisting>

	<para>
Si vous ne faites pas fonctionner un kernel avec les patches ipvs
vous aurez des messages d'erreurs à propos de modules ipvs manquants.
    </para>
	</section>

	<section id="someone_else">
	<title>Kernel du directeur: trouver quelqu'un pour le faire à sa place </title>
	
	<para>
Malgrè nos avertissement, pour vous essayez de construire votre premier kernel pour LVS
les gens utilisent toujours les patches
	</para>

	<para>
Certaines distribution ont leur kernel pré patché avec ipvs.
RedHat a commencé à le faire fin 99
(mais a apparement arrété avec la version 2.4.20
d'après Peter Nash
<emphasis>peter (dot) nash (at) changeworks (dot) do (do) uk</emphasis>
15 Mai 2003 et avec RedHat 9.0 selon James Bourne
<emphasis>james (at) sublime (dot) com (dot) au</emphasis>).
SuSE a déjà parlé de le faire (Dec 2000)
(et a commencé à le faire en Mai 2003).
Si vous avez l'une de ces distributions,
suivez les instructions fournies avec la distribution pour avoir 
un directeur LVS qui fonctionne.
Puisqu'en moyenne 2 versions d'ipvs sortent pour chaque versions de kernel, 
vous aurez certainement une version de ipvs plus ancienne si vous choisissez ce moyen.
Ce n'est pas un problème - ipvs était assez fiable pour la production dès 
la première version, toutefois les versions vieilles de 6 à 12 mois ne sont
plus supprotées sur la mailing list.
On vous dira de revenir quand vous aurez mis à jour votre système.
	</para>

	<para>
Si vous ne savez pas si vous avez un kernel prépatché avec ipvs, soit 
demandez à votre vendeur ou regardez dans l'arborescence source du kernel pour 
des fichiers ipvs (comme /usr/src/linux/net/ipv4/ip_vs_*.c).
	</para>

    <para>
Si vous n'ètes pas sur, alors
<link linkend="fresh_kernel">installez un nouveau kernel de ftp.kernel.org/pub/linux/kernel/</link>.
Vous pourrez toujours retourné à votre distribution patché plus tard.
Si vous essayez de patché un kernel qui a déjà les patches ipvs appliqué 
vous aurez des erreurs de patch
<emphasis>e.g.</emphasis>
	</para>

<programlisting>
<![CDATA[
> Hunk #1 succeeded at 121 with fuzz 2 (offset 18 lines).
> Hunk #2 FAILED at 153.
> Hunk #3 FAILED at 163.
> Hunk #4 FAILED at 177.
> 3 out of 4 hunks FAILED -- saving rejects to include/linux/ip_masq.h.rej
>
> patching file `include/net/ip_masq.h'
> Reversed (or previously applied) patch detected!  Assume -R? [n]
]]>
</programlisting>

	<para>
Les personnes qui compile un kernel après l'échec d'une deuxième couche de patche
arrive sur la mailing list avec des erreurs qui sont impossible à déchiffrer.
Une des plus grandes source de question sur la mailing list est les personnes 
avec RedHat qui se retrouve avec une installation cassée après avoir suivi les instructions
du mini-HOWTO.
Ils ne démarrent pas avec un kernel standard et les instructions de RedHat ne leur 
disent pas ce qu'il ce passe.
	</para>

	<para>
Voici des conseils de Lars<emphasis>lmb (at) suse (dot) com</emphasis>
	</para>
	<blockquote>
	<para>
Si vous récupérez un message d'erreur, ou si votre distributon inclu déjà LVS, 
n'essayez pas d'appliquer le patch pas dessus.
    </para>

	<para>
Premièrement essayez de vérifier avec votre vendeur s'il n'y a pas un package de
mise à jour du kernel déjà disponible.
	</para>

	<para>
Si vous pensez que cette révision des patches LVS a amené une amélioration
significative par rapport aux précedentes, ou répare un bug critique pour vous,
et que le vendeur ne fourni pas encore de kernel mis à jour, svp demandez 
leur de le faire.
	</para>

	<para>
Si vous avez besoin d'une révision plus récentes que celle de votre distribution,
svp récupérez une arborescence kernel propre et démarrez de là.
Veillez à appliquer tout les autres patches dont vous avez besoin!
	</para>
	</blockquote>
		<section id="Horms_RedHat">
		<title>Traiter un kernel RedHat prépatché</title>

		<para>
Ramish Patel a écrit:
		</para>

		<blockquote>
		<para>
J'utilise une Red Hat Linux 7.2, kernel 2.4.7-10, et j'ai essayez plusieurs patches pour LVS
seulement deux d'entre eux ont été appliqué avec succés sans erreurs
-- il venait de çà <filename>ipvs-1.0.4.tar.gz</filename>,
qui contenai les deux patches qui ont été bien appliqué au kernel,
<filename>
linux_kernel_ksyms.c.diff
</filename>,
<filename>
linux_net_netsyms.c.diff
</filename>.
		</para>

		<para>
J'ai recompilé le kernel après. Il me renvoie toujours des messages d'erreurs :
		</para>

<programlisting>
<![CDATA[
"Could not open the /proc/net/ip_masq/vs file
Are you sure that the IP Virtual Server is supported by the kernel?"
]]>
</programlisting>

		</blockquote>

		<para>
Horms <emphasis>horms (at) verge (dot) net (dot) au</emphasis> 31 Jul 2002
		</para>

		<para>
Premièrement, je recommenderai fortement que vous commenciez avec un kernel
de kernel.org (comme le 2.4.18) au lieu d'utiliser un kernel RedHat
à moins que vous ne sachiez ce que vous faites. ipvs-1.0.4 ne marche pas forcément
directement avec un kernel RedHat 7.2 et vice versa.
		</para>

		<para>
Toutefois si vous voulez le faire voici un guide approximatif.
		</para>
		<itemizedlist>
			<listitem>
Vous avez besoin d'appliquer linux_kernel_ksyms.c.diff et
   linux_net_netsyms.c.diff
			</listitem>
			<listitem>
Vous devez enlever la version existante de LVS qui est présente dans le kernel 
7.2 . Vous pouvez le faire en examinant les patches qui sont donnés par les fichiers 
src.rpm et spec.file.
			</listitem>
			<listitem>
Compilez le kernel - quelques petites choses devraient échouer.
   J'avais prévenu c'est le parcours du combatant.
			</listitem>
			<listitem>
Construisez les modules du kernel mis à dispostion dans le sous dossier ipvs/ 
de ipvs-1.0.4.tar.gz. Vous aurez besoin de faire des modifications sur la source pour 
que çà marche, mais elles sont mineur.
			</listitem>
		</itemizedlist>

		<para>
		Alex Kramarov a
(http://mail.incredimail.com/howto/lvs/install/ - lien mort Jul 2004)
des instructions sur la construction/modification d'un kernel RedHat.
		</para>
		</section>

	</section>
	<section id="compile_problems">
	<title>Directeur: problèmes de compilation</title>

	<para>Kim Le, Jul 25, 2001</para>
	<blockquote>
J'ai des problèmes quand j'essaye de compiler LVS en tant que module. Il arrète pas de se plaindre
pour "unresovled symbols - nf_register_hook" (symbole non résolu).
J'ai cru que c'était parce que je n'avais selectionné NETFILTER, donc j'ai fait menuconfig,
selectionné NETFILTER et recompilé le kernel.
Je vérifie le System.map et je vois le symbole nf_register_hook symbol dedans.
	</blockquote>

	<para>Horms</para>

	<para>
	Je pense que vous avez un problème de symbol kernel comme est discuté ici
http://marc.theaimsgroup.com/?l=linux-virtual-server&amp;m=98766822929703&amp;w=2
Vous pouvez trouver des informations sur comment résoudre ce problème
http://lists.samba.org/listproc/netfilter/1999-November/002871.html
Simplement les symboles de votre kernel ne sont plus à jour et vous avez besoin 
de reconstruire le kernel avec "make mrproper". Vous devriez faire une sauvegarde 
de votre kernel avant de faire celà.
Une fois que vous l'avez fait allez dans le dossier ipvs et faites 
	</para>

<programlisting>
<![CDATA[
$ make clean all install
]]>
</programlisting>

	Wensong
	<para>
Ce que je comprend c'est que comme kernel/ksyms.c est patché
nous devons faire la commande <command>make mrproper</command> pour être sûr que 
les ksyms sont à jour quand le kernel est construit. Est-ce correcte ?
Si oui, cela ne ferait pas de mal de le mettre dans le README.
	</para>
	
	<para>
Voici le post original pour réparer de la samba list.</para>
    <para>Erik Ratcliffe <emphasis>erik (at) calderasystems (dot) com</emphasis> 29 Nov 1999</para>

    <para>
Les symboles exportés du kernel devrait être stocké dans
usr/src/linux/include/linux/modules.  Plus précisément, le fichier ksyms.ver.  
Si votre kernel a été construit sur une arborescence existante et que vous n'avez 
pas lancé la commande 'make mrproper' avant, il y a des chances que les fichiers 
dans le dossier sus-cité soient corrompu.
J'ai vu arriver cela sur plusieur systèmes quand un kernel SMP est utilisé 
face à une arborescence source linux qui contient des symboles non-SMP
(vous pouvez deviner les symboles SMP par le préfixe "smp_" dans le CRC/version number, 
les symboles de kernel non-SMP n'ont pas ce préfixe).
	</para>

    <para>
La meilleur façon de résoudre celà est de reconstruire le kernel depuis 'make mrproper' 
jusqu'à 'make modules_install'.  
Veillez à statuer que les versions doivent être assignées aux symboles des modules dans
la configuration du kernel avant de la faire.
	</para>
	<para>
Aisha <emphasis>aayesha83 (at) yahoo (dot) com</emphasis> Aou 25, 2005 
	</para>
	<blockquote>
Je suis nouvelle avec LVS et j'ai fait toutes les étapes décrites dans l'installation
minimum, mais quand je fais modules_install, il me dit qu'il y a des symboles 
non résolu dans le fichierip_vs.o.
	</blockquote>
	<para>
Horms
	</para>
	<para>
Ce genre de problème ont en général une de ces trois causes.
	</para>
	<itemizedlist>
		<listitem>
			<para>
Le : vous avez allumé quelques options, comme netfilter, dans 
une arborescence qui a déjà été construite et quelques objets n'ont pas été reconstruit 
bien qu'ils auraient dû, et donc quelques symboles manquent.
Je me souviens avoir vu souvent avec 2.4, il semble que ce soit un problème 
avec le système de construction. Heureusement, c'est facile mais assez long à faire.
            </para>
			<para>
Du plus au niveau de source de kernel.
			</para>
<programlisting><![CDATA[
mv .config ../saved.config
make mrproper
mv ../saved.config .config
make oldconfig
make bzImage modules ...
]]></programlisting>
		</listitem>
		<listitem>
Vous avez réussi à modifier votre fichier .config à la main et avez produit
une configuration invalide - par exemple vous acceptez LVS sans 
le faire pour Netfilter. Ne faites pas celà!!!
Utillisez make menuconfig ou make config selement si vous savez 
ce que vous faites.
		</listitem>
		<listitem>
La construction est correcte, mais pendant modules_install,
depmod est apellé, et depmod essaye de résoudre face au kernel en cours, il n'existe pas 
donc vous avez les erreurs que vous voyez.
Celà peu être corrigé en redémarrant avec votre nouveau kernel.
		</listitem>
	</itemizedlist>
	</section>

	<section id="other_unices">
	<title>Serveurs réels, autres unices</title>
	<para>
Cette liste de serveurs réels vient de Ratz.
La seul chose qu'il n'a pas essayé encore est le Plan 9.
Noubliez pas de mettre le netmask =/32 pour le VIP sous LVS-DR et LVS-Tun
(pour LVS-NAT vous pouvez n'importe quel netmask).
Si vous utilisez des serveurs réels non Linux, vous pouvez en général
traiter le problème arp en configurant le matériel supportant le VIP 
avec le switch -arp.
	</para>
	<itemizedlist>
		<listitem>
Solaris 2.5.1, 2.6, 2.7
		</listitem>
		<listitem>
Linux (of course): 2.0.36, 2.2.9, 2.2.10, 2.2.12
		</listitem>
		<listitem>
FreeBSD 3.1, 3.2, 3.3
		</listitem>
		<listitem>
NT (bien que le Webserver crash): 4.0 no SP
		</listitem>
		<listitem>
IRIX 6.5 (Indigo2)
		</listitem>
		<listitem>
HPUX 11
		<note>
HPUX fait l'arps même si vous lui dites de pas le faire.
Vous aurez besoin de traiter le
<ulink url="http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS-HOWTO.arp_problem.html">
problème arp</ulink> d'une autre façon.
		</note>
		</listitem>
	</itemizedlist>
	<para>
Le code de Ratz pour mettre en place des serveurs réels non linux est 
<link linkend="configure_script">ici</link>.
Cette partie du script n'a pas été bien testé 
(vous pourez trouver que cela de configure pas bien votre boite unix,
contactez moi - Joe).
		<note>
(Dans les 3 ans que ce script est sortie,
je n'est pas entendu une seul personne utilisant cette partie du code,
donc il n'y a aucune raison de le maintenir).
		</note>
	</para>
	<para>
Voici l'info original de Ratz pour les serveurs réels avec des OS non linux.
Sous certains unix, vous devez plumber (activer) l'interface avant d'assigner une IP.
L'instruction plumb n'est pas inclue ici. 
	</para>
<programlisting><![CDATA[
#uname      : FreeBSD
#uname -r   : 3.2-RELEASE
#<command>  : ifconfig lo0 alias <VIP> netmask 0xffffffff -arp up
#ifconfig -a: lo0: flags=80c9<UP,LOOPBACK,RUNNING,NOARP,MULTICAST>mtu 16837
#                  inet 127.0.0.1 netmask 0xff000000
#                  inet <VIP> netmask 0xffffffff

#uname      : IRIX
#uname -r   : 6.5
#<command>  : ifconfig lo0 alias <VIP> netmask 0xffffffff -arp up
#ifconfig -a: lo0: flags=18c9<UP,LOOPBACK,RUNNING,NOARP,MULTICAST,CKSUM>
#                  inet 127.0.0.1 netmask 0xff000000
#                  inet <VIP> netmask 0xffffffff

#uname      : SunOS
#uname -r   : 5.7
#<command>  : ifconfig lo0:1 <VIP> netmask 255.255.255.255 up
#ifconfig -a: lo0:  flags=849<UP,LOOPBACK,RUNNING,MULTICAST>mtu 8232
#                   inet 127.0.0.1 netmask ff000000
#             lo0:1 flags=849<UP,LOOPBACK,RUNNING,MULTICAST>mtu 8232
#                   inet <VIP> netmask ffffffff

#uname      : HP-UX
#uname -r   : B.11.00
#<command>  : ifconfig lan1:1 10.10.10.10 netmask 0xffffff00 -arp up
#ifconfig -a: lan0:   flags=842<BROADCAST,RUNNING,MULTICAST>
#                     inet <some IP> netmask ffffff00
#             lan0:1: flags=8c2<BROADCAST,RUNNING,NOARP,MULTICAST>
#                     inet <VIP> netmask ffffff00
#
]]></programlisting>
	<para>
Ratz 16 Avr 2001
	</para>
	<blockquote>
Dans la plupart des cas (en utilisant l'option NOARP)
vous avez besoin du support des alias.
Certains Unices n'ont pas de support pour les interfaces avec alias
ou seulement limité, comme QNX, Aegis, ou Amoeba. D'autres ont des problèmes
d'héritage de flag d'interface comme HP-UX où il est impossible de donner
une interface avec alias un vecteur de flag différent comme pour 
interface physique sous-jacente (est déjà arrivé avec des Linux 2.2 et 2.4 - Joe). 
Donc pour HP/UX vous avez besoin d'une installation spéciale car avec l'installation
standard présenté pour DR çà ne fonctionnera pas.
J'ai essayé la plupart des unices en tant que serveur réels et j'ai 
été négativement impressionné par le nombre d'implémentation
différentes. C'est sûrement le résultat d'instruction obscure
de la part du RFC.
	</blockquote>
	<para>
Gregory Boehnlein
	</para>
	<blockquote>
Je vais bientôt me mettre à travailler sur quelque boites Solaris 9, 
et j'aimerais pouvoir les ajouter à mon groupe de machine LVS. Est-ce que  
quelqu'un sait comment une machine Solaris 9 peut être utilisé comme
un serveur réels dans un groupe LVS-DR ? Sous linux, j'ai implémenté 
le patch arp "hidden". Comment le faire sous Solaris ?
	</blockquote>
	<para>
Roberto Nibali <emphasis>ratz (at) drugphish (dot) ch</emphasis> 11 Aou 2003
	</para>
	<para>
Solaris n'a pas ce problème ;).
	</para>
	<para>
Chris Kennedy <emphasis>ckennedy (at) iland (dot) net</emphasis>
        </para>
	<blockquote>
		<para>
Le truc que j'ai trouvé est que Solaris 2.6, et sûrement d'autres
versions de Solaris aussi, vous devez faire un peu de magie pour
mettre en place l'alias de loopback. Vous devez lancer ces commandes 
l'une après l'autre :
		</para>
<programlisting><![CDATA[
ifconfig lo0:1 <VIP>
ifconfig lo0:1 <VIP> <VIP>
ifconfig lo0:1 netmask 255.255.255.255
ifconfig lo0:1 up
]]></programlisting>
               	<para>
Ce qui marche bien et est en fait un lien point à point comme ppp
qui doit être la façon dont Solaris défini les aliases sur l'interface lo
Il ne vous laissera pas tout faire d'un coup, seulement chaque étape séparément
ou vous devrez tout reprendre du début.
                </para>
	</blockquote>
	<para>
Ramon Kagan <emphasis>rkagan (at) YorkU (dot) ca</emphasis> 05 Juin 2002
	</para>
	<blockquote>
		<para>
Au cas ou çà interresserait quelqu'un, vous pouvez faire ces opérations sur lo0:1 
ou pour les paranoïaques comme moi sur hme1.
      		</para>
<programlisting><![CDATA[
ifconfig <intfc> plumb
ifconfig <intfc> <VIP>
ifconfig <intfc> <VIP> <VIP>
ifconfig <intfc> netmask 255.255.255.255
ifconfig <intfc> up
]]></programlisting>
       	       <para>
Cela vient de la FAQ mais j'ajoute le faite que çà ne doit pas 
être obligatoirement sur lo0.
		</para>
	</blockquote>
	</section>
	<section id="windows">
	<title>Interface de loopback sous Windows/Microsoft/NT/W2K</title>
	<para>
Windows n'est <emphasis>pas</emphasis> prévu par le 
<link linkend="configure_script">script de configuration</link>
(qui a besoin de <command>bash</command> pour fonctionner).
	</para>
	<para>
Selon Horms vous n'avez pas besoin de grand chose pour traiter le 
poblème arp, apparement windows respecte le flag noarp.
	</para>
	<para>
Les instructions pour mettre en place un serveur réel sous windows est 
l'une des questions les plus communes sur la mailing list.
Cà doit être une partie difficile à trouver du mini-HOWTO ;-\.
Il semble qu'il y est plusieurs façon de le faire.
Voici quelque réponses.
Mettre la metric à 254 semble être décisif.
	</para>
	<para>
La recète de Wensong pour mettre en place le lo sur un serveur réel NT.
	</para>
	<blockquote>
		<para>
Si vous n'avez pas le driver loopback Adapter de MS installé sur vos 
sur vos machines NT, allez dans le Network Control Panel, clickez sur 
la section Adapter, clickez pour ajouter un nouvel adapter, selectionnez
le Loopback Adapter MS. Votre CD NT est nécessaire pour cette étape.
Puis ajoutez votre adresse VIP (Virtual IP) sur le Loopback
Adapter de MS, ne saisissez pas d'adresse de passerelle sur le Loopback
Adapter. Puisque le netmask 255.255.255.255 est considéré invalide
par M$ NT, acceptez le netmask par défaut,
puis allez dans la console MS-DOS, et supprimez la route en trop.
		</para>
<programlisting>
<![CDATA[
c:route delete <VIP's network> <VIP's netmask>
]]>
</programlisting>
		<para>
Celà va faire que les paquets destinés à ce réseau vont traverser l'autre 
interface réseau et non l'interface de Loopback MS.
Si je me souviens bien, mettre le netmask à 255.0.0.0 fonctionne aussi.
		</para>
	</blockquote>
	<para>	
Jerome Richard <emphasis>jrichard (at) virtual-net (dot) fr</emphasis>
	</para>
	<blockquote>
Sous Windows NT Server, vous avez juste à installer le network adapter
nommé "MS Loopback" (Fourni sur le CDROM NT dans la section nouveau réseau)
puis le mettre en place sur cette interface.
	</blockquote>
	<para>
o1004g <emphasis>o1004g (at) nbuster (dot) com</emphasis>
	</para>
	<orderedlist>
		<listitem>Clickez sur Démarrer, panneau de configuration,
            puis double-clickez sur ajout/suppression de matériel.</listitem>
        <listitem>Clickez sur Ajouter/Réparer un matériel, clickez sur suivant.</listitem>
		<listitem>Clickez sur Ajouter un matériel, clickez sur suivant.</listitem>
        <listitem>Clickez sur non, Je veut choisir un matériel dans une liste, 
            clickez sur suivant.</listitem>
		<listitem>Clickez sur adaptateurs réseau, clckez sur suivant.</listitem>
		<listitem>Dans la liste des fabricants, clickez sur MS.</listitem>
		<listitem>Dans la liste des adaptateurs réseaux, clickez sur MS Loopback Adapter,
            puis clickez sur suivant.</listitem>
		<listitem>Clickez sur terminer.</listitem>
	</orderedlist>
	<para>
<emphasis>robert.gehr (at) web2cad (dot) de</emphasis>; 24 Oct 2001
	</para>
	<blockquote>
		<para>
Le Loopback adapter de MS est un outil virtuel
sous windows çà ne résoud aucune requètes arp.
Cà devrait être sur un CD Server Edition CD de WinNT/2000.
Installez et assignez le à l'adresse IP appropriée.
Comme MS ne vous laisse pas assigner un netmask à "x.x.x.x/32" pour le
Loopback adapter, vous allez vous retrouver avec deux routes pointant
sur le même réseau. Disons que votre RIP est 10.10.10.10 et que votre
MS-Loopback VIP est 10.10.10.11. Vous aurez deux routes dans votre table de routage 
toutes les deux pointants vers 10.0.0.0. Vous pouvez supprimer la route
lié au VIP sur le Loopback adapter avec une commande comme
		</para>
<programlisting> <![CDATA[
route del 10.0.0.0 mask 255.0.0.0 10.10.10.11
]]> </programlisting>
	</blockquote>
	<para>
Johan Ronkainen <emphasis>jr (at) mpoli (dot) fi</emphasis>
	</para>
	<blockquote>
Vrai avec Windows NT4. Toutefois avec Win2000 vous pouvez simplement configurer 
une metric haute pour pour les interfaces de loopback. J'ai essayé celà avec
la valeur 254 sans problèmes.
Je crois que vous pouvez changer le netmask à /32 avec regedit. Je ne l'ai pas 
essayé avec WinNT4/2000. J'ai essayé ce truc avec Win98SE et çà a fonctionné.
	</blockquote>
	<para>
Brent Knotts <emphasis>brent (dot) knotts (at) mylocalgov (dot) com</emphasis> 28 Jan 2003
	</para>
	<blockquote>
		<para>
Concernant les serveurs réels Windows 2000 :
		</para>
		<para>
Il est possible de changer le mask de sous réseau à 255.255.255.255 dans le
registre, et çà marche bien avec mon istallation DR. C'est plus simple que de 
supprimer la route en trop de l'interface local après chaque redémarrage.
		</para>
		<para>
Dans Windows 2000, les interfaces se trouve dans :
		</para>
		<para>
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters\Interfaces
		</para>
		<para>
Trouvez l'interface avec la bonne adresse IP et changez le mask de sous réseau.
Le redémarrage n'est pas nécessaire, mais il faut que vous éteignez et rallumiez
l'interface.
		</para>
	</blockquote>
	<para>
<emphasis role="bold">Langue étrangère pour MS</emphasis>
	</para>
	<para>
Sebastien <emphasis>Sebastien.Bonnet (at) experian (dot) fg</emphasis> 12 Avr 2002
	</para>
	<blockquote>
		En français &quot;MS Lookback Adapter&quot; correspond à &quot;carte de bouclage&quot;
	</blockquote>
	<para>
Malcolm Turnbull
	</para>
	<blockquote>
J'ai mis en place un balanceur de charge LVS-DR avec 4 serveurs web IIS (win2K)
derrière.
J'ai mis un loopback adapter sur chaque serveur 2K et mis la priorité à 254.
Le balnaceur de charge fonctionne bien...
Mais il semble que çà traumatise le réseau Windows, le navigateur de réseau SMB semble 
ne plus fonctionner. (nécessaire pour RoboCopy).
	</blockquote>
	<para>
Martijn Klingens <emphasis>mklingens (at) ism (dot) nl</emphasis>
10 Sep 2002. Subject: Re: Configuration de LVS DR avec serveurs NT2K 
	</para>
	<blockquote>
		<para>		
On utilise une configuration presque similaire, on utilise en ce moment un xcopy
simple et voulons migrer vers DFS. Celà ne change pas le basique mais voila les 
choses que j'ai rencontré :
		</para>
		<itemizedlist>
			<listitem>
Windows ajoute toujours une route au sous réseau sur le loopback adapter.
Si ce sous réseau est aussi disponible pour le réseau normal votre table
de routage va être embrouillée. Dans notre cas, nous avons migré des sites 
vers LVS pour que nous ayons à prendre un mask de sous réseau de class C.
Solution : supprimer manuellement la route /24 dans l'interface de loopback.
			</listitem>
			<listitem>
Désactiver les services de fchier et d'impression aide aussi en général.
			</listitem>
			<listitem>
Vérifiez les passerelles par défaut et le DNS sur les différentes interfaces.
Si elles ne sont pas identiques vous aurez des comportements bizarre
(bien qu'il y est des cas où il est utile qu'ils soient différents, 
mais ce n'est pas si souvent).
            </listitem>
		</itemizedlist>
		<para>
J'espère que çà vous aide. Si non, mettez plus de détails sur votre configuration 
Si vous avez des problèmes sur les serveurs réels, sont ils capables de résoudre
un autre serveur réel en utilisant DNS ou ping ?
		</para>
		<para>
Et vous avez aussi parlé de navigation réseau, ce qui n'est pas exactement la même
chose que d'ouvrir un partage sur un ordinateur avec un nom connu.
Avez-vous vraiment besoin d'un navigateur ?
En général le service de navigation est arrété pour qu'un intrus ne puisse pas
immédiatement voir les autres hôtes Win2000 sur le réseau. Un peu inutile puisque 
DNS fourni les mêmes données, mais çà ne fait pas de mal non plus.
        </para>
	</blockquote>
	<para>
<emphasis>lstep (at) banquise (dot) org</emphasis> 11 Aou 2004 
	</para>
	<blockquote>
J'essaye de comprendre pourquoi vous avez mis la metric de l'interface local à 254
(selon la documentation trouvé sur 
<ulink url="http://wiki.linuxquestions.org/wiki/LVS_with_HA_for_Win2k_Terminal_Servers">
LVS avec HA pour Win2k Terminal Servers</ulink>
(http://wiki.linuxquestions.org/wiki/LVS_with_HA_for_Win2k_Terminal_Servers) 
quand vous configurez le loopback d'un serveur réel Win2000 en mode de routage direct ?
Si je ne le fait pas quel(s) problème(s) vais-je avoir ?
	</blockquote>
	<para>
Malcolm Turnbull <emphasis>malcolm (at) loadbalancer (dot) org</emphasis>
	</para>
	<para>
NT peut vraiment être une plaie quand sa table de routage est corrompue
Dans ce que j'ai vu, mettre la métric à 254 résoud 95% des problèmes.
	</para>
	<para>
Ratz
	</para>
	<blockquote>
Désolé mais çà ne me convint pas vraiment. Où puis-je me renseigner ?
Que fais vraiment NT quand on lui met un tel métric ?
	</blockquote>
	<para>
Utilser le registre pour mettre le netmask à 255.255.255.255 corrige les 5% restants
Semble nécessaire avec des domaines NT ou des serveurs avec plusieurs carte réseau.
Un serveur réel avec un problème est facile à repérer puisqu'il ne marchera pas sous DR 
et que la table de routage sera incorrecte.
	</para>
	<para>
Malcolm Turnbull <emphasis>malcolm (at) loadbalancer (dot) org</emphasis> 2005/04/15
	</para>
	<para>
Nous avons un petit outil basé sur .net pour mettre en place le 
loopback adapter pour le mode DR sur les serveurs web sous windows 2000/2003.
L'idée était d'installer le loopback et mettre en place autant de VIP que nécessaire 
puis mettre le netmask à 255.255.255.255. 
Mais pendant les testes nous avons vu que windows arrète de répondre 
au balaceur de charge RIP (pour des contrôles de santé), 
alors que si vous utilisez le netmask de 255.0.0.0, Windows ignore
cette route et cherche le plus petit sous réseau dans la table de routage
en premier <emphasis>i.e.</emphasis> dans votre cas 255.255.255.0 
(ou ce que vous utilisez pour votre RIP.)
	</para>
	<para>
Le petit utilitaire nécessite le framework .net 1.1.
Au démarrage, clickez sur l'alerte rouge 'no adapter found' pour installer
le loopback. Puis ajoutez autant de VIP que vous voulez et clickez sur save.
Plutôt inutile pour quelqu'un qui sait ce qu'il fait, mais quelqu'un 
pourrait trouver çà utile.
	</para>
	<para>
Vous pouvez télécharger les 
<ulink url="http://www.loadbalancer.org/download/nt/">
binaire et source</ulink>
(http://www.loadbalancer.org/download/nt/).
NB : Celui appelé BETA mettra le netmask à 255.255.255.255 (si c'est ce que vous voulez).
	</para>
	<para>
Graeme Fowler <emphasis>graeme (at) graemef (dot) net</emphasis> 06/11/2005
	</para>
	<para>
Ajouter une machine WIN NT à une installation LVS :
Si vous allez dans "ajouter un nouveau matériel" et "choisir dans la liste" vous devriez
pouvoir le trouver sous Adaptateur réseau.
	</para>
    <para>
Installez le "Microsoft Loopback Adapter" et assignez lui les adresses
nécessaires. IIRC ne fait pas de arp du tout, et je l'ai utilisé
en production pour plusieurs setup SLB - pas derrière un LVS mais,
c'était des machine Cisco IOS ou des setups ExetremWare, utilisant NAT ou DR.
	</para>
	</section>
	<section id="MacOS_X">
	<title>Mac OS X (et Solaris)</title>
	<para>
Malcolm Turnbull
	</para>
	<blockquote>
Est ce que quelqu'un a utilisé Mac OS X comme serveur réel sous LVS/DR ?
	</blockquote>
	<para>
Jerome RICHARD <emphasis>jrichard (at) virtual-net (dot) fr</emphasis> 20 Nov 2002
	</para>
	<para>
Si vous voulez configurer plusieurs IP sous Mac OS X, vous devrez utiliser 
la commande suivante :
	</para>
<programlisting> <![CDATA[
sudo ifconfig lo0 alias 10.0.0.80 netmask 255.255.0.0
]]> </programlisting>
	<para>
Il y a plus d'info sur les
<ulink url="http://docs.info.apple.com/article.html?artnum=106418">
documents AppleCare</ulink>
	</para>
	<para>
Roberto Nibali <emphasis>ratz (at) drugphish (dot) ch</emphasis> 20 Nov 2002
	</para>
	<para>
Oui, j'ai fais une présentation il y a un an à peu près et je me souviens que 
l'un des spectateurs avait un G4 tout neuf avec Mac OS X. Cà avait marché parfaitement.
	</para>
	<blockquote>
Est ce que une interface loopback fonctionne ?
	</blockquote>
	<para>
Oui, mais vous n'en avez pas besoin.
OS X est BSDish, vous devez utiliser la syntaxe BSDish :
	</para>
<programlisting> <![CDATA[
ifconfig lo0 alias VIP netmask 255.255.255.255 -arp up
]]> </programlisting>
	<para>
Malcolm Turnbull <emphasis>Malcolm.Turnbull (at) crocus (dot) co (dot) uk</emphasis> 22 Nov 2002
	</para>
	<blockquote>
		<para>
Pour les faire marcher :
		</para>
		<itemizedlist>
			<listitem>
		Solaris:

<programlisting> <![CDATA[
ifconfig lo0:1 plumb
ifconfig lo0:1 <vip-addr> netmask 255.255.255.255 up
]]> </programlisting>
			</listitem>
			<listitem>
Mac OS X:
<programlisting> <![CDATA[
ifconfig lo0 alias VIP netmask 255.255.255.255 -arp up
]]> </programlisting>
			</listitem>
		</itemizedlist>
	</blockquote>
	</section>
</section>
</section>
<section id="example_LVS-NAT">
<title>Example 1: LVS utilisant la redirection LVS-NAT</title>
<para>
LVS-NAT était la première méthode utilisée pour mettre en place un LVS.
Pour les kernels 2.2 sur le directeur, il est moins efficace pour de grosse charge
comparé à LVS-DR ou LVS-Tun, à cause de l'ajout de la réécriture des paquets,
mais est toujours utile dans certaines circonstances.
Pour les kernels 2.4 sur le directeur, les performances de LVS-NAT
sont meilleur.
</para>
<para>
Mettre en place un LVS avec deux réseaux (ici 192.168.1.0/24 et 192.168.2.0/24)
en utilisant une seul carte réseau sur chaque machine.
(Pour les testes, ne mettez pas d'autres IP sur les machines).
Le VIP sur l' alias ethernet (eth0:110) est mis en place par le 
<link linkend="configure_script">script de configuration</link>,
<emphasis>i.e.</emphasis>, n'ajoutez pas le VIP. Il ne devrait pas y avoir de 
route par défaut, et toutes les interfaces sur le réseau 192.168.1.0/24 devrait 
pouvoir ce pinguer. Le client ne doit pas pouvoir se connecter 
tant que le VIP n'est pas activé sur le directeur.
</para>
<programlisting>
<![CDATA[
                        ________
                       |        |
                       | client |
                       |________|
                    CIP=DGW=192.168.2.254 (eth0)
                           |
                           |
             __________    |
            |          |   |   (VIP=192.168.2.110,eth0:110)
            | director |---|
            |__________|   |   DIP=SGW=192.168.1.9(eth0)
                           |
                           |
          -----------------------------------
          |                                 |
          |                                 |
  RIP=192.168.1.11(eth0)              RIP=192.168.1.12(eth0)
     ____________                        ____________
    |            |                      |            |
    | realserver |                      | realserver |
    |____________|                      |____________|
]]>
</programlisting>

	<section id="LVS-NAT_configure-script">
	<title>Installation avec le script de configuration</title>
	<warning>
		<para>
Le fichier <filename>configure</filename> a un bug avec LVS-NAT.
Il enlève la passerelle par défaut du directeur (qui devrait être
le routeur local). Vous allez être obligé de le remettre à la main.
(Le script enlève correctement la paserelle par défaut pour LVS-DR et LVS-Tun.
Pour voir les raisons pour lesquelles vous ne devez pas avoir de passerelle 
par défaut pour les directeurs sous LVS-DR et LVS-Tun 
regardez
<ulink url="http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS-HOWTO.LVS-DR.html#Pearthree">
conseil de sécurité : passerelle par défaut et routage avec LVS-DR/LVS-Tun
</ulink>.
Il serait mieux pour LVS-NAT d'avoir simplement une route de VIP:80 vers 0/0:0 plutôt 
qu'une route par défaut).
		</para>
	</warning>
	<para>
Pour les versions v0.9.x du script de configuration, utilisez 
le fichier conf lvs_nat.conf.one_NIC_two_network
	</para>

<programlisting>
<![CDATA[

#----------lvs_nat.conf------------------------------------
LVSCONF_FORMAT=1.1
LVS_TYPE=VS_NAT
INITIAL_STATE=on
CLEAR_IPVS_TABLES=yes
#
#VIP line format - device[:alias] IP netmask broadcast
#To help avoid namespace collisions with other VIPs, I set alias=last number of VIP (here 110).
VIP=eth0:110 192.168.2.110 255.255.255.0 192.168.2.255
#
#DIP line format - device[:alias] IP network netmask broadcast
DIP=eth0 192.168.1.9 192.168.1.0 255.255.255.0 192.168.1.255
#
#DIRECTOR_GW - packets with src_addr=VIP, dst_addr=0/0 are sent to DIRECTOR_GW
#to be forwarded to the outside world.
DIRECTOR_GW=192.168.2.254
#
#SERVICE line format - proto port scheduler IP|name:port[,weight] [IP|name:port[weight]]
SERVICE=t telnet rr 192.168.1.11:telnet 192.168.1.12:telnet
#SERVICE=t http rr 192.168.1.11:http,1 192.168.1.12:http,2
#
SERVER_NET_DEVICE=eth0
#VS-NAT real-servers do not have a VIP, i.e. there is no SERVER_VIP_DEVICE
#SERVER_VIP_DEVICE=
#SERVER_GW is not user configurable with LVS-NAT. script sets SERVER_GW = DIP
#SERVER_GW=
#----------end lvs_nat.conf---------------------------------
]]>
</programlisting>

	<para>puis lancez le script de configuration </para>

<programlisting>
<![CDATA[
$./configure lvs_nat.conf
]]>
</programlisting>

	<para>celà va créer (entre autre) un fichier rc.lvs_nat (ou rc.lvs).</para>

	<para>
Lancez ce fichier rc.lvs_nat en premier sur le directeur puis sur les deux serveurs réels
(le fichier sait s'il est sur le directeur ou un serveur réel et agit en sorte). 
L'un des pièges dans l'installation d'un LVS-NAT est que vous devez faire du directeur
la route par défaut pour le les serveurs réels (le script le fait pour vous) mais çà ne 
marchera pas si vous ne faites pas celà.
	</para>
	</section>

	<section id="LVS-NAT by hand">
	<title>Installation à la main</title>

	<para>Lancez ce script sur le directeur.</para>

<programlisting>
<![CDATA[
#!/bin/sh
#------mini-HOWTO-setup-LVS-NAT-director----------

#set ip_forward ON for vs-nat director (1 on, 0 off).
cat /proc/sys/net/ipv4/ip_forward
echo "1" >/proc/sys/net/ipv4/ip_forward

#director is gw for realservers
#turn OFF icmp redirects (1 on, 0 off)
echo "0" >/proc/sys/net/ipv4/conf/all/send_redirects
cat       /proc/sys/net/ipv4/conf/all/send_redirects
echo "0" >/proc/sys/net/ipv4/conf/default/send_redirects
cat       /proc/sys/net/ipv4/conf/default/send_redirects
echo "0" >/proc/sys/net/ipv4/conf/eth0/send_redirects
cat       /proc/sys/net/ipv4/conf/eth0/send_redirects

#setup VIP
/sbin/ifconfig eth0:110 192.168.2.110 broadcast 192.168.2.255 netmask 255.255.255.0

#set default gateway
/sbin/route add default gw 192.168.2.254 netmask 0.0.0.0 metric 1

#clear ipvsadm tables
/sbin/ipvsadm -C

#install LVS services with ipvsadm
#add telnet to VIP with rr sheduling
/sbin/ipvsadm -A -t 192.168.2.110:telnet -s rr

#first realserver
#forward telnet to realserver 192.168.1.11 using LVS-NAT (-m), with weight=1
/sbin/ipvsadm -a -t 192.168.2.110:telnet -r 192.168.1.11:telnet -m -w 1
#check that realserver is reachable from director
ping -c 1 192.168.1.11

#second realserver
#forward telnet to realserver 192.168.1.12 using LVS-NAT (-m), with weight=1
/sbin/ipvsadm -a -t 192.168.2.110:telnet -r 192.168.1.12:telnet -m -w 1
#checking if realserver is reachable from director
ping -c 1 192.168.1.12

#list ipvsadm table
/sbin/ipvsadm
#------mini-HOWTO-setup-LVS-NAT-director----------
]]>
</programlisting>

	<para>Lancez ce script sur les serveurs réels</para>

<programlisting>
<![CDATA[
#!/bin/sh
#---------mini-HOWTO-setup-LVS-NAT-realserver-------
#installing default gw 192.168.1.9 for vs-nat'
/sbin/route add default gw 192.168.1.9
#show routing table
/bin/netstat -rn

#checking if DEFAULT_GW is reachable
ping -c 1 192.168.1.9

#looking for VIP on director from realserver
ping -c 1 192.168.2.110

#set_realserver_ip_forwarding to OFF (1 on, 0 off).
echo "0" >/proc/sys/net/ipv4/ip_forward
cat       /proc/sys/net/ipv4/ip_forward

#---------mini-HOWTO-setup-LVS-NAT-realserver-------
]]>
</programlisting>

	</section>

	<section id="test_LVS-NAT">
        <title>Opération de testes LVS-NAT</title>

	<para>
Sur le directeur lancez la commande
	</para>

<programlisting>
<![CDATA[
$ipvsadm
]]>
</programlisting>
<para>
La sortie devrait être quelque chose comme
</para>
<programlisting>
<![CDATA[
director:/lvs/conf# ipvsadm
IP Virtual Server version 0.9.14 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port          Forward Weight ActiveConn InActConn
TCP  192.168.2.110:telnet rr
  -> 192.168.1.11:telnet          Masq    1      0          0
  -> 192.168.1.12:telnet          Masq    1      0          0
]]>
</programlisting>

    <para>
Maintenant faites un telnet du client vers 192.168.2.110. 
Vous aurez la demande de login pour l'un des serveurs réels notez lequel). 
Maintenant relancez ipvsadm sur le directeur.
	</para>

<programlisting>
<![CDATA[
director:/lvs/conf# ipvsadm
IP Virtual Server version 0.9.14 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port          Forward Weight ActiveConn InActConn
TCP  192.168.2.110:telnet rr
  -> 192.168.1.11:telnet          Masq    1      1          0
  -> 192.168.1.12:telnet          Masq    1      0          0
]]>
</programlisting>

	<para>
Notez que le compteur ActiveConn a augmenté.
	</para>

	<para>
Ouvrez une autre fenètre sur le client et faites un telnet sur 192.168.2.110.
Vous devriez tomber sur la demande de login de l'autre serveur réel.
Re lancez ipvsadm.
	</para>

<programlisting>
<![CDATA[
director:/lvs/conf# ipvsadm
IP Virtual Server version 0.9.14 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port          Forward Weight ActiveConn InActConn
TCP  192.168.2.110:telnet rr
  -> 192.168.1.11:telnet          Masq    1      1          0
  -> 192.168.1.12:telnet          Masq    1      1          0
]]>
</programlisting>

	<para>
Il y a maintenant 2 connections active.
	</para>

	<para>
Vous ètes maintenant connecté aux serveurs réels par une session telnet.
Félicitations - vous avez mis en place un LVS-NAT pour le service telnet.
	</para>
	</section>

	<section id="telnet_LVS-NAT">
	<title>Setup de LVS-NAT pour le service http</title>
	<para>
Vérifiez que les serveurs réels servent le http, ils écoutent sur le port 80 sur leur
propre IP. (la RIP, <emphasis>e.g.</emphasis> 192.168.1.11, 192.168.1.12)
<emphasis>i.e.</emphasis> sur une IP différentes pour chaque serveur réel.
Faites les deux pages un peu différentes pour voir sur quelle machine 
vous vous connectez.
	</para>

    <para>
Changez le fichier conf en décommetant la ligne http et en commentant la ligne telnet.
    </para>

<programlisting>
<![CDATA[
#SERVICE=t telnet rr 192.168.1.11telnet 192.168.1.12:telnet
SERVICE=t http rr 192.168.1.11:http 192.168.1.12:http
]]>
</programlisting>

    <para>
Relancez le script de configuration sur le nouveau fichier conf, relancez le
fichier <filename>rc.lvs</filename> sur le directeur et sur les serveurs réels.
	</para>
	
	<para>ou
	</para>

	<para>
Pour la configuration à la main, remplacez telnet par http, dans le script du directeur, 
vous n'avez pas besoin de relancer les scripts des serveurs réels.
    </para>

	<para>Si vous n'avez pas d'erreur lancez ipvsadm</para>

<programlisting>
<![CDATA[
director:/lvs/conf# ipvsadm
IP Virtual Server version 0.9.14 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port          Forward Weight ActiveConn InActConn
TCP  192.168.2.110:www rr
  -> 192.168.1.11:www             Masq    1      0          0
  -> 192.168.1.12:www             Masq    1      0          0
]]>
</programlisting>

	<para>
Dirigez votre client http vers 192.168.2.110. Si vous recevez la page web 
attendu, rechargez plusieurs fois, et regardez les pages alterner 
sur les serveurs réels. Dans certains cas, supposèment à cause de la 
persistence du http, les connections continuerons sur un serveur réel.
Dans ce cas utilisez lynx, curl ou telnet vers 192.168.2.110 80 et
à la ligne de commande tapez
    </para>

<programlisting>
<![CDATA[
GET /
]]>
</programlisting>

	<para>pour utiliser lynx faites </para>

<programlisting>
<![CDATA[
$ lynx -dump http://192.168.2.110/
]]>
</programlisting>


	<para>Relancez ipvsadm (sur le directeur)</para>

<programlisting>
<![CDATA[
director:/lvs/conf# ipvsadm
IP Virtual Server version 0.9.14 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port          Forward Weight ActiveConn InActConn
TCP  192.168.2.110:www rr
  -> 192.168.1.11:www             Masq    1      0          13
  -> 192.168.1.12:www             Masq    1      0          12
]]>
</programlisting>

	<para>
Contrairement à telnet il n'y a pas de ActiveConn bien qu'il y ai une page 
affichée chez le client. Le http se déconnecte après 15secs 
rendant donc les connexions InActConn. Les InActConn disparaisent au bout de 
2 mins (relancez ipvsadm après 2 mins et InActConn devrait être à 0).
	</para>

	<para>
Les timeout peuvent être vu en utilisant la commande ipchains -L -M -n (pour les kernels 2.2,
pour les kernels 2.4 et plus d'info voir le HOWTO).
	</para>
	</section>
</section>

<section id="example_lvs_dr">
<title>Example: Setup de LVS utilisant la redirection LVS-DR</title>

<para>
Mettre en place un LVS avec un simple réseau (ici 192.168.1.0/24)
sur des machines avec une carte réseau.
Les IPs sur les aliases ethernet (eg eth0:110, lo:0) sont mis en place
par le script de configuration. Il ne doit pas y avoir de routes 
par défaut et toutes les machines doivent pouvoir se pinger.
</para>

<programlisting>
<![CDATA[
                        ________
                       |        |
                       | client |
                       |________|
                   CIP=SGW=192.168.1.254 (eth0)
                           |
                           |
             __________    |
            |          |   |   (VIP=192.168.1.110, eth0:110)
            | director |---|
            |__________|   |   DIP=192.168.1.9 (eth0)
                           |
                           |
          -----------------------------------
          |                                 |
          |                                 |
 RIP=192.168.1.11(eth0)             RIP=192.168.1.12(eth0)
(VIP=192.168.1.110, lo:0)          (VIP=192.168.1.110, lo:0)
    ____________                       ____________
   |            |                     |            |
   | realserver |                     | realserver |
   |____________|                     |____________|
]]>
</programlisting>

	<section id="telnet_LVS-DR">
	<title>VS-DR for the service telnet</title>
	<para>
Pour les versions v0.9.x du script de configuration,
utilisez le fichier conf lvs_drt.conf.one_NIC_one_network
	</para>

<programlisting>
<![CDATA[
#----------lvs_dr.conf----------------------------------------
LVSCONF_FORMAT=1.1
LVS_TYPE=VS_DR
INITIAL_STATE=on
CLEAR_IPVS_TABLES=yes
#VIP line format - device[:alias] IP netmask broadcast
#To help avoid namespace collisions with other VIPs, I set alias=last number of VIP (here 110).
#note: for LVS-DR, LVS-Tun, the IP is in a /32 network
VIP=eth0:110 192.168.1.110 255.255.255.255 192.168.1.110
#DIP line format - device[:alias] IP network netmask broadcast
DIP=eth0:9 192.168.1.9 192.168.1.0 255.255.255.0 192.168.1.255
#no DIRECTOR_GW for LVS-DR or LVS-Tun
#DIRECTOR_GW=
#SERVICE line format - proto port scheduler IP[,weight] [IP[,weight]]
SERVICE=t telnet rr 192.168.1.11 192.168.1.12
#SERVICE=t http rr 192.168.1.11 192.168.1.12
SERVER_VIP_DEVICE=lo:110
SERVER_NET_DEVICE=eth0
#SERVER_GW - packets with src_addr=VIP, dst_addr=0/0 are sent to SERVER_GW
#to be forwarded to the outside world.
#For standard LVS-DR,VS-Tun, this must _NOT_ be the director.
#For Julian's martian modification (see the HOWTO), it will be the director.
#If you don't know about the martian modification, you aren't using it.
#The script will not neccesarily set up the SERVER_GW as the real-servers's default gw.
SERVER_GW=192.168.1.254
#----------end lvs_dr.conf------------------------------------
]]>
</programlisting>

	<para>puis</para>

<programlisting><![CDATA[
$./configure lvs_dr.conf
]]>
</programlisting>

	<para>celà va créer (entre autre) un fichier rc.lvs_dr</para>
	<para>
Lancez le fichier rc.lvs_dr en premier sur le directeur puis sur les 
deux serveurs réels (le fichier sait s'il est exécuté sur le directeur ou un serveur réel
et agit en sorte).
	</para>
	</section>

	<section id="lvs_dr_by_hand">
	<title>Setup à la main</title>
	<para>
Sur le directeur lancez ce script
	</para>

<programlisting>
<![CDATA[
#!/bin/bash
#---------------mini-rc.lvs_dr-director------------------------
#set ip_forward OFF for lvs-dr director (1 on, 0 off)
#(there is no forwarding in the conventional sense for LVS-DR)
cat       /proc/sys/net/ipv4/ip_forward
echo "0" >/proc/sys/net/ipv4/ip_forward

#director is not gw for realservers: leave icmp redirects on
echo 'setting icmp redirects (1 on, 0 off) '
echo "1" >/proc/sys/net/ipv4/conf/all/send_redirects
cat       /proc/sys/net/ipv4/conf/all/send_redirects
echo "1" >/proc/sys/net/ipv4/conf/default/send_redirects
cat       /proc/sys/net/ipv4/conf/default/send_redirects
echo "1" >/proc/sys/net/ipv4/conf/eth0/send_redirects
cat       /proc/sys/net/ipv4/conf/eth0/send_redirects

#add ethernet device and routing for VIP 192.168.1.110
/sbin/ifconfig eth0:110 192.168.1.110 broadcast 192.168.1.110 netmask 255.255.255.255
/sbin/route add -host 192.168.1.110 dev eth0:110
#listing ifconfig info for VIP 192.168.1.110
/sbin/ifconfig eth0:110

#check VIP 192.168.1.110 is reachable from self (director)
/bin/ping -c 1 192.168.1.110
#listing routing info for VIP 192.168.1.110
/bin/netstat -rn

#setup_ipvsadm_table
#clear ipvsadm table
/sbin/ipvsadm -C
#installing LVS services with ipvsadm
#add telnet to VIP with round robin scheduling
/sbin/ipvsadm -A -t 192.168.1.110:telnet -s rr

#forward telnet to realserver using direct routing with weight 1
/sbin/ipvsadm -a -t 192.168.1.110:telnet -r 192.168.1.11 -g -w 1
#check realserver reachable from director
ping -c 1 192.168.1.12

#forward telnet to realserver using direct routing with weight 1
/sbin/ipvsadm -a -t 192.168.1.110:telnet -r 192.168.1.12 -g -w 1
#check realserver reachable from director
ping -c 1 192.168.1.12

#displaying ipvsadm settings
/sbin/ipvsadm

#not installing a default gw for LVS_TYPE vs-dr
#---------------mini-rc.lvs_dr-director------------------------
]]>
</programlisting>
	<para>
Pat Villani <emphasis>Pat (dot) Villani (at) hp (dot) com</emphasis> 09 Oct 2004	</para>
	<blockquote>
J'utilise l'exemple de VS-DR du mini-HOWTO. Une des premières étapes 
est d'éteindre l'ip_forward. Pourquoi ? Il semble que çà marche sans cette étape
et en plus le faire interfère avec mon service NAT.
	</blockquote>
	<para>
Je l'ai juste éteind parce que vous n'en avez pas besoin pour LVS-DR,
et que l'éteindre rend votre machine plus sûr. 
Vous pouvez l'allumer si vous avez des raisons de le faire.
	</para>
	<para>Sur les serveurs réels lancez ce script</para>

<programlisting>
<![CDATA[
#!/bin/bash
#----------mini-rc.lvs_dr-realserver------------------
#installing default gw 192.168.1.254 for vs-dr
/sbin/route add default gw 192.168.1.254
#showing routing table
/bin/netstat -rn
#checking if DEFAULT_GW 192.168.1.254 is reachable
ping -c 1 192.168.1.254

#set_realserver_ip_forwarding to OFF (1 on, 0 off).
echo "0" >/proc/sys/net/ipv4/ip_forward
cat       /proc/sys/net/ipv4/ip_forward

#looking for DIP 192.168.1.9
ping -c 1 192.168.1.9

#looking for VIP (will be on director)
ping -c 1 192.168.1.110

#install_realserver_vip
/sbin/ifconfig lo:110 192.168.1.110 broadcast 192.168.1.110 netmask 0xffffffff up
#ifconfig output
/sbin/ifconfig lo:110
#installing route for VIP 192.168.1.110 on device lo:110
/sbin/route add -host 192.168.1.110 dev lo:110
#listing routing info for VIP 192.168.1.110
/bin/netstat -rn

#hiding interface lo:110, will not arp
echo "1" >/proc/sys/net/ipv4/conf/all/hidden
cat       /proc/sys/net/ipv4/conf/all/hidden
echo "1" >/proc/sys/net/ipv4/conf/lo/hidden
cat       /proc/sys/net/ipv4/conf/lo/hidden

#----------mini-rc.lvs_dr-realserver------------------
]]>
</programlisting>

	</section>

	<section id="test_LVS-DR">
	<title>Test LVS-DR operation</title>
	<para>Puis sur le directeur lancez la commande</para>

<programlisting>
<![CDATA[
$ipvsadm
]]>
</programlisting>

	<para>
La réponse devrait être quelque chose comme
	</para>

<programlisting>
<![CDATA[
director:/lvs/conf# ipvsadm
IP Virtual Server version 0.9.14 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port          Forward Weight ActiveConn InActConn
TCP  192.168.1.110:telnet rr
  -> 192.168.1.11:telnet          Route    1      0          0
  -> 192.168.1.12:telnet          Route    1      0          0
]]>
</programlisting>

	<para>Notez que la méthode de forwarding a changé de Masq à Route.</para>

	<para>
Maintenant faites un telnet du client vers 192.168.1.110. Vous obtiendrez la
demande de login d'un des serveurs réels (notez lequel). Puis relancez ipvsadm.
</para>

<programlisting>
<![CDATA[
director:/lvs/conf# ipvsadm
IP Virtual Server version 0.9.14 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port          Forward Weight ActiveConn InActConn
TCP  192.168.1.110:telnet rr
  -> 192.168.1.11:telnet          Route    1      1          0
  -> 192.168.1.12:telnet          Route    1      0          0
]]>
</programlisting>

	<para>
Si vous avez lancé des tcpwrappers autour de telnet sur les serveurs réels,
le login sera retardé d'un interval de 7 secs(Slackware)
et 3mins(RedHat). Vous pouvez changez çà en changeant la ligne dans 
le fichier inetd.conf.
	</para>

<programlisting><![CDATA[
de
telnet  stream  tcp     nowait  root    /usr/sbin/tcpd  in.telnetd

vers
telnet  stream  tcp     nowait  root    /usr/sbin/in.telnetd  in.telnetd
]]>
</programlisting>

	<para>
et de relancer (re-HUPing) inetd. Si vous avez un telnetd et login
"pam-ifié" vous ne pourrez jamais réparé se retard (le manuel de 
RedHat 6.2 dit de changer des entrées dans le fichier /etc/pam.conf, 
un fichier qui n'existe pas).
	</para>

	<para>
Après s'être logger, la session telnet se comporte normalment. Ce délai 
n'est qu'une nuisance mineur, mais il est difficile de la différencier
d'un ralentissement de connexion dû à une mauvaise configuration.
Ce délai n'existe pas avec LVS-NAT (voir la section sur identd dans le
HOWTO pour une explication).
	</para>

	<para>
Ouvrez une autre fenètre sur le client et faites un telnet sur 192.168.1.110.
Vous devez avoir la demande de connection de l'autre serveur réel.
Relancez ipvsadm.
	</para>

<programlisting><![CDATA[
director:/lvs/conf# ipvsadm
IP Virtual Server version 0.9.14 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port          Forward Weight ActiveConn InActConn
TCP  192.168.1.110:telnet rr
  -> 192.168.1.11:telnet          Route    1      1          0
  -> 192.168.1.12:telnet          Route    1      1          0
]]>
</programlisting>

	<para>Il y a maintenant 2 connexions active.</para>

	<para>
Vous ètes maintenant connecté aux serveurs réels par une session telnet normal.
Fèlicitations - vous avez mis en place un LVS-DR pour le service telnet.
	</para>
	</section>

	<section id="http_LVS-DR">
	<title>Setup de LVS-DR pour le service http</title>

	<para><emphasis role="bold">IMPORTANT:</emphasis>
Veillez à ce que le httpd sur les serveurs réels écoutent le VIP:80 
(ici 192.168.1.110:80)
<emphasis>i.e</emphasis> les deux serveurs réels écoutent
la <emphasis role="bold">même IP</emphasis>.
La connection du client va arriver sur VIP:80 sur le serveur réel.
Il faut que vous mettiez en place le VIP sur le lo:0 avant
que le https ne démarre.
(Vous pouvez aussi mettre le httpd écouter sur le RIP 
, ici 192.168.1.11 ou 192.168.1.12, si vous préférez, 
mais ces IPs ne sont pas impliqué dans le LVS.) 
Faites les pages sur les serveurs réels différentes pour que vous puissiez 
savoir sur laquelle vous ètes connecté. 
	</para>
    <para>
Changez le fichier conf en ajoutant le ligne httpd et en 
commentant la ligne telnet.
	</para>

<programlisting><![CDATA[
#----------lvs_dr.conf------------------------------------
#SERVICE=t telnet rr 192.168.1.11 192.168.1.12
SERVICE=t http rr 192.168.1.11 192.168.1.12
#----------end lvs_dr.conf------------------------------------
]]></programlisting>

    <para>
Relancez le script de configuration sur le fichier conf, relancez
le fichier <filename>rc.lvs</filename> sur le directeur
et sur les serveurs réels.
    </para>
	<para>ou</para>
    <para>
Si vous le mettez en place à la main, changez le telnet par http et relancez le script
sur le directeur. Vous n'avez pas besoin de relancez le script sur les serveurs réels.
    </para>
    <para>
Si vous n'avez pas d'erreurs, lancez ipvsadm.
	</para>

<programlisting><![CDATA[
>director:/lvs/conf# ipvsadm
IP Virtual Server version 0.9.14 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port          Forward Weight ActiveConn InActConn
TCP  192.168.1.110:www rr
  -> 192.168.1.11:www             Route    1      0          0
  -> 192.168.1.12:www             Route    1      0          0
]]>
</programlisting>

	<para>
Connectez votre client http client à 192.168.1.110. Si vous avez la page
attendu, recharger plusieurs fois, vous verez les pages web alterner entre les 
serveurs réels. Dans certains cas, supposément dû à une persistance
de http, les connexions vont passées sur un serveur.
Dans ce cas utilisez lynx ou telnet vers 192.168.1.110 80 et dans la 
demande de commande tappez
	</para>

<programlisting><![CDATA[
GET /
]]>
</programlisting>

	<para>pour utiliser lynx faites</para>

<programlisting>
<![CDATA[
$ lynx -dump http://192.168.1.110/
]]>
</programlisting>

	<para>Relancez ipvsadm (sur le directeur)</para>

<programlisting><![CDATA[
>director:/lvs/conf# ipvsadm
IP Virtual Server version 0.9.14 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port          Forward Weight ActiveConn InActConn
TCP  192.168.1.110:www rr
  -> 192.168.1.11:www             Route    1      0          5
  -> 192.168.1.12:www             Route    1      0          4
]]></programlisting>

    <para>
Contrairement à telnet il n'y pas de ActiveConn bien que des pages se soit affichées
sur le client. Le protocole http déconnecte après 15secs (max). 
Les connexions changent vers InActConn et expire
au bout de 2 mins. Si vous relancez ipvsadm après 2 mins les InActConn seront à 0.
	</para>

	<para>
Félicitations, c'est fini. Allez faire la fête. Pour plus d'information allez
voir le HOWTO ou les docs sur le site LVS et regardez dans les archives des mails. 
Si vous avez une question, rejoignez la mailing list.
	</para>
	</section>
</section>

<section id="other_users">
<title>Comment d'autres utilisateurs ont fait</title>

	<section id="browning">
	<title>Dan Browning, LVS-DR sur Red Hat 7.2: traitement ARP, autres problèmes divers</title>

	<para>
Le post original est ici : 
<ulink url="http://marc.theaimsgroup.com/?l-linux-virtual-server&amp;m=101027363828375&amp;w">
lvs mailing list archives</ulink>
	</para>

	<para>Dan Browning <emphasis>db (at) kavod (dot) com</emphasis> 2002-01-05</para>

    <para>
Okay, c'est la dernière fois que je post ici, c'est promis.  :-)  La dernière fois 
j'ai été un peu vite pour envoyer le mail, donc cette fois j'envoie *toutes* les 
instructions (plus ou moins) que j'ai faites pour mettre en place un LVS-DR 
sur une Red Hat 7.2.
	</para>

    <para>
J'espère que çà servira à quelqu'un un jour. Prochain projet : 
reprise du directeur automatique après échec...
	</para>

<programlisting>
<![CDATA[
mkdir ~/download/piranha
cd ~/download/piranha
wget \

ftp://ftp.linux.org.uk/pub/linux/piranha/7.2/piranha/piranha-0.6.0-15.i386.rpm \
ftp://ftp.linux.org.uk/pub/linux/piranha/7.2/ipvsadm/ipvsadm-1.18-8.i386.rpm \
ftp://ftp.linux.org.uk/pub/linux/piranha/7.2/scsi_reserve/scsi_reserve-0.7-6.i386.rpm \
        -c
rpm -Uvh *.rpm

chkconfig piranha-gui on
service piranha-gui restart

piranha-passwd homelast

# If you will be using two directors (that need to sync seemlessly)
# Setup keyless scp on all the nodes:
ssh-keygen -t rsa
cat .ssh/id_rsa.pub | ssh SERVERNAME 'cat >>~/.ssh/authorized_keys2'

# Helpful Documentation
http://ha.redhat.com/docs/high-availability/index.html
http://www.linuxvirtualserver.org/docs/arp.html
http://www.linux-vs.org/~julian/hidden.txt

# Enabling IP Encapsulation
# On each real server, establish a tunnel between it and each virtual
server address. For example, these commands establish two tunnels (tunl0
and # # tunl1) to two virtual server addresses...
# To prevent real servers, rather than the active router,
# from intercepting ARP broadcasts, you also need to hide
# tunnels from ARP broadcasts. For example, these commands
# hide tunnels tunl0:

# Insert the ipip module, if not statically compiled into the kernel
already
insmod ipip
# Make the tunl0 device up
ifconfig tunl0 0.0.0.0 up
# Start the hiding interface functionality
echo 1 > /proc/sys/net/ipv4/conf/all/hidden
# Hide all addresses for this tunnel device
echo 1 > /proc/sys/net/ipv4/conf/tunl0/hidden
# Configure a VIP on an alias of tunnel device
ifconfig tunl0:0 1.2.3.4 up

# Testing
lynx --dump http://VIP/test
ab -n 100 -c 10 http://VIP/index.html

Environment: Red Hat 7.2, Piranha 0.6.0-15, RH stock kernel (2.4.7-10)

                       ________
                      |        |
                      | client |
                      |________|
                      CIP=5.6.7.8
                           |
                           |
                           |
                      __________
                     |          |
                     | Internet |
                     |__________|
                           |
                           |
                           |
                      VIP=1.2.3.4 (eth0:1)
                      __________
                     |          |
                     | director |
                     |__________|
                      DIP=1.2.3.5 (eth0)
                           |
                           |
          /---------------------------------\
          |                |                |
          |                |                |
  RIP1=1.2.3.10        N/A (yet)        N/A (yet)
   _____________     _____________    _____________
  |             |   |             |  |             |
  | realserver  |   | realserver  |  | realserver  |
  |_____________|   |_____________|  |_____________|

###############
##   DETAILS:
###############
Setup the Director:

Install Piranha, lvsadm
Configure like so:

serial_no = 38
primary = 1.2.3.4
service = lvs
backup = 0.0.0.0
heartbeat = 1
heartbeat_port = 539
keepalive = 6
deadtime = 18
network = direct
reservation_conflict_action = preempt
debug_level = NONE
virtual http {
     active = 1
     address = 1.2.3.5 eth1
     port = 80
     send = "GET / HTTP/1.0\r\n\r\n"
     expect = "HTTP"
     load_monitor = none
     scheduler = wlc
     protocol = tcp
     timeout = 6
     reentry = 15
     quiesce_server = 0
     server www4real {
         address = 1.2.3.10
         active = 1
         weight = 1
     }
}

        IP Virtual Server version 0.8.1 (size=65536)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port             Forward Weight ActiveConn InActConn
TCP  1.2.3.5:80 rr
  -> 1.2.3.10:80               Route   1      0          0

CURRENT LVS PROCESSES
root      1992  0.0  0.0  1604  600 ?        S    15:45   0:00 pulse
root      2295  0.0  0.0  1604  600 ?        S    15:45   0:00
/usr/sbin/lvs --nofork -c /etc/sysconfig/ha/lvs.cf
root      2299  0.0  0.0  1640  648 ?        S    15:45   0:00
/usr/sbin/nanny -c -h 1.2.3.10 -p 80 -s GET / HTTP/1.0\r\n\r\n -

## Notes for recompiling 2.4.17 with ipvs and hidden patches on Red Hat 7.2 ##
## (On both real server and the director)

# Download directory
export D=/tmp/download

mkdir $D
cd $D

#kernel
wget http://www.kernel.org/pub/linux/kernel/v2.4/linux-2.4.17.tar.gz

#hidden patch
wget http://www.linux-vs.org/~julian/hidden-2.4.5-1.diff

#IPVS patch
wget
http://www.linuxvirtualserver.org/software/kernel-2.4/linux-2.4.12-ipvs-
0.8.2.patch.gz

#net filter module - if you want to do just the module instead of the
big kernel patch above.
wget
http://www.linuxvirtualserver.org/software/kernel-2.4/ipvs-0.8.2.tar.gz

#ipvs admin
wget ftp://rpmfind.net/linux/redhatbeta/ha/i386/ipvsadm-1.17-2.i386.rpm

# Unpack new kernel
tar zxvf linux-2.4.17.tar.gz

# Unpack ipvs patch
gunzip linux-2.4.12-ipvs-0.8.2.patch.gz

# Unpack kernel
mv linux /usr/src/linux-2.4.17
cd /usr/src

# Recreate symlink
rm -f linux-2.4
ln -s linux-2.4.17 linux-2.4
ln -s linux-2.4.17 linux

# Apply "hidden" patch
cd linux-2.4.17
patch -p1 < $D/hidden-2.4.5-1.diff

Should see:
###############################
patching file include/linux/inetdevice.h
patching file include/linux/sysctl.h
Hunk #1 succeeded at 334 (offset 9 lines).
patching file net/ipv4/arp.c
Hunk #3 succeeded at 754 (offset -1 lines).
patching file net/ipv4/devinet.c
Hunk #1 succeeded at 756 (offset 20 lines).
Hunk #2 succeeded at 1013 (offset -4 lines).
Hunk #3 succeeded at 1079 (offset 20 lines).
patching file Documentation/filesystems/proc.txt
Hunk #1 succeeded at 1583 (offset 5 lines).
patching file Documentation/networking/ip-sysctl.txt
###############################

# Apply ipvs patch
patch -p1 < $D/linux-2.4.12-ipvs-0.8.2.patch

# ipvsadm 1.18-8, which is newer, is already installed (from piranha
project)

make clean
make mrproper
make menuconfig
make bzImage
make modules
make modules_install
make install #doesn't support GRUB yet.  - or can copy the
arch/i386/boot/bzImage file manually
vi /boot/grub/grub.conf:
title 2.4.17_ipvs
        root (hd0,0)
        kernel /boot/vmlinuz-2.4.17 ro root=/dev/sda1

#now copy the /usr/src/linux-2.4.17 to the next linux box:
tar czf linux-2.4.17-dir.tgz /usr/src/linux-2.4.17/

scp linux-2.4.17-dir.tgz SERVER_TWO:/usr/src

#now unpack in SERVER_TWO
tar zxvf linux-2.4.17-dir.tgz
cd linux-2.4.17
make modules_install
make install
# do grub config again.
title 2.4.17_ipvs
        root (hd0,0)
        kernel /boot/vmlinuz-2.4.17 ro root=/dev/sda1
# reboot!
]]>
</programlisting>

	</section>
	<section id="palmer">
	<title>Jezz Palmer, setup d'un LVS squid</title>

	<para> Jezz Palmer <emphasis>J (dot) D (dot) F (dot) Palmer (at) swansea (dot) ac (dot) uk</emphasis> 29 May 2002,
pour mettre en place un squid LVS.
	</para>

	<para>
Les directeurs tournent avec des kernels 2.4.18
Les serveurs réels avec des 2.4.7 (standard RH 7.2 mais recompilé). Squid ne marche pas avec
2.4.18 ou 2.4.17 pour quelque raison.
	</para>

    <para>
Premièrement, j'ai créé le directeur.
J'ai utilisé les instructions écrites par Dan Browning (plus haut) pour configurer le kernel.
Note, j'ai seulement utilisé le bit de configuration du kernel, je l'ai édité pour
2.4.18 et les versions suivantes de ipvsadm et le patch et quelques autres choses.
	</para>

	<para>
Notes pour recompiler 2.4.18 avce ipvs et le patch "hidden" sur Red Hat 7.2
	</para>

<programlisting>
<![CDATA[
# Download directory
export D=/tmp/download

mkdir $D
cd $D

#kernel
wget http://www.kernel.org/pub/linux/kernel/v2.4/linux-2.4.18.tar.gz

#hidden patch
wget http://www.linux-vs.org/~julian/hidden-2.4.5-1.diff

#IPVS patch
wget
http://www.linuxvirtualserver.org/software/kernel-2.4/linux-2.4.18-ipvs-1.0.
0.patch.gz

#ipvs admin
wget
http://www.linuxvirtualserver.org/software/kernel-2.4/ipvsadm-1.20.tar.gz

#Unpack and install ipvsadm admin
tar xvzf  ipvsadm-1.20.tar.gz
cd ipvsadm
make install

# Unpack new kernel
tar zxvf linux-2.4.18.tar.gz

# Unpack ipvs patch
gunzip linux-2.4.18-ipvs-1.0.0.patch.gz

# Unpack kernel
mv linux /usr/src/linux-2.4.18
cd /usr/src

# Recreate symlink
rm -f linux-2.4
ln -s linux-2.4.18 linux-2.4
ln -s linux-2.4.18 linux

# Apply "hidden" patch
cd linux-2.4.18
patch -p1 < $D/hidden-2.4.5-1.diff

Should see:
###############################
patching file include/linux/inetdevice.h
patching file include/linux/sysctl.h
Hunk #1 succeeded at 334 (offset 9 lines).
patching file net/ipv4/arp.c
Hunk #3 succeeded at 754 (offset -1 lines).
patching file net/ipv4/devinet.c
Hunk #1 succeeded at 756 (offset 20 lines).
Hunk #2 succeeded at 1013 (offset -4 lines).
Hunk #3 succeeded at 1079 (offset 20 lines).
patching file Documentation/filesystems/proc.txt
Hunk #1 succeeded at 1583 (offset 5 lines).
patching file Documentation/networking/ip-sysctl.txt
###############################

# Apply ipvs patch
patch -p1 < $D/ linux-2.4.18-ipvs-1.0.0.patch

make clean
make mrproper

# At this stage I copied the default config (matching my system) from the
original RH 7.2 kernel  to .config so save me time selecting modules.

cp /usr/src/linux-2.4.7-10/configs/kernel-2.4.7-i686-smp.config ./.config

make menuconfig
]]>
</programlisting>

<para>
Laissez toutes les autres options de la même façon mais allez à ...
</para>
<programlisting>
<![CDATA[
Networking Options -> IP: Virtual Server Configuration and build in [*]
virtual server support [EXPERIMENTAL]
]]>
</programlisting>
<para>
et acceptez les defauts.
</para>

<programlisting>
<![CDATA[

make bzImage
make modules
make modules_install
make install #doesn't support GRUB yet.  - or can copy the
arch/i386/boot/bzImage file manually
vi /boot/grub/grub.conf:
title 2.4.18_ipvs
	root (hd0,0)
	kernel /boot/vmlinuz-2.4.18 ro root=/dev/****

#If you have two (or more) directors with the same hardware then copy to the
new kernel to them,

tar czf linux-2.4.18-dir.tgz /usr/src/linux-2.4.18/
scp linux-2.4.18-dir.tgz SERVER_TWO:/usr/src

#now unpack in SERVER_TWO
tar zxvf linux-2.4.18-dir.tgz
cd linux-2.4.18
make modules_install
make install
# do grub config again.
title 2.4.18_ipvs
	root (hd0,0)
	kernel /boot/vmlinuz-2.4.17 ro root=/dev/****
# reboot!
]]>
</programlisting>
	<para>
Si le matériel est substanciellement différent alors refaites le processus en utilisant
le bon fichier par défaut de 
/usr/src/linux-2.4.7-10/configs/
	</para>
	<para>Serveurs Réels.</para>
	<para>
Pour les serveurs réels j'ai juste répété le processus ci-dessus mais avec le kernel
par défaut (2.4.7) fourni avec RH 7.2. Le patch ipvsadm n'est pas nécessaire
mais bon c'est ce que j'ai fait. Cà marcherais sûrement quand même
sans le patch ipvsadm mais juste le "hidden" patch.
	</para>
	<para>Le faire marcher.</para>
	<para>
J'utilise LVS-DR.
Au départ, j'ai décidé de mettre en place un LVS http en utilisant un directeur
et trois serveurs réels http.
Http simplement parce que c'est plus facile d'être certain s'il marche ou pas.
Donc j'ai mis en place Apache sur les trois machine, et fait des pages d'accueil 
pour afficher le nom de la machine.
Puis j'ai utilisé le script de configuration de Joe Mack avec ma config 
pour générer le script rc.lvs pour le lancer sur les machines LVS.
J'ai téléchargé configure-lvs_0.9.2 de
http://www.linuxvirtualserver.org/Joseph.Mack/configure-lvs_0.9.2.tar.gz
	</para>
	<para>Il nécessite Net-DNS-0.19, que j'ai téléchargé de
http://www.perl.com/CPAN-local/authors/id/B/BB/BBB/Net-DNS-0.19.tar.gz
	</para>
    <para>Donc après avoir "détaré" et installé Net-DNS-0.19, j'ai "détaré" le fichier
        configure-lvs_0.9.2.tar.gz.
	</para>
<programlisting>
<![CDATA[
tar xvzf configure-lvs_0.9.2.tar.gz
cd configure-lvs_0.9.2
]]>
</programlisting>
	<para>
J'ai ensuite choisie le réseau le plus proche de ma configuration parmi la douzaine d'exemples
et je l'ai édité pour qu'il ressemble à çà. Celui que j'ai choisi est 
lvs_dr.conf.one_NIC_one_network. (Les IPs, etc supprimées).
	</para>

<programlisting>
<![CDATA[
#----------lvs_dr.conf----------------------------------------
LVSCONF_FORMAT=1.1
LVS_TYPE=VS_DR
INITIAL_STATE=on
CLEAR_IPVS_TABLES=yes
#VIP line format - device[:alias] IP netmask broadcast
#To help avoid namespace collisions with other VIPs, I set alias=last number
of VIP (here 110).
#note: for LVS-DR, LVS-Tun, the IP is in a /32 network
VIP=eth0:110 my_vip 255.255.255.255 my_vip
#DIP line format - device[:alias] IP network netmask broadcast
DIP=eth0:9 my_dip my_dip_network 255.255.255.0 my_dip_broadcast
#no DIRECTOR_GW for LVS-DR or LVS-Tun
#DIRECTOR_GW=
#SERVICE line format - proto port scheduler IP[,weight] [IP[,weight]]
SERVICE=t http rr rip1,1 rip2,1 rip3,1
SERVER_VIP_DEVICE=lo:110
SERVER_NET_DEVICE=eth0
#SERVER_GW - packets with src_addr=VIP, dst_addr=0/0 are sent to SERVER_GW
#to be forwarded to the outside world.
#For standard LVS-DR,VS-Tun, this must _NOT_ be the director.
#For Julian's martian modification (see the HOWTO), it will be the director.
#If you don't know about the martian modification, you aren't using it.
#The script will not neccesarily set up the SERVER_GW as the real-servers's default gw.
SERVER_GW=my_server_gw
#----------end lvs_dr.conf------------------------------------
]]>
</programlisting>

	<para>
J'ai utilisé le script de configuration pour généré le script rc.lvs.
	</para>
	<para>./configure lvs_dr.conf.one_NIC_one_network</para>

    <para>Le script <filename>rc.lvs</filename> a été lancé sur la machine local
        et a été copié sur tous les autres serveurs du LVS.
	</para>

	<para>Maintenant en tapant ipvsadm vous devriez voir quelque chose comme çà.
	</para>

<programlisting>
<![CDATA[
[root@director1 root]# ipvsadm
IP Virtual Server version 1.0.0 (size=65536)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  vip:80 rr
  -> rip1:80                      Route   1      0          0
  -> rip2:80                      Route   1      0          0
  -> rip3:80                      Route   1      0          0
]]>
</programlisting>

	<para>
Puis pour le tester allez sur une autre machine et tappez http://vip
(ou ce qu'est votre VIP), vous devriez avoir un écran montrant le nom du premier serveur 
dans la liste, continuez à cliquez sur rechargez et vous verrez le nom changer
comme il parcours la liste des serveurs réels. Celà ne marche qu'avec le planning de
rr mais c'est une preuve que çà marche.
	</para>

	<para>Prochaine étape, l'appliquer à squid. Eek!</para>

    <para>
Premièrement j'ai changé le fichier de config pour les serveurs et les ports de squid.
	</para>

<programlisting>
<![CDATA[
#----------lvs_dr.conf----------------------------------------
LVSCONF_FORMAT=1.1
LVS_TYPE=VS_DR
INITIAL_STATE=on
CLEAR_IPVS_TABLES=yes
#VIP line format - device[:alias] IP netmask broadcast
#To help avoid namespace collisions with other VIPs, I set alias=last number
of VIP (here 110).
#note: for LVS-DR, LVS-Tun, the IP is in a /32 network
VIP=eth0:110 vip 255.255.255.255 vip
#DIP line format - device[:alias] IP network netmask broadcast
DIP=eth0:9 dip dip_network 255.255.255.0 dip_broadcast
#no DIRECTOR_GW for LVS-DR or LVS-Tun
#DIRECTOR_GW=
#SERVICE line format - proto port scheduler IP[,weight] [IP[,weight]]
SERVICE=t squid rr rip1,1 rip2,1
SERVER_VIP_DEVICE=lo:110
SERVER_NET_DEVICE=eth0
#SERVER_GW - packets with src_addr=VIP, dst_addr=0/0 are sent to SERVER_GW
#to be forwarded to the outside world.
#For standard LVS-DR, LVS-Tun, this must _NOT_ be the director.
#For Julian's martian modification (see the HOWTO), it will be the director.
#If you don't know about the martian modification, you aren't using it.
#The script will not neccesarily set up the SERVER_GW as the real-servers's default gw.
SERVER_GW=server_gw
#----------end lvs_dr.conf------------------------------------
]]>
</programlisting>

	<para>
Puis relancez.
	</para>

<programlisting>
<![CDATA[
./configure lvs_dr.conf.one_NIC_one_network
]]>
</programlisting>

	<para>
Et lancez le script <filename>rc.lvs</filename> en résultant sur tout les serveurs 
dans le LVS, note je n'ai que 2 serveurs réels dans la configuration de squid.
    </para>

	<para>
Cà donne une sortie de ipvsadm comme çà
	</para>

<programlisting>
<![CDATA[
[root@director1 root]# ipvsadm
IP Virtual Server version 1.0.0 (size=65536)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  vip:3128 rr
  -> rip1:3128                    Route   1      0          0
  -> rip2:3128                    Route   1      0          0
]]>
</programlisting>

    <para>
(De la part de Joe - à ce moment les serveurs réels, mis en place par le script de configuration, 
sont empéché d'accéder à un serveur web sur Internet.
Ce problème est expliqué dans la section 3-Tier du HOWTO et à amené la 
version suivante du script de configuration.)
    </para>
    <para>
Dans le même temps, j'ai découvert que si je redémarrais le réseau sur les serveurs réels
après que le script <filename>rc.lvs</filename> ait été exécuté alors les serveurs réels 
pouvaient accéder au monde extérieur.
Aussi pendant ce temps Joe travaillait sur les altérations du script de configuration
que j'ai posé à propos du test de squid et écrivait des scripts pour traiter 
les échecs des serveurs réels et l'introduction d'un directeur de backup.
	</para>
	
	<para>
A ce moment, j'avais un suid LVS qui utilisait le planning rr, celà mes 
vite apparu que le planning rr n'allait pas fonctionner tout seul.
Quelques site HTTPS (<emphasis>e.g.</emphasis> services banquaire)
n'accepterons pas des requètes d'un client avec plusieurs adresses IP
j'ai donc essayé des plannificateur différents et l'utilisation de persistance 
pour que le LVS distribue de façon satisfaisante pour tout les sites.
(Joe - c'est décrit plus amplement dans le HOWTO la section des services sous squid.)
	</para>

	<para>
J'ai trouvé que wlc avec une persistance de 360 secondes marche parfaitement.
Celà assure que les requètes d'un client particulier sont envoyé au même 
serveur réel pour 6 mins. Le timeout peut être augmenté, mais la plupart des services
banquaires couperont la connexion si l'inactivité dépasse quelques minutes.
	</para>

<programlisting>
<![CDATA[
[root@director1 root]# ipvsadm
IP Virtual Server version 1.0.0 (size=65536)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  vip:3128 wlc -p 360
  -> rip1:3128                    Route   1      0          0
  -> rip2:3128                    Route   1      0          0
]]>
</programlisting>
	</section>
	<section id="two_box_lvs">
	<title>LVS à deux machines</title>
	<para>
Il est possible de mettre en place deux machines pour avoir une tolérence de panne
complètement fonctionnelle. Quand l'une des machines est le directeur, elle est aussi un 
serveur réel avec une noeud local et l'autre est un autre serveur réel. 
Les deux machines ont un code de tolérence de panne pour leur permettre 
d'échanger les rôles de directeur. 
C'est un peu trop compliqué pour l'une de vos premières mise en place et 
en pratique il y a des problèmes avec la gestion du failover. 
Ils sont étudiés dans la 
<ulink url="http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS-HOWTO.localnode.html">
section noeud local du HOWTO 
http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS-HOWTO.localnode.html#two_box_lvs
</ulink>
	</para>
	</section>
</section>
<section id="problems"><title>Et s'il y a des problèmes</title>
	<section id="compile_doesnt_work">
        <title>Peut pas patcher le kernel, peut pas compiler le kernel patché, 
            peut pas compiler ipvsadm</title>
	<itemizedlist>
		<listitem>
Utilisez vous le <link linkend="fresh_kernel">kernel standard</link>?
		</listitem>
		<listitem>
Est ce que votre version de ip_vs correspond à celle du kernel
		</listitem>
		<listitem>
Est ce que votre ipvsadm vient de l'archive de votre version de ip_vs.
		</listitem>
	</itemizedlist>
	</section>
	<section id="cant_compile_ipvsadm">
	<title>Je ne peut pas compiler ipvsadm</title>
	<para>
Vous avez (probablement) installé un binaire kernel 
et quand vous avez essayé de compiler <command>ipvsadm</command>,
vous avez eux des messages d'erreur pour des fichiers header manquant.
	</para>
	<para>
Problème: Vous n'avez pas les fichier header du kernel 
(dans<filename>/usr/src/linux/include/linux/</filename>) 
relié à 
<filename>/usr/include/linux/</filename>. 
	</para>
	<para>
Solution: Installez vos fichiers header du kernel et faites le lien.
	</para>
	</section>
	<section id="ip_tables_doesnt_work">
	<title>ip_tables ne fonctionne pas</title>
	<para>
Symptome: Vous avez un 2.4.x
et vous récupérez des messages d'erreur pas clair et bizarre de la part de
<command>ip_tables</command> 
(<command>ip_tables</command> n'a pas de message clair) tel que
	</para>
<programlisting> <![CDATA[
ip_tables.o: init_module:
Device or resource busy
]]> </programlisting>
	<para>
Problème: Votre ipchains est chargé 
	</para>
	<para>
Solution:
<link linkend="iptables_ipchains">supprimer ipchains</link>
(<emphasis>i.e.</emphasis> déchargez 
avec la commande <command>rmmod ipchains.o</command>).
Vous devriez aussi enlever le support d'ipchains de votre kernel pour que
personne ne retombe dans le même piège.
	</para>
	</section>
	<section id="ipvsadm_doesnt_work">
	<title>ipvsadm renvoie des informations erronées</title>
	<para>
Symptome: Vous avez des nom de personne, numéro d'IP, ports, services incohérent dans
la sortie de la commande <command>ipvsadm</command>
	</para>
	<para>
Problème: votre ipvsadm ne correspond pas à votre version de ip_vs. (Vous avez peut être 
oublié de compiler la nouvelle version de ipvsadm après avoir redémarrer l'ordinateur
après le chargement du kernel patché pour LVS et donc vous utilisez une ancienne 
version de ipvsadm).
    </para>
	<para>
Solution: récupérez la version de ipvsadm qui correspond à votre ip_vs.
	</para>
	</section>
	<section id="doesnt_work"><title>Aidez moi! Mon LVS ne fonctionne pas</title>
	<para>
Mettre en place un LVS en partant de rien pour la première fois demande de la 
réflexion, c'est quelques fois fastidieux et pas évident et il y a beaucoup de
façon de faire des erreurs. 
Repérer le problème, il y a beaucoup de cas où LVS semble fonctionner, mais où vous ètes
en faite directement connecté au serveur réel au lieu de rediriger les paquets à travers
le directeur. Comprendre comment un LVS fonctionne vous demandera
d'investir du temps.
	</para>
	<para>
Notre réponse jusqu'à maintenant a été de traduire vos postes dans notre langage
puis d'essayer de deviner ce que vous avez fait de travers.
Nous n'avons pas eu de problème pour la mise en place d'un LVS basique 
depuis les premier temps, mais répondre toujours aux mêmes requètes prend
vraiment beaucoup de temps (Mais il y a toujours des postes sur le sujet de savoir si 
un LVS marche ou pas dont personne n'a encore pensé, ce qui nous interresse beaucoup).
Et puis de temps en temps après une dizaine d'échange avec 3 personnes de la mailing list
qui essaye de comprendre le problème, le posteur de départ se souvient soudainement qu'ils ont
des règles de filtrage (qu'ils aivaient "entièrement vérifiées" et sont sûrs qu'elles marchent)
dont ils avaient complètement oublié de nous parler. (ndt : Cà doit énerver)

	</para>
	<para>
Depuis 1999, des efforts substantiels ont été mis en place dans le HOWTO,
le mini-HOWTO et le script de configuration pour permettre à des personnes
avec peu ou pas de connaissance de mettre en place un LVS qui fonctionne.
Si vous ne voulez pas utilisez un script de configuration, il y a ici assez d'information 
pour que vous puissiez mettre en place un LVS qui fonctionne à partir des 
lignes de commande.
	</para>
	<para>
Nous avons malgré tout aussi besoin de nous occuper de nos boulots aussi,
donc j'aimerais essayer un truc nouveau: -
	</para>
	<para>
Si vous n'arrivez pas à mettre en place un LVS, avec 1 ou 2 serveurs réels telnet (ou httpd),
alors au lieu de nous demander de deviner ce que vous avez mal fait,
et si vous utilisiez les outils que nous avons fournis pour mettre en place un LVS basique.
Un fois que vous avez ce LVS basique qui fonctionne vous pouvez essayer de mettre 
en place un LVS à votre façon.
Si vous n'arrivez pas à faire fonctionner les scripts, alors nous 
essaierons de les réparer.
	</para>
	<para>
Si vous avez besoin de nous contacter, regardez avant les informations de rapport 
de problème (HOWTO) correspondant à votre problème.
	</para>
	</section>
	<section id="connection_refused">
	<title>Le client affiche "connection refused"</title>
	<para>
La machine qui reçoit le paquet de requète répond que elle
n'écoute pas pour ce service. Les raisons possible pour cela 
(avec l'aide de Ratz)
	</para>
	<itemizedlist>
		<listitem>
ipvsadm (sur le directeur) n'a pas ajouté le service à la table de redirection
(à voir dans la sortie de ipvsadm)
		</listitem>
		<listitem>
si le service est dans la table de ipvsadm, 
alors le directeur renvoie les paquets à un serveur réel, 
dont le service n'est pas en marche sur la VIP (pour LVS-DR et LVS-Tun)
ou la RIP (pour LVS-NAT).
		</listitem>
		<listitem>
une règle de filtrage de paquets
		</listitem>
		<listitem>
le service dest n'est pas disponible
		</listitem>
		<listitem>
le service n'est pas en marche sur le serveur réel
        </listitem>
		<listitem>
il y a une faute dans l'adresse IP
		</listitem>
		<listitem>
le cable réseu est débranché (vous devriez avoir la réponse icmp "host down")
		</listitem>
	</itemizedlist>
	</section>
	<section id="connection_hangs_entries_in_inactconn">
        <title>accrocchage de la connection, ipvsadm montre des connections InActConn, 
            mais pas de  ActiveConn</title>
	<para>
        L'erreur habituel est d'avoir la passerelle par défaut pour les serveurs réels mal 
        configurée.
	</para>
	<itemizedlist>
		<listitem>
LVS-NAT: la passerelle par défaut <emphasis>doit</emphasis> être le directeur.
Il ne peut <emphasis>pas</emphasis> y avoir un autre chemin vers le client 
autre que part le directeur.
		</listitem>
		<listitem>
LVS-DR, LVS-Tun: la passerelle par défaut ne peut <emphasis>pas</emphasis> être le directeur -
utilisez un router local.
		</listitem>
	</itemizedlist>
	<para>
	Si vous utilisez LVS-NAT et un réseau, vous devez aussi
<ulink url="http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS-HOWTO.LVS-NAT.html#one_network">
traiter les redirections ICMP</ulink>.
	</para>
	<para>
		<note>
		<para>
Billy <emphasis> ntadmin (at) reachone (dot) com</emphasis> 18 Mar 2004
		</para>
		<para>
Si votre LVS <emphasis role="bold">fonctionne</emphasis> 
et que vos connexions se déconnecte (comme avec http),
au moment où vous avez téléchargé la page, la 
connexion sera dans l'état InActConn.
Voir
<ulink url="http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS-HOWTO.services.single-
    port.html#http_stateless">
 httpd est sans état et ferme normallement les connexions</ulink>
(http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS-HOWTO.services.single-port.html#http_stateless).
Les connexions qui sont dans le mode InActConn est un diagnostic seulement si la connexion
est accroché
(<emphasis>i.e.</emphasis> le client ne reçoi pas les pages du LVS).
		</para>
		</note>
	</para>
	</section>
	<section id="connection_delayed">
	<title>La connection initial est retardé, mais une fois connecté tout marche bien</title>
	<para>
En général le problème vient de 
<ulink url="http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS-HOWTO.authd.html">
authd/identd</ulink>.
La chose la plus simple est d'arréter le service sur les serveurs réels et d'empécher
d'appeler le serveur identd sur le client
(<emphasis>i.e.</emphasis>déconnetez votre service de identd).
	</para>
	<para>
Un autre problème qui cause des ralentissement dans toutes les situations,
est le timeout du DNS sur un appel. Ideallement vous ne devriez pas avoir de DNS 
lancé sur les machines du LVS - vous aurez besoin d'éteindre le sendmail 
de etc <filename>/etc/hosts</filename>.
Toutefois si vous avez DNS, veillez à ce qu'il y a les entrées pour toutes les IPs
sur cette machine (si vous avez plusieurs interfaces)
et de chaque machine que vous appelerez.
Pour vérifier, lancez des commandes qui ont besoin de la résolution de nom
<emphasis>e.g.</emphasis> <command>netstat -a</command> 
(les entrées dans <filename>/etc/services</filename> sont nécessaires aussi) 
ou <command>route</command> (les entrées dans <filename>/etc/networks</filename> 
sont nécessaires aussi ). Si l'une d'entre elle pause, relancez les dans une
forme où elle n'ont pas besoin de la résolution de nom
(<command>netstat -an</command>, <command>route -n</command>) 
pour localiser les entrées forçant la pause - celles la n'ont pas besoin
de la résolution de nom.
	</para>
	</section>
	<section id="connection_still_delayed">
	<title>La connexion prend plusieurs secondes à se faire</title>
	<para>
J'ai eu des problèmes avec çà une fois quand mon routage était mauvais et que ICMP devait
le devinez pour moi.
Une autre possibilitée est un délai de la part d'un lookup DNS
Essayez de vous connectez au nom du VIP et à l'IP.
	</para>
	</section>
	<section id="only_one_realserver">
        <title>Mon LVS ne fait pas de balancement de charge, le client va toujours 
            sur le même serveur </title>
	<para>
Ceci est pour LVS-DR ou LVS-Tun. 
L'explication la plus probable est que vous n'avez pas résolu le  
<ulink url="http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS-HOWTO.arp_problem.html">problème arp</ulink>
(http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS-HOWTO.arp_problem.html).
Pour vérifier que vous l'avez fait vous pouvez 
<ulink url="http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS-HOWTO.arp_problem.html#testing_for_arp">
tester l'interface sur le serveur réel
</ulink>
(http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS-HOWTO.arp_problem.html#testing_for_arp).
	</para>
	</section>
	<section id="doesnt_work_2">
	<title>Mon LVS ne fonctionne toujours pas: je fais quoi maintenant ?</title>
	<para>
Si vous avez essayé le LVS telnet simple du mini-HOWTO LVS et que maintenant vous essayez
votre propre LVS, et qu'il ne marche pas, vous devez debugger votre installation.
	</para>
	<para>
Premièrement mettez votre serveur réel hors ligne (tirez le cable réseau)
et démarrez le service écoutant sur 
le RIP:port (VS-NAT) ou le VIP:port (VS-DR, LVS-Tun).
	<note>peut importe le service que vous utillisez en production,
mais un test telnet est plus facile à débugger.
Je sais bien que vous voulez essayer votre serveur
web shockwave super cool avec applets java,
mais vous aurez le temps plus tard.
Essayez avec telnet d'abord,  OK?
Cà va vous(et nous) éviter une série de question sur la mailing list.
	</note>
	</para>
	<para>
Vérifiez que le service (telnet donc) fonctionne (netstat -an).
Connectez vous au service depuis un client simple tournant sur un serveur réel
(eg telnet VIP 80, lynx VIP). Puis utiliser votre client habituel (un navigateur 
Internet). Veillez à ce que votre service puisse faire toutes les choses 
que vous voulez que le client sur Internet puisse faire.
	</para>
	<para>
Puis connectez le serveur réel au réseau LVS et mettez sa passerelle 
par défaut (vers le DIP pour LVS-NAT, vers le routeur pour LVS-DR, LVS-Tun),
ajoutez les VIP:services au directeur avec ipvsadm
(ou le script de configuration, voir le mini-HOWTO)
en utilisant le planning rr. Vérifiez que ipvsadm montre vos realserver:service.
	</para>
	<para>
Veillez à ce que vous n'ayez pas de pare-feu entre le client et le 
LVS, sinon tous les jeux sont finis.
	</para>
	<para>
Puis connectez vous au VIP:service depuis un client simple
(<emphasis>e.g.</emphasis> telnet VIP port), vérifiez que vous pouvez
atteindre tous les serveurs réels un à un (regardez avec le directeur avec ipvsadm).
Puis utilisez votre client habituel pour le service (eg un navigateur web).
	</para>
	<para>
Si vos requètes de connexion ne vous connectent pas, 
alors vous avez besoin de voir où les paquets sont stoppés.
Vous pouvez voir le paquets avec <command>tcpdump</command> ou
<command>netstat -an</command> (pour voir si la requète a quitté un noeud
où est arrivé à un autre et de voir si les réponses ont été faites).
	</para>
	</section>
</section>

</article>
