Serveurs Web · 10 min read · Sep 10, 2025
Le Cluster Web Parfait Équilibré et Haute Disponibilité Avec 2 Serveurs Fonctionnant Sous Xen Sur Ubuntu 8.04 Hardy Heron
Le Cluster Web Parfait Équilibré et Haute Disponibilité Avec 2 Serveurs Fonctionnant Sous Xen Sur Ubuntu 8.04 Hardy Heron
Introduction
Ceci est un copier-coller de mon site : blogama.org
Dans ce guide, nous allons construire un cluster web équilibré et haute disponibilité sur 2 serveurs réels avec Xen, heartbeat et ldirectord. Le cluster gérera http, mail, DNS, base de données MySQL et sera complètement surveillé. Cela est actuellement utilisé sur un serveur de production avec quelques sites web.
L’objectif de ce tutoriel est d’atteindre l’équilibrage de charge et la haute disponibilité avec le moins de serveurs réels possible et bien sûr, avec des logiciels open-source. Plus de serveurs signifie plus de matériel et de coûts d’hébergement.
La plupart des informations que vous trouverez ici ont été copiées/collées d’une douzaine de guides, beaucoup d’entre eux provenant de howtoforge.com, mais certains détails importants ont été modifiés pour rendre cela possible et pour rassembler le tout.
Voici une liste rapide des services et applications qui seront installés :
- Apache
- MySQL + phpmyadmin
- Postfix (SMTP) avec configuration des utilisateurs basée sur le web et Spamassassin
- Courier (IMAP & POP) et squirrelmail
- Bind (serveur DNS)
- Munin et monit pour la surveillance basée sur le web
- Scripts faits maison pour la surveillance
Ce dont vous avez besoin
2 serveurs avec double lan, au moins 7 IPs. Les IPs seront utilisées comme ceci :
- dom01.example.com : 192.168.1.100
- dom02.example.com : 192.168.1.101
- lb1.example.com : 192.168.1.102
- lb2.example.com : 192.168.1.103
- web1.example.com : 192.168.1.104
- web2.example.com : 192.168.1.105
- example.com : 192.168.1.106
- yousite.com (optionnel) : 192.168.1.107
Dom0 sera séparé des équilibreurs de charge et des serveurs web. Je ne l’ai pas essayé mais je crois qu’il serait possible de mettre des équilibreurs de charge sur Dom0.
Je suggère au moins 2 Go de RAM et des disques durs en RAID 1 ou 10 pour un serveur de production.
Limitations
Cela a fonctionné pour moi. Cela ne signifie pas que cela fonctionnera pour vous, mais soyez assuré que le guide est testé à 100 % pour fonctionner sur un serveur de production et de test !
Cette configuration est évolutive sur 2 serveurs, mais vous devrez trouver un autre moyen pour la réplication MySQL si vous le faites.
Pas de panneau de contrôle tel que ISPConfig, CPanel, etc…
Certains sites web peuvent casser la réplication MySQL Master à Master. Cela m’est arrivé avec Drupal mais je l’ai corrigé soit en désactivant le cache soit en définissant une durée de vie minimale du cache. Veuillez lire ceci avant de continuer :
A : La réplication MySQL ne prend actuellement en charge aucun protocole de verrouillage entre le maître et l’esclave pour garantir l’atomicité d’une mise à jour distribuée (cross-server). En d’autres termes, il est possible que le client A effectue une mise à jour sur le co-maître 1, et entre-temps, avant qu’elle ne se propage au co-maître 2, le client B puisse effectuer une mise à jour sur le co-maître 2 qui fait que la mise à jour du client A fonctionne différemment de ce qu’elle a fait sur le co-maître 1. Ainsi, lorsque la mise à jour du client A atteint le co-maître 2, elle produit des tables qui sont différentes de ce que vous avez sur le co-maître 1, même après que toutes les mises à jour du co-maître 2 se soient également propagées. Cela signifie que vous ne devez pas enchaîner deux serveurs ensemble dans une relation de réplication bidirectionnelle à moins que vous ne soyez sûr que vos mises à jour peuvent se produire en toute sécurité dans n’importe quel ordre, ou à moins que vous ne preniez soin des mises à jour mal ordonnées d’une manière ou d’une autre dans le code client.
1. Installer Ubuntu
Faites une installation de base d’Ubuntu 8.04 LTS édition serveur.
Si vous souhaitez installer avec RAID logiciel 1, veuillez lire ce guide que j’ai écrit :
Installer Ubuntu 8.04 avec RAID logiciel 1
2. Installer Xen
Vous pouvez exécuter Xen à partir de fichiers image ou d’une partition dédiée. Les deux ont des avantages et des inconvénients.
À partir de fichiers image, l’I/O disque est plus lente mais il est plus facile de faire des sauvegardes et de gérer. C’est l’inverse lorsque vous travaillez sur une partition.
Ce que je suggère de faire, c’est de commencer avec un fichier image et de finir avec une partition lorsque votre configuration est terminée. De cette façon, vous pouvez faire des sauvegardes de vos fichiers image et revenir en arrière si nécessaire lors des tests.
Pour installer sur des fichiers image, veuillez vous référer à ce super tutoriel du maître des howto Falko :
Installer Xen sur un serveur Ubuntu 8.04 (Hardy Heron) à partir des dépôts Ubuntu
Pour installer directement sur une partition (ma version modifiée du howto de Falko) :
XEN Haute Performance Sur Un Système Serveur Ubuntu Hardy Heron (8.04) AMD64 ou i386
Vous devez créer 2 domaines Xen sur chaque serveur (dom01 et dom02 sont Dom0 ou contrôleur VM) :
serveur #1 - dom01.example.com
lb1.example.com (256 Mo de RAM - 5 Go de HD suffisent)
ip : 192.168.1.102
web1.example.com
(plus il y a de RAM, mieux c’est, gardez 512 Mo pour Dom0)
ip : 192.168.1.104
serveur #2 - dom02.example.com
lb2.example.com (256 Mo de RAM - 5 Go de HD suffisent)
ip : 192.168.1.103
web2.example.com (plus il y a de RAM, mieux c’est, gardez 512 Mo pour Dom0)
ip : 192.168.1.105
3. Création de ponts Xen pour les transferts de données locaux (optionnel)
Par défaut, une seule carte réseau est activée sur la machine virtuelle avec Xen. Pour les transferts locaux tels que rsync, la réplication MySQL et les sauvegardes, j’utilise un câble croisé gigabit entre les 2 serveurs. Ce n’est pas nécessaire mais cela fera économiser des coûts de bande passante et la réplication sera plus rapide.
Veuillez vous référer à ce guide pour créer un pont xen :
Créer de nouveaux ponts xen sur Ubuntu 8.04
Dans ce guide, l’IP utilisée sur la deuxième carte réseau (croisée) sera la suivante :
- dom01.example.com : 192.168.0.100
- dom02.example.com : 192.168.0.101
- lb1.example.com : 192.168.0.102
- lb2.example.com : 192.168.0.103
- web1.example.com : 192.168.0.104
- web2.example.com : 192.168.0.105
4. Préparation des nœuds (dom01, dom02, lb1, lb2, web1, web2)
4.1 Installer le serveur openssh et VIM
Exécutez :
sudo su apt-get install vim ssh openssh-server
4.2 Mettre à jour les dépôts
mv /etc/apt/sources.list /etc/apt/sources.list.bak
vi /etc/apt/sources.list
Faites en sorte que sources.list ressemble à ceci :
#
# deb cdrom:[Ubuntu-Server 8.04 _Hardy Heron_ - Release i386 (20080423.2)]/ hardy main restricted
#deb cdrom:[Ubuntu-Server 8.04 _Hardy Heron_ - Release i386 (20080423.2)]/ hardy main restricted
# Voir http://help.ubuntu.com/community/UpgradeNotes pour comment mettre à niveau vers
# des versions plus récentes de la distribution.
deb http://de.archive.ubuntu.com/ubuntu/ hardy main restricted
deb-src http://de.archive.ubuntu.com/ubuntu/ hardy main restricted
## Mises à jour majeures de correction de bogues produites après la version finale de la
## distribution.
deb http://de.archive.ubuntu.com/ubuntu/ hardy-updates main restricted
deb-src http://de.archive.ubuntu.com/ubuntu/ hardy-updates main restricted
## N.B. le logiciel de ce dépôt est ENTIÈREMENT NON SOUTENU par l'équipe Ubuntu,
et peut ne pas être sous une licence libre. Veuillez vous assurer de vos droits d'utiliser
le logiciel. Veuillez également noter que le logiciel dans
## universe NE RECEVRA PAS de révision ou de mises à jour de l'équipe de sécurité Ubuntu.
deb http://de.archive.ubuntu.com/ubuntu/ hardy universe
deb-src http://de.archive.ubuntu.com/ubuntu/ hardy universe
deb http://de.archive.ubuntu.com/ubuntu/ hardy-updates universe
deb-src http://de.archive.ubuntu.com/ubuntu/ hardy-updates universe
## N.B. le logiciel de ce dépôt est ENTIÈREMENT NON SOUTENU par l'équipe Ubuntu,
et peut ne pas être sous une licence libre. Veuillez vous assurer de vos droits d'utiliser
le logiciel. Veuillez également noter que le logiciel dans
## multiverse NE RECEVRA PAS de révision ou de mises à jour de l'équipe de sécurité Ubuntu.
deb http://de.archive.ubuntu.com/ubuntu/ hardy multiverse
deb-src http://de.archive.ubuntu.com/ubuntu/ hardy multiverse
deb http://de.archive.ubuntu.com/ubuntu/ hardy-updates multiverse
deb-src http://de.archive.ubuntu.com/ubuntu/ hardy-updates multiverse
## Décommentez les deux lignes suivantes pour ajouter des logiciels du dépôt 'backports'
## N.B. le logiciel de ce dépôt peut ne pas avoir été testé aussi
## largement que celui contenu dans la version principale, bien qu'il inclue
## des versions plus récentes de certaines applications qui peuvent fournir des fonctionnalités utiles.
## Veuillez également noter que le logiciel dans backports NE RECEVRA PAS de révision
## ou de mises à jour de l'équipe de sécurité Ubuntu.
# deb http://de.archive.ubuntu.com/ubuntu/ hardy-backports main restricted universe multiverse
# deb-src http://de.archive.ubuntu.com/ubuntu/ hardy-backports main restricted universe multiverse
## Décommentez les deux lignes suivantes pour ajouter des logiciels du dépôt 'partenaire' de Canonical.
## Ce logiciel ne fait pas partie d'Ubuntu, mais est
## proposé par Canonical et les fournisseurs respectifs comme un service aux utilisateurs d'Ubuntu.
# deb http://archive.canonical.com/ubuntu hardy partner
# deb-src http://archive.canonical.com/ubuntu hardy partner
deb http://security.ubuntu.com/ubuntu hardy-security main restricted
deb-src http://security.ubuntu.com/ubuntu hardy-security main restricted
deb http://security.ubuntu.com/ubuntu hardy-security universe
deb-src http://security.ubuntu.com/ubuntu hardy-security universe
deb http://security.ubuntu.com/ubuntu hardy-security multiverse
deb-src http://security.ubuntu.com/ubuntu hardy-security multiverseMaintenant faites :
apt-get update
apt-get upgrade
4.3 Modifications
/bin/sh est un lien symbolique vers /bin/dash, cependant nous avons besoin de /bin/bash, pas de /bin/dash. Par conséquent, nous faisons ceci :
ln -sf /bin/bash /bin/sh
Nous allons désactiver AppArmor (sur dom01 et dom02) en faisant ce qui suit :
/etc/init.d/apparmor stop
update-rc.d -f apparmor remove
5. Configuration réseau (dom01, dom02, lb1, lb2, web1, web2)
5.1 Configuration des IPs
Pour éditer la configuration réseau sous Ubuntu, faites :
vi /etc/network/interfaces
Nous allons maintenant faire chaque configuration réseau une par une. Je suppose que vous utilisez 2 cartes réseau, eth0 est celle connectée à Internet et eth1 celle avec le câble croisé. Je ne vais pas écrire le fichier de configuration individuellement, seulement pour dom01.example.com, veuillez modifier en conséquence cette liste :
dom01.example.com
eth0 : 192.168.1.100
eth1 : 192.168.0.100
dom02.example.com
eth0 : 192.168.1.101
eth1 : 192.168.0.101
lb1.example.com
eth0 : 192.168.1.102
eth1 : 192.168.0.102
lb2.example.com
eth0 : 192.168.1.103
eth1 : 192.168.0.103
web1.example.com
eth0 : 192.168.1.104
eth1 : 192.168.0.104
web2.example.com
eth0 : 192.168.1.105
eth1 : 192.168.0.105
Exemple de configuration réseau de dom01.example.com :
Faites en sorte que le fichier /etc/network/interfaces ressemble à ceci :
# Ce fichier décrit les interfaces réseau disponibles sur votre système
# et comment les activer. Pour plus d'informations, voir interfaces(5).
# L'interface réseau de boucle
auto lo
iface lo inet loopback
# L'interface réseau principale connectée à Internet
auto eth0
iface eth0 inet static
address 192.168.1.100
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
gateway 192.168.1.1
# L'interface réseau secondaire connectée par un câble croisé sur l'autre serveur
auto eth1
iface eth1 inet static
address 192.168.0.100
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255Maintenant, enregistrez le fichier et faites :
/etc/init.d/networking restart
5.2 Nom d’hôte
vi /etc/hosts
et faites-le ressembler à ceci, sinon vous aurez des problèmes avec ldirectord plus tard :
dom01.example.com
127.0.0.1 localhost.localdomain localhost
127.0.1.1 dom01.example.com dom01
192.168.1.101 dom02.example.com dom02
192.168.1.102 lb1.example.com lb1
192.168.1.103 lb2.example.com lb2
192.168.1.104 web1.example.com web1
192.168.1.105 web2.example.com web2
# Les lignes suivantes sont souhaitables pour les hôtes capables d'IPv6
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhostsecho dom01.example.com > /etc/hostname
/etc/init.d/hostname.sh start
dom02.example.com
127.0.0.1 localhost.localdomain localhost
127.0.1.1 dom02.example.com dom02
192.168.1.100 dom01.example.com dom01
192.168.1.102 lb1.example.com lb1
192.168.1.103 lb2.example.com lb2
192.168.1.104 web1.example.com web1
192.168.1.105 web2.example.com web2
# Les lignes suivantes sont souhaitables pour les hôtes capables d'IPv6
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhostsecho dom02.example.com > /etc/hostname
/etc/init.d/hostname.sh start
lb1.example.com
127.0.0.1 localhost.localdomain localhost
127.0.1.1 lb1.example.com lb1
192.168.1.100 dom01.example.com dom01
192.168.1.101 dom02.example.com dom02
192.168.1.103 lb2.example.com lb2
192.168.1.104 web1.example.com web1
192.168.1.105 web2.example.com web2
# Les lignes suivantes sont souhaitables pour les hôtes capables d'IPv6
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhostsecho lb1.example.com > /etc/hostname
/etc/init.d/hostname.sh start
lb2.example.com
127.0.0.1 localhost.localdomain localhost
127.0.1.1 lb2.example.com lb2
192.168.1.100 dom01.example.com dom01
192.168.1.101 dom02.example.com dom02
192.168.1.102 lb1.example.com lb1
192.168.1.104 web1.example.com web1
192.168.1.105 web2.example.com web2
# Les lignes suivantes sont souhaitables pour les hôtes capables d'IPv6
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhostsecho lb2.example.com > /etc/hostname
/etc/init.d/hostname.sh start
web1.example.com
127.0.0.1 localhost.localdomain localhost
127.0.1.1 web1.example.com web1
192.168.1.100 dom01.example.com dom01
192.168.1.101 dom02.example.com dom02
192.168.1.102 lb1.example.com lb1
192.168.1.103 lb2.example.com lb2
192.168.1.105 web2.example.com web2
# Les lignes suivantes sont souhaitables pour les hôtes capables d'IPv6
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhostsecho web1.example.com > /etc/hostname
/etc/init.d/hostname.sh start
web2.example.com
127.0.0.1 localhost.localdomain localhost
127.0.1.1 web2.example.com web2
192.168.1.100 dom01.example.com dom01
192.168.1.101 dom02.example.com dom02
192.168.1.102 lb1.example.com lb1
192.168.1.103 lb2.example.com lb2
192.168.1.104 web1.example.com web1
# Les lignes suivantes sont souhaitables pour les hôtes capables d'IPv6
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhostsecho web2.example.com > /etc/hostname
/etc/init.d/hostname.sh start
6. Installation des logiciels (dom01, dom02, lb1, lb2, web1, web2)
Exécutez :
apt-get install binutils cpp fetchmail flex gcc libarchive-zip-perl libc6-dev libcompress-zlib-perl libdb4.3-dev libpcre3 libpopt-dev lynx m4 make ncftp nmap openssl perl perl-modules unzip zip zlib1g-dev autoconf automake1.9 libtool bison autotools-dev g++ build-essential
Recevez de nouveaux articles dans votre boîte de réception.
Aucun spam. Désabonnez-vous à tout moment.