Installation serveur · 7 min read · Sep 28, 2025

Installation d'un cluster Web, Email et MySQL sur Debian 6.0 avec ISPConfig 3

Installation d’un cluster Web, Email et MySQL sur Debian 6.0 avec ISPConfig 3

Version 1.0
Auteur : Till Brehm

Ce tutoriel décrit l’installation d’un serveur web, email, base de données et DNS en cluster à utiliser pour la redondance, la haute disponibilité et l’équilibrage de charge sur Debian 6 avec le panneau de contrôle ISPConfig 3. La réplication MySQL Master/Master sera utilisée pour répliquer les bases de données MySQL des clients entre les serveurs et Unison sera utilisé pour synchroniser les dossiers /var/www (sites web) et /var/vmail (données des comptes email).

1 Configuration des deux systèmes de base

Dans cette configuration, il y aura un serveur maître (qui exécute l’interface du panneau de contrôle ISPConfig) et un serveur esclave qui reflète les services web (apache), email (postfix et dovecot) et base de données (MySQL) du serveur maître.

Pour installer la configuration en cluster, nous avons besoin de deux serveurs avec une installation minimale de Debian 6.0. La configuration de base est décrite dans le tutoriel suivant dans les étapes 1 - 8 :

https://www.howtoforge.com/perfect-server-debian-squeeze-with-bind-and-dovecot-ispconfig-3

Installez uniquement les étapes 1 - 8 du tutoriel du serveur parfait et non les autres étapes car elles diffèrent pour une configuration en cluster !

Dans mon exemple, j’utilise les noms d’hôtes et adresses IP suivants pour les deux serveurs :

Serveur Maître
Nom d’hôte : server1.example.tld
Adresse IP : 192.168.0.105

Serveur Esclave
Nom d’hôte : server2.example.tld
Adresse IP : 192.168.0.106

Chaque fois que ces noms d’hôtes ou adresses IP apparaissent dans les prochaines étapes d’installation, vous devrez les changer pour correspondre aux IP et noms d’hôtes de vos serveurs.

2 Installation des deux serveurs

Les étapes suivantes doivent être exécutées sur le serveur maître et sur le serveur esclave. Si une étape spécifique est uniquement pour le maître ou l’esclave, j’ai ajouté une note dans la description en rouge.

vi /etc/hosts
127.0.0.1       localhost
192.168.0.105   server1.example.tld
192.168.0.106   server2.example.tld

# Les lignes suivantes sont souhaitables pour les hôtes compatibles IPv6
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

Définissez le nom d’hôte du serveur :

echo server1.example.tld > /etc/hostname
/etc/init.d/hostname.sh start

Utilisez server1.example.tld sur le premier serveur et server2.example.tld sur le deuxième serveur.

Éditez le fichier sources.list…

vi /etc/apt/sources.list 

… et assurez-vous que votre /etc/apt/sources.list contient le dépôt squeeze-updates (cela garantit que vous obtenez toujours les dernières mises à jour pour le scanner de virus ClamAV - ce projet publie des versions très souvent, et parfois les anciennes versions cessent de fonctionner).

[...]  
deb http://ftp.de.debian.org/debian/ squeeze-updates main  
[...]  

Exécutez

apt-get update
apt-get upgrade

pour installer les dernières mises à jour (s’il y en a).

Il est judicieux de synchroniser l’horloge système avec un serveur NTP ( n etwork t ime p rotocol) sur Internet. Exécutez simplement

apt-get -y install ntp ntpdate

et votre heure système sera toujours synchronisée.

Sur le serveur 1 :

Maintenant, nous créons une paire de clés privée/publique sur server1.example.tld :

ssh-keygen -t dsa

root@server1:~# ssh-keygen -t dsa
Génération d’une paire de clés dsa publique/privée.
Entrez le fichier dans lequel enregistrer la clé (/root/.ssh/id_dsa) : <– ENTER
Répertoire créé ‘/root/.ssh’.
Entrez la phrase secrète (vide pour aucune phrase secrète) : <– ENTER
Entrez la même phrase secrète à nouveau : <– ENTER
Votre identification a été enregistrée dans /root/.ssh/id_dsa.
Votre clé publique a été enregistrée dans /root/.ssh/id_dsa.pub.
L’empreinte de la clé est :
1b:95:bc:4a:f4:9f:d8:ea:24:31:0f:c9:72:d5:a7:80 [email protected]
L’image aléatoire de la clé est :
+–[ DSA 1024]—-+
| |
| o o |
| E * . . |
| o = o o |
| . S o . |
| + O + . |
| + + + |
| o . |
| .o |
+—————–+
root@server1:~#

Il est important de ne pas entrer de phrase secrète sinon le mirroring ne fonctionnera pas sans interaction humaine, donc appuyez simplement sur ENTER !

Ensuite, nous copions notre clé publique sur server2.example.tld :

ssh-copy-id -i $HOME/.ssh/id_dsa.pub [email protected]

root@server1:~# ssh-copy-id -i $HOME/.ssh/id_dsa.pub [email protected]
L’authenticité de l’hôte ‘192.168.0.101 (192.168.0.101)’ ne peut pas être établie.
L’empreinte de la clé RSA est 25:d8:7a:ee:c2:4b:1d:92:a7:3d:16:26:95:56:62:4e.
Êtes-vous sûr de vouloir continuer à vous connecter (oui/non) ? <– oui (vous ne verrez cela que si c’est la première fois que vous vous connectez à server2)
Avertissement : ‘192.168.0.101’ (RSA) a été ajouté de façon permanente à la liste des hôtes connus.
[email protected] ‘s password: <– mot de passe root de server2
Essayez maintenant de vous connecter à la machine, avec “ssh ‘ [email protected] ‘“, et vérifiez dans :

 .ssh/authorized_keys
pour vous assurer que nous n'avons pas ajouté de clés supplémentaires que vous ne vous attendiez pas.

Vérifiez maintenant sur server2 si la clé publique de server1 a été correctement transférée :

server2 :

cat $HOME/.ssh/authorized_keys
ssh-dss AAAAB3NzaC1kc3MAAACBAPhiAexgEBexnw0rFG8lXwAuIsca/V+lhmv5lhF3BqUfAbL7e2sWlQlGhxZ8I2UnzZK8Ypffq6Ks+lp46yOs7MMXLqb7JBP9gkgqxyEWqOoUSt5hTE9ghupcCvE7rRMhefY5shLUnRkVH6hnCWe6yXSnH+Z8lHbcfp864GHkLDK1AAAAFQDddQckbfRG4C6LOQXTzRBpIiXzoQAAAIEAleevPHwi+a3fTDM2+Vm6EVqR5DkSLwDM7KVVNtFSkAY4GVCfhLFREsfuMkcBD9Bv2DrKF2Ay3OOh39269Z1rgYVk+/MFC6sYgB6apirMlHj3l4RR1g09LaM1OpRz7pc/GqIGsDt74D1ES2j0zrq5kslnX8wEWSHapPR0tziin6UAAACBAJHxgr+GKxAdWpxV5MkF+FTaKcxA2tWHJegjGFrYGU8BpzZ4VDFMiObuzBjZ+LrUs57BiwTGB/MQl9FKQEyEV4J+AgZCBxvg6n57YlVn6OEA0ukeJa29aFOcc0inEFfNhw2jAXt5LRyvuHD/C2gG78lwb6CxV02Z3sbTBdc43J6y [email protected]

Installez postfix, dovecot et mysql avec une seule commande :

apt-get -y install postfix postfix-mysql postfix-doc mysql-client mysql-server openssl getmail4 rkhunter binutils dovecot-imapd dovecot-pop3d sudo

Entrez le nouveau mot de passe pour l’utilisateur root MySQL lorsque demandé par l’installateur. Vous devriez choisir le même mot de passe pour les deux serveurs. Ensuite, répondez aux questions suivantes comme décrit ci-dessous :

Type général de configuration ? <– Site Internet
Nom de mail ? <– server1.mydomain.tld
Certificat SSL requis <– Ok

Utilisez server1.example.tld sur le premier serveur et server2.example.tld sur le deuxième serveur.

Nous voulons que MySQL écoute sur toutes les interfaces, pas seulement localhost, donc nous éditons /etc/mysql/my.cnf et commentons la ligne bind-address = 127.0.0.1 :

vi /etc/mysql/my.cnf
[...]  

# Au lieu de skip-networking, la valeur par défaut est maintenant d'écouter uniquement sur  
# localhost, ce qui est plus compatible et n'est pas moins sécurisé.  
#bind-address           = 127.0.0.1  

[...]  

Puis redémarrez MySQL :

/etc/init.d/mysql restart

Maintenant, nous préparons les serveurs MySQL pour la réplication mysql master/master.

Sur le serveur 1 :

Connectez-vous à MySQL dans le shell avec…

 mysql -u root -p

… et entrez le mot de passe root MySQL que vous avez choisi lors de l’installation de mysql. Ensuite, exécutez cette commande dans le shell MySQL :

GRANT REPLICATION SLAVE ON . TO ‘slaveuser’@’%’ IDENTIFIED BY ‘slave_user_password’;
FLUSH PRIVILEGES;
quit;

Remplacez ‘slave_user_password’ par un mot de passe sécurisé que vous souhaitez utiliser pour que l’esclave se connecte au serveur maître. Remplacez ce placeholder dans les prochaines étapes par le mot de passe que vous avez choisi chaque fois que le placeholder apparaît.

Configurons maintenant nos 2 nœuds MySQL :

Sur le serveur 1 :

vi /etc/mysql/my.cnf

Recherchez la section qui commence par [mysqld], et mettez les options suivantes dedans (en commentant toutes les options conflictuelles existantes) :

[...]  
[mysqld]  
server-id = 1  
replicate-same-server-id = 0  
auto-increment-increment = 2  
auto-increment-offset = 1  
 
master-host = 192.168.0.106  
master-user = slaveuser  
master-password = slave_user_password  
master-connect-retry = 60   
 
expire_logs_days        = 10  
max_binlog_size         = 500M  
log_bin                        = /var/log/mysql/mysql-bin.log  
[...]  

Puis arrêtez MySQL :

/etc/init.d/mysql stop

Maintenant faites presque la même chose sur server2…

Sur le serveur 2 :

vi /etc/mysql/my.cnf

Recherchez la section qui commence par [mysqld], et mettez les options suivantes dedans (en commentant toutes les options conflictuelles existantes) :

[...]  
[mysqld]  
server-id = 2  
replicate-same-server-id = 0  
auto-increment-increment = 2  
auto-increment-offset = 2  
   
master-host = 192.168.0.105  
master-user = slaveuser  
master-password = slave_user_password  
master-connect-retry = 60  
 
expire_logs_days        = 10  
max_binlog_size         = 500M  
log_bin                        = /var/log/mysql/mysql-bin.log  
[...]  

Puis arrêtez MySQL :

/etc/init.d/mysql stop

Nous devons maintenant synchroniser les deux serveurs mysql. Nous faisons cela en copiant le répertoire de données mysql du maître à l’esclave et aussi le fichier de configuration debian qui contient l’utilisateur debian-sys-maint. Cela peut être fait car nous avons arrêté mysql auparavant sur les deux serveurs.

Sur le serveur 1 :

scp -pr /var/lib/mysql/* [email protected]:/var/lib/mysql/
scp -pr /etc/mysql/debian.cnf [email protected]:/etc/mysql/debian.cnf

Maintenant, nous démarrons MySQL sur le serveur maître à nouveau :

/etc/init.d/mysql start

Connectez-vous au shell MySQL en tant qu’utilisateur root…

mysql -u root -p

… et exécutez cette commande dans le shell MySQL…

 SHOW MASTER STATUS; 

… pour obtenir le statut maître MySQL :

mysql> SHOW MASTER STATUS;
+——————+———-+————–+——————+
| Fichier | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+——————+———-+————–+——————+
| mysql-bin.000002 | 106 | | |
+——————+———-+————–+——————+
1 ligne dans l’ensemble (0.00 sec)

Les informations dont nous avons besoin pour l’étape suivante sont le fichier binlog mysql-bin.000002 et la position binlog 106. Nous aurons besoin des mêmes détails pour server2 plus bas.

Maintenant, exécutez cette commande dans le shell MySQL sur le maître pour le connecter à l’esclave :

STOP SLAVE;
CHANGE MASTER TO MASTER_HOST=’192.168.0.106’, MASTER_USER=’slaveuser’, MASTER_PASSWORD=’slave_user_password’, MASTER_LOG_FILE=’mysql-bin.000002’, MASTER_LOG_POS=106;
START SLAVE;

Ensuite, vérifiez l’état de l’esclave :

SHOW SLAVE STATUS \G

Il est important que les deux Slave_IO_Running et Slave_SQL_Running aient la valeur Oui dans la sortie.

Sur le serveur 2 :

Connectez-vous au shell MySQL en tant qu’utilisateur root…

mysql -u root -p

… et exécutez cette commande dans le shell MySQL :

STOP SLAVE;
CHANGE MASTER TO MASTER_HOST=’192.168.0.105’, MASTER_USER=’slaveuser’, MASTER_PASSWORD=’slave_user_password’, MASTER_LOG_FILE=’mysql-bin.000002’, MASTER_LOG_POS=106;
START SLAVE;

Ensuite, vérifiez l’état de l’esclave :

SHOW SLAVE STATUS \G

Il est important que les deux Slave_IO_Running et Slave_SQL_Running aient la valeur Oui dans la sortie.

La configuration de la réplication mysql master/master est maintenant terminée et nous procédons à l’installation des autres paquets logiciels.

Share: X/Twitter LinkedIn

Recevez de nouveaux articles dans votre boîte de réception.

Aucun spam. Désabonnez-vous à tout moment.