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/hosts127.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-allhostsDé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 ntpdateet 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 dsaroot@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_keyspour 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_keysssh-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 sudoEntrez 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 restartMaintenant, 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.cnfRecherchez 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 stopMaintenant faites presque la même chose sur server2…
Sur le serveur 2 :
vi /etc/mysql/my.cnfRecherchez 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 stopNous 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 startConnectez-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 \GIl 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 \GIl 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.
Recevez de nouveaux articles dans votre boîte de réception.
Aucun spam. Désabonnez-vous à tout moment.