Base de données · 4 min read · Oct 08, 2025

Le cluster Web parfaitement équilibré et à haute disponibilité avec 2 serveurs exécutant Xen sur Ubuntu 8.04 Hardy Heron - Page 4

10. Réplication MySQL (web1, web2)

10.1 Installation de MySQL 5.0

apt-get install mysql-server-5.0 mysql-client-5.0

Pour s’assurer que la réplication peut fonctionner, nous devons faire en sorte que MySQL écoute sur toutes les interfaces, donc nous commentons la ligne bind-address = 127.0.0.1 dans /etc/mysql/my.cnf :

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
[...]

Redémarrez MySQL ensuite :

/etc/init.d/mysql restart

Sur web1

Maintenant, nous configurons un utilisateur de réplication slave2_user qui peut être utilisé par web2.example.com pour accéder à la base de données MySQL :

mysql -u root -p

Dans le shell MySQL, exécutez les commandes suivantes :

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

Sur web2

Maintenant, nous faisons les deux dernières étapes à nouveau sur web2.example.com :

mysql -u root -p

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

Sur web1 ET web2

Nous allons maintenant créer une base de données qui sera utilisée plus tard pour le serveur de messagerie :

mysqladmin -u root -p create mail

Ensuite, nous allons dans le shell MySQL :

mysql -u root -p

Dans le shell MySQL, nous créons l’utilisateur mail_admin avec le mot de passe mail_admin_password (remplacez-le par votre propre mot de passe) qui a des privilèges SELECT, INSERT, UPDATE, DELETE sur la base de données mail. Cet utilisateur sera utilisé par Postfix et Courier pour se connecter à la base de données mail :

GRANT SELECT, INSERT, UPDATE, DELETE ON mail. TO ‘mail_admin’@’localhost’ IDENTIFIED BY ‘mail_admin_password’;
GRANT SELECT, INSERT, UPDATE, DELETE ON mail.
TO ‘mail_admin’@’localhost.localdomain’ IDENTIFIED BY ‘mail_admin_password’;
FLUSH PRIVILEGES;
quit;

10.2 Configuration de la réplication

Maintenant, nous configurons la réplication maître-maître dans /etc/mysql/my.cnf. Les options de configuration cruciales pour la réplication maître-maître sont auto_increment_increment et auto_increment_offset :

  • auto_increment_increment contrôle l’incrément entre les valeurs AUTO_INCREMENT successives.
  • auto_increment_offset détermine le point de départ pour les valeurs de colonne AUTO_INCREMENT.

Supposons que nous avons N nœuds MySQL (N=2 dans cet exemple), alors auto_increment_increment a la valeur N sur tous les nœuds, et chaque nœud doit avoir une valeur différente pour auto_increment_offset (1, 2, …, N).

Configurons maintenant nos deux nœuds MySQL :

Sur web1

vi /etc/mysql/my.cnf

ajoutez les lignes suivantes juste en dessous de “[mysqld]” :

server-id = 1
replicate-same-server-id = 0
auto-increment-increment = 2
auto-increment-offset = 1
# utilisez 192.168.1.105 si vous n'avez pas installé de câble croisé sur eth1
master-host = 192.168.0.105
master-user = slave1_user
master-password = slave1_password
master-connect-retry = 60
replicate-do-db = mail
log-bin = /var/log/mysql/mysql-bin.log
binlog-do-db = mail
relay-log = /var/lib/mysql/slave-relay.log
relay-log-index = /var/lib/mysql/slave-relay-log.index

et modifiez la ligne “max_binlog_size” :

[...]
max_binlog_size         = 500M
[...]

/etc/init.d/mysql restart

Sur web2

vi /etc/mysql/my.cnf

server-id = 2
replicate-same-server-id = 0
auto-increment-increment = 2
auto-increment-offset = 2
# utilisez 192.168.1.104 si vous n'avez pas installé de câble croisé sur eth1
master-host = 192.168.0.104
master-user = slave2_user
master-password = slave2_password
master-connect-retry = 60
replicate-do-db = mail
log-bin = /var/log/mysql/mysql-bin.log
binlog-do-db = mail
relay-log = /var/lib/mysql/slave-relay.log
relay-log-index = /var/lib/mysql/slave-relay-log.index

et modifiez la ligne “max_binlog_size” :

[...]
max_binlog_size         = 500M
[...]

/etc/init.d/mysql restart

Sur web1 ET web2

Nous allons maintenant démarrer la réplication :

mysql -u root -p

Dans le shell MySQL, exécutez les commandes suivantes :

reset master;
stop slave;
reset slave;

Exécutez maintenant ce qui suit :

Sur web1

CHANGE MASTER TO MASTER_HOST=’192.168.0.105’, MASTER_USER=’slave1_user’, MASTER_PASSWORD=’slave1_password’, MASTER_LOG_FILE=’mysql-bin.000001’, MASTER_LOG_POS=98;

start slave;
quit;

Sur web2

CHANGE MASTER TO MASTER_HOST=’192.168.0.104’, MASTER_USER=’slave2_user’, MASTER_PASSWORD=’slave2_password’, MASTER_LOG_FILE=’mysql-bin.000001’, MASTER_LOG_POS=98;

start slave;
quit;

Maintenant, la réplication devrait fonctionner.

10.3 Tester la réplication

Sur web1 ET web2

mysql -u root -p

Dans le shell MySQL, exécutez les commandes suivantes :

show slave status \G;

Il y a 3 lignes importantes dans la sortie qui devraient ressembler à ceci :

[...]
Slave_IO_State: Waiting for master to send event
[...]
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: mail
[...]

Maintenant, vous pouvez quitter mysql :

quit;

Sur web1

Nous allons insérer des données sur web1.example.com pour tester et cela servira dans le prochain chapitre pour le mail :

mysql -u root -p

Dans le shell MySQL, exécutez les commandes suivantes :

use mail;

Nous allons créer les tables suivantes :

CREATE TABLE domains (
domain varchar(50) NOT NULL,
transport varchar(128) NOT NULL default ‘smtp:[192.168.1.104]’,
PRIMARY KEY (domain) )
TYPE=MyISAM;

CREATE TABLE forwardings (
source varchar(80) NOT NULL,
destination TEXT NOT NULL,
PRIMARY KEY (source) )
TYPE=MyISAM;

CREATE TABLE users (
email varchar(80) NOT NULL,
password varchar(20) NOT NULL,
quota INT(10) DEFAULT ‘10485760’,
PRIMARY KEY (email)
) TYPE=MyISAM;

CREATE TABLE transport (
domain varchar(128) NOT NULL default ‘’,
transport varchar(128) NOT NULL default ‘’,
UNIQUE KEY domain (domain)
) TYPE=MyISAM;

quit;

Ces tables fraîchement créées devraient également apparaître dans la base de données mail de web2, grâce à la réplication.

Sur web2

Maintenant, nous allons vérifier que :

mysql -u root -p

Dans le shell MySQL, exécutez les commandes suivantes :

use mail;
show tables;

La sortie devrait être :

+----------------+
| Tables_in_mail |
+----------------+
| domains         |
| forwardings    |
| transport        |
| users              |
+----------------+
4 rows in set (0.00 sec)

quit;

Si vous voyez que la réplication fonctionne.

10.4 Création d’un utilisateur pour ldirectord

Nous allons maintenant créer l’utilisateur qui se connectera à la base de données dans le fichier ldirectord.php.

Sur web1 ET web2

mysql -u root -p

Dans le shell MySQL, exécutez les commandes suivantes :

GRANT USAGE ON . TO ‘ldirectord’@’localhost’ IDENTIFIED BY ‘LDIRECTORD_PASSWORD’;
quit;

Maintenant, lorsque vous allez avec votre navigateur aux adresses :

http://192.168.1.104/ldirectord.php

et

http://192.168.1.105/ldirectord.php

Vous devriez voir :

Connecté à MySQL

affiché à l’écran.

Share: X/Twitter LinkedIn

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

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