117908 visites
9 connectés
Enfin, j'ai quand meme un bout d'article, ... qui sera refait d'ici peu, comme d'hab ;-)
Le voici:
Cet article à pour but de vous présenter un cluster de type Load
balancing, en utilisant Linux Virtual Server.
Vous découvrirez le Failover LVS, et sa simplicité de mise en oeuvre.
Voici ce qu'il vous faudra pour pouvoir suivre cet article:
4 pc serait idéal, voire plus, cependant, il est possible d'utiliser
uniquement 3 pc. Sachez qu'il faudra recompiler le noyau pour un
support LVS, sur toutes les machines, donc, si vous avez dans les
300 jours d'uptime, oubliez !
Termes à connaitres pour suivre cet article:
-LVS: Linux Vritual Server ;-)
-Director: c'est le load balancer, c'est lui qui dirige les opérations
du LVS.
(petite machine)
-RealServer: c'est les serveurs qui seront utilisés pour le LVS.
(grosse machine)
-Client: ordinateur qui essayera le LVS :)
-Failover: Si une machine sur le lvs tombe en panne, il ne faut pas
quelle perturbe le lvs, elle est retirée du cluster jusqu'a qu'elle
réponds a nouveau.
Le patch kernel est disponible en paquet debian, sous woody et sid
(non testé sous potato). Vous devrez être root pour installer
le noyau,
et le patch.
root$> apt-get install kernel-patch-2.4-ipvs
Le patch s'est alors installé dans: /usr/src/kernel-patches/all/
Vous devrez avoir les sources d'un noyau 2.4.x "propre" pour
exécuter le patch.
Si vous n'avez pas les sources du noyau, faites comme suit: (plus de 20Mo)
root$> apt-get install kernel-source-2.4.18
Il vous faut décompresser l'archive .tar.bz2 contenant le noyau:
root$> cd /usr/src
root$> tar xvjf kernel-source-2.4.18.tar.bz2
Décompression terminée, allez dans le répertoire contenant les sources:
root$> cd /usr/src/kernel-source-2.4.18
Appliquez le patch LVS:
root$> /usr/src/kernel-patches/all/apply/ipvs
Une fois ipvs implanté dans le noyau, activez le:
(sortie issue du .config)
# support virtual server
CONFIG_IP_VS=y
# support debug
CONFIG_IP_VS_DEBUG=y
# masquerading VS table size
CONFIG_IP_VS_TAB_BITS=12
# support round robin scheduling
CONFIG_IP_VS_RR=y
# support weight round robin scheduling
CONFIG_IP_VS_WRR=y
# support least connexion scheduling
CONFIG_IP_VS_LC=y
# support weight least connexion scheduling
CONFIG_IP_VS_WLC=y
# support locality-based least connexion scheduling
CONFIG_IP_VS_LBLC=y
# support locality-based least connexion with replication scheduling
CONFIG_IP_VS_LBLCR=y
# support destination hashing scheduling
CONFIG_IP_VS_DH=y
# support source hashing scheduling
CONFIG_IP_VS_SH=y
# support FTP protocol helper
CONFIG_IP_VS_FTP=y
(ces options se trouvent dans: "Networking options")
N'oubliez pas de configurer le noyau pour qu'il puisse démarrer
et utiliser
votre machine correctement. Compilez et installez ce noyau patché.
(Si vous ne savez pas faire, consultez l'article sur la compilation
d'un noyau, sur le site: http://www.debian-fr.org/)
Installez maintenant ipvsadm, sur la machine qui sera le Director:
root@director$> apt-get install ipvsadm
Ceci fait, rebootez la machine avec le bon noyau ...
Connectez vous en root, tapez:
root$> dmesg | grep IPVS
Vous devriez avoir une sortie de ce style:
IPVS: Connection hash table configured (size=4096, memory=32Kbytes)
IPVS: Each connection entry needs 120 bytes at least
IPVS: ipvs loaded.
IPVS: [rr] scheduler registered.
IPVS: [wrr] scheduler registered.
IPVS: [lc] scheduler registered.
IPVS: [wlc] scheduler registered.
IPVS: [lblc] scheduler registered.
IPVS: [lblcr] scheduler registered.
IPVS: [dh] scheduler registered.
IPVS: [sh] scheduler registered.
Si ce n'est pas le cas, vérifiez que vous avez bien compilé
/ installé / booté
le noyau patché.
Mis a part l'installation d'ipvsadm, patchez un noyau, comme sur le director,
sur TOUT les pc qui vous servirons de RealServer.
Une fois toutes les machines redémarrées, nous attaquons
la configuration !!
Vous avez désormais besoin d'un script "configure" pour
tout simplifier:
root@director$> wget http://perso.debian-fr.org/ed/lvs/scripts.lvs.tar.gz
Si vous n'avez pas wget, votre navigateur internet favori
fera l'affaire, sans problèmes.
On attaque désormais les choses sérieuses, on va faire
un "plan"
de notre montage (5PC) en LVS_NAT.
--------
| CLIENT | connecté à INTERNET ou sur le lan LVS
--------
|
|
----------
| director | eth0 192.168.1.1 (facultatif)
---------- eth0:9 192.168.1.9
| eth0:110 192.168.2.110
|
|
...-----RealServers Lan---------...
| |
| |
--------- ---------
| server1 | | server2 |
--------- ---------
eth0 192.168.1.2 eth0 192.168.1.3
Éditons le fichier de configuration issue du tarball contenant
le script
de configuration en perl:
#----------lvs_nat.conf------------------------------------
#############################
# LVS FOR www.debian-fr.org #
# ------------------------- #
#############################
LVSCONF_FORMAT=1.1
LVS_TYPE=VS_NAT
INITIAL_STATE=on
CLEAR_IPVS_TABLES=yes
VIP=eth0:110 192.168.2.110 255.255.255.0 192.168.2.255
DIP=eth0:9 192.168.1.9 192.168.1.0 255.255.255.0 192.168.1.255
DIRECTOR_GW=192.168.2.253
SERVICE=t http wrr 192.168.1.2:http,1 192.168.1.3:http,1
SERVER_NET_DEVICE=eth0
#----------END---------------------------------------------
Explication sur ce fichier de configuration:
Nous ne tiendrons pas compte des 4 premières lignes, qui sont
des paramètres généraux. Seul le LVS_TYPE pourrais
être intéressant,
mais je n'ai pas essayé d'autres support que le nat pour lvs, je
ne pourrais pas donc expliquer un autre type de lvs, du style:
Linux Virtual Server direct routing, ou LVS tunnel ...
Si changer ces paramètres, je vous conseille de lire le HOWTO
LVS, en anglais: http://www.linuxvirtualserver.org/Documents.html#manuals
"VIP=..." Cette ligne concerne le director, elle sert a identifier
sur quelle interface, et à quelle adresse "écoutera"
le lvs pour des
requêtes "client".
"DIP=..." Cette ligne concerne le director et les realservers,
elle sert
à déterminer sur quelle adresse les realservers vont envoyer
les données,
et par conséquent, sur quelle adresse le director écoute
les realservers.
"DIRECTOR_GW=..." Adresse IP du PC qui recevra les connexions masqueradées.
Il faut désormais ajouter les ip alias sur le pc faisant office
de
director (ici, l'interface lan est eth0, ajustez a votre convenance).
root@director$> ifconfig eth0:9 192.168.1.9 netmask 255.255.255.0
broadcast 192.168.1.255
root@director$> ifconfig eth0:110 192.168.2.110 netmask 255.255.255.0
broadcast 192.168.2.255
Voila, il ne reste plus qu'a executer le script de configure.
root@director$> ./configure.pl lvs_nat.conf
Voila qui es fait, executons le fichier crée:
root@director$> ./rc.lvs
Vous devriez avoir une série de lignes défiler, puis se
terminer sans erreurs,
si ce n'est pas le cas, résolvez l'erreur en question !
Il faudra que vous ayez le rc.lvs sur toutes les machines realserver
aussi.
Nous allons donc procéder a l'installation d'un serveur NFS pour
partager
ce fichier:
Installons portmap sur TOUTES les machines:
root$ apt-get install portmap
Installons le serveurs NFS maintenant:
root@director$ apt-get install nfs-kernel-server
Il faut maintenant configurer le serveur nfs, par l'intermédiaire
du fichier /etc/exports:
#--NFS SERVER CONFIGURATION--#
#
/etc/lvs 192.168.1.0/24(ro,all_squash,anonuid=150,anongid=100)
#
#--End CONFIGURATION---------#
Cet exemple permet aux ordinateur sur le lan: 192.168.1.0 d'avoir access
au partage: /etc/lvs.
Si vous voulez la signification des autres paramètres, allez voir
la page
de manuel d'NFS: man exports ;-)
Reloadons la configuration du serveur nfs:
root@director$ /etc/init.d/nfs-kernel-server reload
Voila qui est fait, il faut monter le partage sur les RealServers
root@realserver$ mkdir /etc/lvs
root@realserver$ mount -t nfs ipserveurnfs:/etc/lvs /etc/lvs
Testons le montage:
root@realserver$ cd /etc/lvs
root@realserver$ ls
Vous devriez avoir les mêmes fichiers que sur le director.
Voila qui es fait pour le partage des fichiers de configuration LVS.
Lançons LVS sur les realservers:
root@realserver$ /etc/lvs/rc.lvs
votre LVS est désormais actif, allez sur un pc client, et tapez:
user@client$ lynx --dump 192.168.2.110
(si 192.168.2.110 est l'addresse du lvs, et si client est sur le rezo
192.168.2.0/24).
Refaites la manip avec lynx plusieurs fois:
user@client$ lynx --dump 192.168.2.110
user@client$ lynx --dump 192.168.2.110
user@client$ lynx --dump 192.168.2.110
Vous devriez tomber succéssivement sur chaque realserver ...
Regardons sur le director ce qu'il se passe:
root@director$ ipvsadm
Une sortie que j'ai obtenu:
(root@voyager:~/webmin-0.990)>>ipvsadm
IP Virtual Server version 1.0.3 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.2.110:80 wrr
-> 192.168.1.3:80 Masq 1 2 13
-> 192.168.1.2:80 Masq 1 3 10
Il est à noter que le script rc.lvs changera la route par défaut
sur les realservers, en y mettant la DIP a la place (chez moi 192.168.1.9).
Voila vous avez votre premier lvs de monté, vous pouvez maintenant
mettre
en place un mini failover.
J'ai crée un petit script tout simple en shell permettant de faire
du failover,
il nécessite l'utilitaire fping, et se lance en tant qu'utilisateur
root. (note: le failover du director n'est pas supporté, il faudra
utiliser un programme dédiée, comme heartbeat ...)
Pour l'utiliser, c'est très simple, il vous suffira d'editer le
script
et de parametrer pour vos valeurs, puis de lancer le script !
Son fonctionnement est aussi simple:
--- oui, on ne fait rien
/
--- positif, dans le lvs ? ---
/ \
/ --- non, on l'ajoute
Ping machineX ---
\ --- oui, on l'enleve
\ /
--- négatif, dans le lvs ? ---
\
--- non, on ne fait rien
Voila pour le failover, je vous laisse découvrir le script, et
l'améliorer pour vos besoins ;-)
Il reste cependant une étape pour tester correctement linux virtual
server: faire que le lvs soit accessible par internet, il vous faudra
donc une machine supplémentaire, et pour les tests, forcément,
un
compte sur le serveur d'un copain, avec un lynx installé dessus,
ou
toute autre machine reliée à internet (sauf la votre, bien
sur ;p)
(je tiends à préciser que cette astuce est un bidouillage
... a vos
risques et périls !!!! ^^)
Schéma du montage:
--------
| CLIENT | connecté à INTERNET ou sur le lan LVS
--------
|
|Internet
|
---------
| Gateway | eth0 192.168.1.2
--------- eth0 192.168.2.253
|
|
|
----------
| director | eth0 192.168.1.1 (facultatif)
---------- eth0:9 192.168.1.9
| eth0:110 192.168.2.110
|
|
...-----RealServers Lan---------...
| |
| |
--------- ---------
| server1 | | server2 |
--------- ---------
eth0 192.168.1.2 eth0 192.168.1.3
La "Gateway" doit avoir un access internet, et doit avoir un
serveur
apache compilé avec le module "mod_rewrite", accessible
depuis
internet, et relié au réseau contenant le director (ici
192.168.1.0/24).
Commencez par ajouter en tant qu'"ip alias" l'address client
(paramétré dans le script lvs.conf), donc, ici, 192.168.2.253:
root@gateway> ifconfig eth0 add 192.168.2.253
Nous allons toucher a apache désormais, editez votre configuration
apache (par défaut /etc/apache/httpd.conf sous debian), rajoutez
les
lignes suivantes (n'hésitez pas a modifier pour votre configuration
du
lvs ;))
<VirtualHost 62.212.107.2>
ServerName lvs.nerime.net
ServerAlias lvs.zehome.com
RewriteEngine On
RewriteRule ^/(.*) http://192.168.2.110/$1 [P]
</VirtualHost>
Relancez apache, testez, et logiquement admirez le résultat a l'aide
de lynx --dump répétés depuis une machine sur internet
! :)
XHTML 1.1 strict. Design & code par Laurent Coustet (générée en 0.000351s )




