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.Mot de passe de
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
[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 -pArrêtez mysql sur server2 :
arrêt du service mysqlCopiez 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.cnfDémarrez MySQL sur server2 :
démarrage du service mysqlet 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.cnfRecherchez 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.indeet redémarrez MySQL :
redémarrer service mysqlConnectez-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 :OuiSi 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 unissonMaintenant, 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=trueNous 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.shet 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"
firendre le script exécutable :
chmod 700 /root/scripts/unison.shEt 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.shEnfin, 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.confand enable the iterate_query:
old:
#iterate_query =SELECT email as user FROM mail_usernew:
iterate_query =SELECT email as user FROM mail_user
Open /etc/dovecot/dovecot.conf
vi /etc/dovecot/dovecot.confand 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 restartserver2:
Open /etc/dovecot/dovecot-sql.conf
vi /etc/dovecot/dovecot-sql.confand enable the iterate_query:
old:
#iterate_query =SELECT email as user FROM mail_usernew:
iterate_query =SELECT email as user FROM mail_user
Open /etc/dovecot/dovecot.conf
vi /etc/dovecot/dovecot.confand 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 restartYou 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.
10 liens
- ISPConfig Website:http://www.ispconfig.org/
- ISPConfig Forum:https://www.howtoforge.com/forums/
- ISPConfig Bugtracker:http://bugtracker.ispconfig.org/