GNU/Linux >> Tutoriels Linux >  >> Debian

Installation d'un cluster de bases de données Web, de messagerie et MySQL sur Debian 8.4 Jessie avec ISPConfig 3.1

Ce tutoriel décrit l'installation d'un serveur Web, de messagerie, de base de données et DNS en cluster à utiliser pour la redondance, la haute disponibilité et l'équilibrage de charge sur Debian 8 avec le panneau de configuration ISPConfig 3. La réplication MySQL Master/Master sera utilisée pour répliquer les bases de données client MySQL entre les serveurs, Unison sera utilisé pour synchroniser les /var/www (sites Web) et les e-mails seront synchronisés avec Dovecot.

1 Remarque générale

Dans cette configuration, il y aura un serveur maître (qui exécute l'interface du panneau de configuration ISPConfig) et un serveur esclave qui reflète les services Web (apache), e-mail (postfix et dovecot), dns (bind) et base de données (MySQL ou MariaDB) du serveur maître.

Pour installer la configuration en cluster, nous avons besoin de deux serveurs avec une installation minimale de Debian 8.4 et la même version d'ISPConfig.

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
Adresse IPv6 :2001:db8::1

Serveur esclave

Nom d'hôte :server2.example.tld
Adresse IP :192.168.0.106
Adresse IPv6 :2001:db8::2

Quel que soit l'endroit où ces noms d'hôte ou adresses IP apparaissent dans les prochaines étapes d'installation, vous devrez les modifier pour qu'ils correspondent aux adresses IP et aux noms d'hôte de vos serveurs.

Toutes les commandes doivent être exécutées en tant qu'utilisateur root. Si vous devez apporter des modifications à MySQL, connectez-vous à MySQL avec le mot de passe root pour MySQL :

mysql -u root -p

2 Installer le serveur maître

Nous devons d'abord installer ISPConfig sur le serveur maître. Si vous avez déjà installé ISPConfig sur ce serveur, vous pouvez ignorer l'installation (assurez-vous que l'installation existante est à jour).

Installez ISPConfig sur le serveur maître selon The Perfect Server - Debian 8.4 Jessie (Apache2, BIND, Dovecot, ISPConfig 3.1).

Ajoutez le serveur esclave au fichier /etc/hosts

vi /etc/hosts

donc ça ressemble à :

127.0.0.1 localhost192.168.0.105 serveur1.exemple.tld serveur1
2001:db8::1 serveur1.exemple.tld serveur1192.168.0.106 serveur2.exemple.tld
2001:db8 ::2 server2.example.tld# Les lignes suivantes sont souhaitables pour les hôtes compatibles IPv6 ::1 localhost ip6-localhost ip6-loopbackfe00::0 ip6-localnetff00::0 ip6-mcastprefixff02::1 ip6-allnodesff02::2 ip6- allroutersff02::3 ip6-allhosts

3 Préparer le serveur esclave

Exécutez les étapes 1 à 19 de The Perfect Server - Debian 8.4 Jessie (Apache2, BIND, Dovecot, ISPConfig 3.1).

N'installez pas encore ISPConfig sur le serveur2.

Ajoutez le serveur maître au fichier /etc/hosts

vi /etc/hosts

donc ça ressemble à :

127.0.0.1 localhost192.168.0.105 server1.example.tld
2001:db8::1 server1.example.tld192.168.0.106 server2.example.tld server2
2001:db8::2 server2.example.tld server2# Les lignes suivantes sont souhaitables pour les hôtes compatibles IPv6 ::1 localhost ip6-localhost ip6-loopbackfe00::0 ip6-localnetff00::0 ip6-mcastprefixff02::1 ip6-allnodesff02::2 ip6- allroutersff02::3 ip6-allhosts

4 Connexion sans clé de Server1 à Server2

Sur le serveur2 :

Nous autorisons temporairement la connexion root au serveur2 avec un mot de passe. Ouvrez /etc/sshd_config :

vi /etc/ssh/sshd_config

et changer

PermitRootLogin sans mot de passe

à

PermitRootLogin oui

ensuite, redémarrez le démon ssh :

service ssh redémarrage

Sur le serveur 1 :

Créez une paire de clés privée/publique :

ssh-keygen
Génération de la paire de clés rsa publique/privée.
Entrez le fichier dans lequel enregistrer la clé (/root/.ssh/id_rsa) :<-- ENTER
Répertoire créé '/root/.ssh'.
Entrez la phrase secrète (vide s'il n'y a pas de phrase secrète) :<-- ENTER
Entrez à nouveau la même phrase de passe :<-- ENTER
Votre identification a été enregistrée dans /root/.ssh/id_rsa.
Votre clé publique a été enregistrée dans /root/.ssh/id_rsa.pub.
L'empreinte digitale de la clé est :
f3:d0:62:a7:24:6f:f0:1e:d1:64:a9:9f:12:6c:98:5a [email protected]
L'image aléatoire de la clé est :
+---[RSA 2048]----+
| |
| . |
| +      |
| + *       |
| E S +      |
| o o @ . |
| . B +      |
| o o       |
| . |
+-----------------+

Il est important que vous ne saisissiez pas de phrase de passe, sinon la mise en miroir ne fonctionnera pas sans interaction humaine, alors appuyez simplement sur ENTRÉE !

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

ssh-copy-id -i /root/.ssh/id_rsa.pub [protégé par e-mail]
L'authenticité de l'hôte '192.168.0.106 (192.168.0.106)' ne peut pas être établie.
L'empreinte digitale de la clé ECDSA est 25:d8:7a:ee:c2:4b:1d:92:a7:3d :16:26:95:56:62:4e.
Voulez-vous vraiment continuer à vous connecter (oui/non) ? <-- oui (vous ne verrez ceci que si c'est la première fois que vous vous connectez au serveur2)
/usr/bin/ssh-copy-id :INFO :tentative de connexion avec la ou les nouvelles clés, pour filtrer qui sont déjà installées
/usr/bin/ssh-copy-id :INFO :1 clé(s) reste(nt) à installer -- si vous êtes invité maintenant, c'est pour installer les nouvelles clés
Mot de passe de
[email protected] :<- entrez le mot de passe root du serveur2 

Essayez maintenant de vous connecter à la machine :

ssh [protégé par e-mail]

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

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

Interdire la connexion root avec un mot de passe. Ouvrez /etc/sshd_config :

vi /etc/ssh/sshd_config

et changer

PermitRootLogin oui

à

PermitRootLogin sans mot de passe

ensuite, redémarrez le démon ssh :

service ssh redémarrage

Déconnectez-vous du serveur2 :

quitter
déconnexion
Connexion à 192.168.0.106 fermée.

Nous sommes maintenant de retour sur le serveur1.

5. Réplication maître-maître MySQL

5.1 Préparer le serveur1

Connectez-vous à MySQL et créez un compte spécifiquement pour la réplication dans MySQL. J'utilise un utilisateur distinct pour la réplication afin de minimiser les risques de compromission avec d'autres comptes (le nom d'utilisateur et le mot de passe sont stockés en texte brut dans le fichier ou la table du référentiel d'informations principal) :

CRÉER UN UTILISATEUR 'slaveuser2'@'server2.example.tld' IDENTIFIÉ PAR 'slave_user_password';
CRÉER UN UTILISATEUR 'slaveuser2'@'192.168.0.106' IDENTIFIÉ PAR 'slave_user_password';
CRÉER UN UTILISATEUR ' slaveuser2'@'2001:db8::2' IDENTIFIÉ PAR 'slave_user_password';

et accordez le privilège REPLICATION SLAVE :

ACCORDER L'ESCLAVE DE RÉPLICATION SUR *.* À 'slaveuser2'@'server2.example.tld' ;
ACCORDER L'ESCLAVE DE RÉPLICATION SUR *.* À 'slaveuser2'@'192.168.0.106' ;
ACCORDER REPLICATION SLAVE ON *.* TO 'slaveuser2'@'2001:db8::2';
QUITTER;

Apportez quelques modifications pour la réplication de votre MySQL-Config :

vi /etc/mysql/my.cnf

Recherchez la section qui commence par [mysqld] et placez-y les options suivantes (en commentant tous les éléments en conflit existants option):

[...]
[mysqld]
server-id =1
replicate-same-server-id =0
auto-increment-increment =2
auto-increment-offset =1
log_bin =mysql-bin.log
expire_logs_days =10
max_binlog_size =100M
binlog_format =mixed
sync_binlog =1
relay-log =slave-relay.log
relay-log-index =slave-relay-log.index
slave_skip_errors =1007,1008,1050, 1396
bind-address = ::

et redémarrez MySQL ensuite :

redémarrer service mysql

Je saute simplement quelques erreurs d'esclave. Je l'ai expliqué sur mon blog :

  • 1007 =Impossible de créer la base de données '%s' ; la base de données existe
  • 1008 =Impossible de supprimer la base de données '%s' ; la base de données n'existe pas 
  • 1050 =Le tableau '%s' existe déjà  
  • 1396 =Échec de l'opération %s pour %s - Impossible de créer l'utilisateur

vous pouvez trouver la liste des codes d'erreur MySQL ici : Codes et messages d'erreur du serveur

5.2 Préparer le serveur2

Apportez quelques modifications pour la réplication de votre MySQL-Config :

vi /etc/mysql/my.cnf

Recherchez la section qui commence par [mysqld] et placez-y les options suivantes (en commentant tous les éléments en conflit existants option):

[...]
[mysqld]
server-id =2
log_bin =mysql-bin.log
expire_logs_days =10
max_binlog_size =100M
binlog_format =mixte
sync_binlog =1
slave_skip_errors =1007,1008,1050, 1396

5.3 Créer un instantané des bases de données existantes sur le serveur1

Vider les bases de données sur serveur1 et saisissez le mot de passe root MySQL :

mysqldump -p --all-databases --allow-keywords --master-data --events --single-transaction> /root/mysqldump.sql

Copiez le dump sur le serveur2 :

scp /root/mysqldump.sql [protégé par e-mail] :/root

5.4 Importer le dump sur le serveur2

mysql -u root -p  

Arrêtez mysql sur server2 :

arrêt du service mysql

Copiez le fichier par défaut pour MySQL du serveur1 au serveur2. Passer au serveur1 et lancez

scp /etc/mysql/debian.cnf [protégé par e-mail] :/etc/mysql/debian.cnf

Démarrez MySQL sur server2 :

démarrage du service mysql

et connectez-vous à MySQL pour définir le serveur maître avec :

CHANGER LE MAITRE EN MASTER_HOST="server1.example.tld", MASTER_USER="slaveuser2", MASTER_PASSWORD="slave_user_password" ;

Démarrez l'esclave :

DÉMARRER L'ESCLAVE ;

et vérifiez l'état de l'esclave avec

AFFICHER LE STATUT ESCLAVE \G

Le résultat sera quelque chose comme

*************************** 1. ligne ***************** **********
              Slave_IO_State :Attente de l'envoi de l'événement par le maître
                 Master_Host :server1.example.tld
                  Master_User :slaveuser2
                   Master_Port :0
                   0> Connect_retry:60
maître_log_file:mysql-bin.000001
read_master_log_pos:109989
relay_log_file:mysqld-relay-bin.000002
relay_log_log_pos:110276
relay_master_log_file:Mysql- bin.000001
slave_io_running:oui
slave_sql_running:oui
replicate_do_db:
replicate_ignore_db:
replicate_do_Table:
replicate_ignore_table:
replicat_wild_do_able:  Replicate_Wild_Ignore_Table :
                   Last_Errno :0
                   Last_Error :
                Skip_Counter :0
           Exec_ Master_log_pos:109989
relay_log_space:110574
Tell_condition:Aucun
Tell_log_file:
Tell_log_pos:0
Master_SSL_ALLOWED:Non
Master_SSL_CA_FILE:
br /> Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master:0
Master_SSL_Verify_Server_Cert:Non
Last_IO_Errno:0
Last_IO_Error:
Last_SQL_Errno:0
last_sql_error:
réplique_ignore_server_ids:
maître_server_id:1
maître_ssl_crl:
maître_ssl_crlpath:
using_gtid:no
gtid_io_pos:

Si "Seconds Behind Master" n'est pas 0, attendez que l'esclave ait lu toutes les données du maître (répétez simplement la commande pour obtenir la valeur actuelle). Assurez-vous que le serveur2 utilise le bon master-log et la bonne position du journal.

Sur serveur1 exécuter dans MySQL :

AFFICHER L'ÉTAT MAÎTRE \G
*************************** 1. ligne ***************** **********
            Fichier :mysql-bin.000991
        Position :69185362
    Binlog_Do_DB :
Binlog_Ignore_DB :
1 ligne dans l'ensemble (0,00 s)

Et comparez les coordonnées du journal binaire du maître de réplication.

Nous exécutons une réplication maître-esclave MySQL où le serveur1 est le maître et le serveur2 l'esclave.

5.5 MySQL Master-Master-Replication

Créez l'utilisateur MySQL pour la réplication et accordez le privilège dans MySQL :

CRÉER UN UTILISATEUR 'slaveuser1'@'server1.example.tld' IDENTIFIÉ PAR 'slave_user_password' ;
CRÉER UN UTILISATEUR 'slaveuser1'@'192.168.0.105' IDENTIFIÉ PAR 'slave_user_password' ;
CRÉER UN UTILISATEUR ' slaveuser1'@'2001:db8::1' IDENTIFIÉ PAR 'slave_user_password' ;
ATTRIBUER L'ESCLAVE DE RÉPLICATION SUR *.* À 'slaveuser1'@'server1.example.tld' ;
ACCORDER L'ESCLAVE DE RÉPLICATION SUR *.* À 'slaveuser1'@'192.168.0.105' ;
ACCORDER L'ESCLAVE DE RÉPLICATION SUR *.* À 'slaveuser1'@'2001:db8::1' ;
QUITTER ;

Apportez quelques modifications pour la réplication de votre MySQL-Config sur server2 :

vi /etc/mysql/my.cnf

Recherchez la section qui commence par [mysqld] et placez-y les options suivantes (en commentant tous les éléments en conflit existants option):

[...]
[mysqld]
[...]
replicate-same-server-id =0
auto-increment-increment =2
auto-increment-offset =2
relay-log =slave-relay.log
relay-log-index =slave-relay-log.inde

et redémarrez MySQL :

redémarrer service mysql

Connectez-vous à MySQL et obtenez les coordonnées du journal binaire principal :

AFFICHER L'ÉTAT MAÎTRE \G
*************************** 1. ligne ***************** **********
            Fichier :mysql-bin.000002
        Position :326
    Binlog_Do_DB :
Binlog_Ignore_DB :
1 ligne dans l'ensemble (0,00 s)

Connectez-vous à MySQL sur server1 et définissez le serveur maître avec

CHANGER LE MAITRE EN MASTER_HOST="server2.example.tld", MASTER_USER="slaveuser1", MASTER_PASSWORD="slave_user_password", MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=326 ;

Démarrez l'esclave :

DÉMARRER L'ESCLAVE ;

et vérifiez l'état de l'esclave avec

AFFICHER LE STATUT ESCLAVE \G

Vérifiez que l'esclave fonctionne :

             Slave_IO_Running :Oui
            Slave_SQL_Running :Oui

Si votre réplication cesse de fonctionner, vous pouvez trouver des informations supplémentaires ici :

  • Comment ignorer certaines erreurs dans la réplication MySQL
  • redémarrer la réplication mysql master-master
  • mysql-replication – Impossible d'analyser l'entrée d'événement du journal de relais

6 Installer ISPConfig sur le serveur esclave

Connectez-vous à MySQL et créez un utilisateur root pour le serveur 2 :

CRÉER UN UTILISATEUR 'root'@'192.168.0.106' IDENTIFIÉ PAR 'myrootpassword' ;
ACCORDER TOUS LES PRIVILÈGES SUR * . * TO 'root'@'192.168.0.106' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;
CREATE USER 'root'@'server2.example.tld' IDENTIFIED BY 'myrootpassword';
ACCORDER TOUS LES PRIVILÈGES SUR * . * TO 'root'@'server2.example.tld' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;
CREATE USER 'root'@'2a01:dddd::2' IDENTIFIED BY 'myrootpassword';
ACCORDER TOUS LES PRIVILÈGES SUR * . * TO 'root'@'2001:db8::2' AVEC OPTION GRANT MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
QUIT ;

La réplication couvre toute la base de données. Copiez les db-configs pour PHPMyAdmin et roundcube du serveur1 au serveur2.

Sur serveur1 :

scp /etc/dbconfig-common/phpmyadmin.conf [protégé par e-mail] :/etc/dbconfig-common/phpmyadmin.conf
scp /etc/phpmyadmin/config-db.php [protégé par e-mail] :/ etc/phpmyadmin/config-db.php
scp /etc/dbconfig-common/roundcube.conf [protégé par e-mail] :/etc/dbconfig-common/roundcube.conf
scp /etc/roundcube/debian -db.php [protégé par e-mail] :/etc/roundcube/debian-db.php

Sur serveur2 :

Téléchargez ISPConfig 3.1 :

cd /tmp
wget -O ISPConfig-3.1-beta.tar.gz  https://git.ispconfig.org/ispconfig/ispconfig3/repository/archive.tar.gz?ref=stable-3.1
tar xfvz xfz ISPConfig-3.1-beta.tar.gz
cd ispconfig3-stable-3.1*
cd install

et lancez le programme d'installation avec

php -q install.php
------------------------------------------------------------ ---------------------------------
 _____ ___________   _____              __ _         ____
|_   _ /  ___| ___ \ /  __ \            / _(_)       /__  \
  | | \ `--.| |_/ / | /  \/ ___  _ __ | |_ _  __ _    _/ /
  | | `--. \  __/  | | / _ \| '_ \| _| |/ _` | |_ |
 _| |_/\__/ / | | \__/\ (_) | | | | | | | (_| | ___\ \
 \___/\____/\_|      \____/\___/|_| |_|_| |_|\__, | \____/
                                           __/ |
                                          |___/
-------------------------------------------------- ------------------------------------------


>> Configuration initiale

Système d'exploitation :Debian 8.0 (Jessie) ou compatible

    Voici quelques questions pour la configuration principale, alors soyez prudent.
    Les valeurs par défaut sont entre [crochets] et peuvent être acceptées avec .
    Appuyez sur "quitter" (sans les guillemets) pour arrêter le programme d'installation.


Sélectionnez la langue (en,de) [en] :<-- Appuyez sur Entrée

Mode d'installation (standard,expert) [standard] :expert <-- expert

Nom d'hôte complet (FQDN) du serveur, par exemple server1.domain.tld  [server2.example.tld] :<-- Appuyez sur Entrée

Nom d'hôte du serveur MySQL [localhost] :<-- Appuyez sur Entrée

Port du serveur MySQL [3306] :<-- Appuyez sur Entrée

Nom d'utilisateur racine MySQL [racine] :<-- Appuyez sur Entrée

Mot de passe root MySQL [] :<-- Saisissez votre mot de passe root MySQL

Base de données MySQL à créer [dbispconfig] :<-- dbispconfig2 (le nom de la base de données ispconfig locale du maître et de l'esclave doit être différent, car les deux serveurs partagent les mêmes bases de données)

Jeu de caractères MySQL [utf8] :<-- Appuyez sur Entrée

Les deux questions suivantes concernent l'utilisateur et le mot de passe de la base de données interne ISPConfig.
Il est recommandé d'accepter les valeurs par défaut qui sont « ispconfig » comme nom d'utilisateur et un mot de passe aléatoire.
Si vous utilisez un mot de passe différent, utilisez uniquement des chiffres et des caractères pour le mot de passe.

ISPConfig mysql database username [ispconfig] :<-- ispconfig2

Mot de passe de la base de données mysql ISPConfig [06d434604a3371a706a100f9786aec9b] :<-- Appuyez sur Entrée

Ce serveur doit-il rejoindre une configuration multiserveur ISPConfig existante (y,n) [n] :<-- y

Nom d'hôte du serveur maître MySQL [] :<-- serveur1.exemple.tld

Port du serveur maître MySQL [] :<-- Appuyez sur Entrée

Nom d'utilisateur racine du serveur maître MySQL [racine] :<-- Appuyez sur Entrée

Mot de passe racine du serveur maître MySQL [] :<-- Saisissez ici le mot de passe racine du serveur maître

Nom de la base de données du serveur maître MySQL [dbispconfig] :<-- Appuyez sur Entrée

Ajout d'un enregistrement de serveur ISPConfig à la base de données.

Configurer Mail (y,n) [y] :<-- Appuyez sur Entrée

Configuration de Postgrey
Configuration de Postfix
Génération d'une clé privée RSA 4096 bits
................... .................................................. ...++
..................++
écriture d'une nouvelle clé privée dans 'smtpd.key'
- ----
Vous êtes sur le point d'être invité à entrer des informations qui seront incorporées
dans votre demande de certificat.
Ce que vous êtes sur le point d'entrer est ce qu'on appelle un nom distinctif ou un DN .
Il y a pas mal de champs mais vous pouvez laisser des champs vides
Pour certains champs il y aura une valeur par défaut,
Si vous saisissez '.', le champ restera vide.
-----
Nom du pays (code à 2 lettres) [AU] :<-- Saisissez le code du pays à 2 lettres
Nom de l'État ou de la province (nom complet) [Some-State] :<-- Saisissez le nom de l'état
Nom de la localité (par exemple, ville) [] :<-- Entrez votre ville
Nom de l'organisation (par exemple, société) [Internet Widgits Pty Ltd] :<-- Saisissez le nom de la société ou appuyez sur Entrée
Nom de l'unité organisationnelle (par exemple, section) [] :<-- Appuyez sur Entrée
Nom commun (par exemple, FQDN du serveur ou VOTRE nom) [] :<-- Entrez le nom d'hôte du serveur, dans mon cas : server2.example.com
Adresse e-mail [] :<-- Appuyez sur Entrée
Configuration de Mailman
Configuration de Dovecot
Configuration de Spamassassin
Configuration d'Amavisd
Configuration de Getmail
Configuration de Jailkit
Configuration de Pureftpd
Configuration du serveur DNS ( y,n) [y] :<-- Appuyez sur Entrée

Configuration de BIND
Configurer le serveur Web (y,n) [y] :<-- Appuyez sur Entrée

Configuration d'Apache
Configuration de vlogger
Échec de la détection automatique de [WARN] pour OpenVZ
Forcer la configuration d'OpenVZ (y,n) [n] :<-- Hit Entrez

Ignorer OpenVZ

Configurer le serveur pare-feu (y,n) [y] :<-- Appuyez sur Entrée

Configuration du pare-feu Ubuntu
Configuration du serveur Metronome XMPP
écriture d'une nouvelle clé privée dans 'localhost.key'
-----
Nom du pays (2 code de lettre) [AU] : <-- Saisissez le code de pays à 2 lettres
Nom de la localité (par exemple, ville) [] : <-- Entrez votre ville
Nom de l'organisation (par exemple, société) [Internet Widgits Pty Ltd] : <-- Saisissez le nom de la société ou appuyez sur Entrée
Nom de l'unité organisationnelle (par exemple, section) [] : <-- Appuyez sur Entrée
Nom commun (par exemple, le FQDN du serveur ou VOTRE nom) [server2.example.tld] : <-- Entrez le nom d'hôte du serveur, dans mon cas :server2.example.tld
Adresse e-mail [] : <-- Appuyez sur Entrée

Installer l'interface Web ISPConfig (y,n) [n] :<-- Appuyez sur Entrée



Configuration de DBServer
Installation d'ISPConfig crontab
Détecter les adresses IP
Installation terminée.

Connectez-vous à ISPConfig sur le serveur 1 et accédez à Système / Services de serveur et choisissez server2.example.tld et définissez Est le miroir du serveur vers serveur1.exemple.tld :

Aller à la configuration du serveur , choisissez l'onglet Web et définissez les autorisations pour les deux serveurs :

 

Si vous avez déjà des données (Sites Web, Mail....) en cours d'exécution sur le serveur1, allez dans Outils / Resynchroniser et lancez une resynchronisation complète (cochez toutes les cases).

7 Installer Unisson

Ensuite, nous installons Unison. Unison est utilisé pour synchroniser le répertoire /var/www entre le serveur1 et le serveur2.

Installez unisson sur server1 et serveur2 avec

apt-get install unisson

Maintenant, nous installons un fichier de configuration unison sur server1 :

Créez un nouveau fichier /root/.unison/web :

mkdir /root/.unison
vi /root/.unison/web.prf

... et ajoutez le contenu suivant :

# Racines de la synchronisationroot =/var/wwwroot =ssh://192.168.0.106//var/www # Chemins à synchroniser#path =www#path =vmail # Certaines expressions régulières spécifiant les noms et les chemins à ignorer#ignore =Path stats ## ignore /var/www/stats#ignore =Path stats/* ## ignore /var/www/stats/*#ignore =Path */stats ## ignore /var/www/somedir/stats, mais pas /var/www/a/b/c/stats#ignore =Nom *stats ## ignore tous les fichiers/répertoires qui se terminent par "stats"#ignore =Nom stats* ## ignore tous les fichiers/répertoires qui commencent par "stats" #ignore =Nom *.tmp ## ignore tous les fichiers avec l'extension .tmpignore =Nom sess_*
ignore =Nom *access.log*
ignore =Nom error.log
ignore =Nom webalizer.conf
# Lorsqu'il est défini sur true, cet indicateur fait que l'interface utilisateur ignore # demander des confirmations sur les modifications non conflictuelles. (Plus # précisément, lorsque l'interface utilisateur a fini de définir la # direction de propagation pour une entrée et est sur le point de passer à la # suivante, elle ignorera toutes les entrées non conflictuelles et passera # directement au conflit suivant.) auto =true # Lorsque ce paramètre est défini sur true, l'interface utilisateur ne posera aucune# question. Les modifications non conflictuelles seront propagées ; # les conflits seront ignorés. Si l'indicateur de lot est # également défini, la synchronisation sera abandonnée. Lorsque la préférence path# est utilisée, la même confirmation sera demandée pour# chemins de niveau supérieur. (Pour le moment, cet indicateur n'affecte que l'interface utilisateur # texte.) Voir aussi la préférence de point de montage.confirmbigdel=true # Lorsque cette préférence est définie sur true, Unison utilisera # l'heure de modification et la longueur d'un fichier comme `pseudo inode# number' lors de l'analyse des répliques pour les mises à jour, au lieu de lire # le contenu complet de chaque fichier. Sous Windows, cela peut empêcher # Unison de propager une mise à jour si l'heure de modification # et la longueur du fichier sont toutes deux inchangées par la mise à jour. # Cependant, Unison n'écrasera jamais une telle mise à jour avec une # modification de l'autre réplique, car elle effectue toujours une vérification # sécurisée des mises à jour juste avant de propager une modification. Ainsi, il est # raisonnable d'utiliser ce commutateur sous Windows la plupart du temps # et d'exécuter occasionnellement Unison une fois avec fastcheck défini sur false, # si vous craignez qu'Unison ait oublié une mise à jour. # La valeur par défaut de la préférence est auto , ce qui oblige# Unison à utiliser une vérification rapide sur les répliques Unix (lorsqu'elle est sûre)# et une vérification lente sur les répliques Windows. Pour la rétrocompatibilité, yes, no et default peuvent être utilisés à la place de true, false et auto. Voir la section "Vérification rapide" pour plus d'informations.fastcheck=true# Lorsque cet indicateur est défini sur true, les attributs de groupe des fichiers# sont synchronisés. La synchronisation des noms de groupe ou des identifiants de groupe# dépend de la préférence numerids.group=true # Lorsque cet indicateur est défini sur true, les attributs de propriétaire des fichiers # sont synchronisés. Que les noms de propriétaire ou les identifiants de propriétaire# soient synchronisés dépend de la préférence# extttnumerids.owner=true # L'inclusion de la préférence -prefer root force Unison à # toujours résoudre les conflits en faveur de root, plutôt que de demander# des conseils à l'utilisateur. (La syntaxe de root est la même que pour# la préférence root, plus les valeurs spéciales newer et old.)# Cette préférence est remplacée par la préférence preferpartial.# Cette préférence ne doit être utilisée que si vous êtes sûr de savoir# ce que vous are doing!prefer=newer # Lorsque cette préférence est définie sur true, l'interface utilisateur textuelle# n'imprimera rien du tout, sauf en cas d'erreurs.# La définition de silent sur true définit automatiquement la préférence de lot# sur true.silent=true # Lorsque cet indicateur est défini sur true, les heures de modification des fichiers (mais pas# modtimes de répertoire) sont propagées.times=false

#          Lorsque cet indicateur est défini, Unison consigne toutes les modifications apportées aux systèmes de fichiers sur un file.
log=false

#          Lorsque cet indicateur est défini sur true, les groupes et les utilisateurs sont synchronisés numériquement, plutôt que par leur nom.
#          L'uid spécial 0 et le le groupe 0 n'est jamais mappé via l'utilisation r/noms de groupe même si cette
#          préférence n'est pas définie.
numericids=true

Nous voulons automatiser la synchronisation, nous créons donc un petit script et créons un cronjob sur server1 :

mkdir /root/scripts
vi /root/scripts/unison.sh

et ajoutez le contenu suivant :

#!/bin/sh
lockdir=/tmp
UNISON=/usr/bin/unison
LOGGER=/usr/bin/logger

si [ ! -f /$lockdir/unisson ]; puis
        touchez $lockdir/unison

        $UNISON -testserver web
        rc=$?
        if [[ $rc !=0 ]] ; then
               echo "error"
                $LOGGER -d -t unison "web - error connect remote"
        else
                $UNISON web
        fi

        rm $lockdir/unison
else
        $LOGGER -d -t unison "unison déjà en cours d'exécution"
fi

rendre le script exécutable :

chmod 700 /root/scripts/unison.sh

Et exécutez la première synchronisation. Pour obtenir une sortie pendant la synchronisation, définissez silent =false dans /root/.unsion/web.prf. Ensuite, lancez l'unisson :

/root/scripts/unison.sh

Enfin, nous créons le cronjob :

crontab -e
# unison
*  * * * *  /root/scripts/unison.sh> /dev/null

8 Synchroniser les e-mails avec Dovecot

Depuis Dovecot 2, il est possible d'utiliser le dsync de Dovect pour garder la base principale synchronisée. Si vous avez déjà des messages sur le serveur1, ils seront répliqués sur le serveur2 sans aucune autre interaction.

Vous devez utiliser le même port (4711 ) et le même mot de passe (replication_password ) sur les deux serveurs.

serveur1 :

Ouvrez /etc/dovecot/dovecot-sql.conf

vi /etc/dovecot/dovecot-sql.conf

and enable the iterate_query:

old:

#iterate_query =SELECT email as user FROM mail_user

new:

iterate_query =SELECT email as user FROM mail_user

Open /etc/dovecot/dovecot.conf

vi /etc/dovecot/dovecot.conf

and add the following content:

# Enable the replication plugin globally
mail_plugins =$mail_plugins notify replication quota

# Both the client and the server need to have a shared secret
doveadm_password =replication_password

# configure how many dsyncs can be run in parallel (10 by default)
replication_max_conns =10

service aggregator {
        fifo_listener replication-notify-fifo {
                user =vmail
                mode =0666
        }

        unix_listener replication-notify {
                user =vmail
                mode =0666
        }
}

service replicator {
        unix_listener replicator-doveadm {
                mode =0666
        }
}

service doveadm {
        user =vmail
        inet_listener {
                port =4711
        }
}

service config {
        unix_listener config {
                user =vmail
        }
}

# use tcp:ip as the dsync target
plugin {
        replication_full_sync_interval =1 hours
        mail_replica =tcp:192.168.0.106:4711
}

protocol imap {
mail_plugins =quota imap_quota notify replication
}

restart Dovecot:

service dovecot restart

server2:

Open /etc/dovecot/dovecot-sql.conf

vi /etc/dovecot/dovecot-sql.conf

and enable the iterate_query:

old:

#iterate_query =SELECT email as user FROM mail_user

new:

iterate_query =SELECT email as user FROM mail_user

Open /etc/dovecot/dovecot.conf

vi /etc/dovecot/dovecot.conf

and add the following content:

# Enable the replication plugin globally
mail_plugins =$mail_plugins notify replication quota

# Both the client and the server need to have a shared secret
doveadm_password =replication_password

# configure how many dsyncs can be run in parallel (10 by default)
replication_max_conns =10

service aggregator {
        fifo_listener replication-notify-fifo {
                user =vmail
                mode =0666
        }

        unix_listener replication-notify {
                user =vmail
                mode =0666
        }
}

service replicator {
        unix_listener replicator-doveadm {
                mode =0666
        }
}

service doveadm {
        user =vmail
        inet_listener {
                port =4711
        }
}

service config {
        unix_listener config {
                user =vmail
        }
}

# use tcp:ip as the dsync target
plugin {
        replication_full_sync_interval =1 hours
        mail_replica =tcp:192.168.0.105:4711
}

protocol imap {
mail_plugins =quota imap_quota notify replication
}

restart Dovecot:

service dovecot restart

You can check the replication on each server:

doveadm replicator status '*'
username                                                                                priority fast sync full sync failed
[email protected]                                                                     none     00:16:34  00:16:40  -

9 Additional Notes

When you want to activate a firewall on the master or slave server, ensure that you open port 3306 for MySQL, 22 for SSH and 4711 for Dovecot on both servers.

  • ISPConfig Website:http://www.ispconfig.org/
  • ISPConfig Forum:https://www.howtoforge.com/forums/
  • ISPConfig Bugtracker:http://bugtracker.ispconfig.org/

Debian
  1. Configuration de la réplication maître-maître avec MySQL sur Debian 8 (Jessie)

  2. Installation du serveur Web dans FreeBSD 6.0 avec Apache 2.2, MySQL 5.0 et PHP 5 - Partie 5

  3. Installation du serveur Web dans FreeBSD 6.0 avec Apache 2.2, MySQL 5.0 et PHP 5 - Partie 4

  4. Installation du serveur Web dans FreeBSD 6.0 avec Apache 2.2, MySQL 5.0 et PHP 5 - Partie 3

  5. Installation du serveur Web dans FreeBSD 6.0 avec Apache 2.2, MySQL 5.0 et PHP 5 - Partie 2

Installation d'un cluster de bases de données Web, de messagerie et MySQL sur Debian 8.4 Jessie avec ISPConfig 3.1

Comment configurer un serveur de messagerie avec Modoboa sur Debian 10

Comment activer le protocole HTTP2 avec Nginx sur Debian 8 Jessie Server

Installation d'un cluster de bases de données Web, de messagerie et MySQL sur Debian 6.0 avec ISPConfig 3

Configuration multiserveur avec des serveurs de base de données Web, de messagerie, DNS et MySQL dédiés sur Debian Squeeze avec ISPConfig 3

Environnement multiserveur virtuel avec serveurs dédiés Web et MySQL, de messagerie et DNS sur Debian Squeeze avec ISPConfig 3