Ce tutoriel aborde la réplication des données d’un VPS ou serveur dédié : les bases de données seront répliquées d’un serveur principal (master) sur un autre serveur auxiliaire (backup).
En cas de défaillance du serveur principal, le serveur auxiliaire prendra le relais automatiquement.
Ce guide considère que vous avez :
- deux VPS ou Droplets chez Digital Ocean dans le même datacenter;
- une IP flottante qui peut être assignée à l’un ou l’autre des serveurs, à la demande;
- le même système d’exploitation sur les deux serveurs, pour des raisons de compatibilité.
Créer une image du VPS principal pour le VPS de sauvegarde
Commençons par la base du système : le système d’exploitation (OS). Lorsque j’ai pris le projet en main, le site était déjà en production et tournait sur la dernière version d’Ubuntu Server, avec NginX, MariaDB et SSL activé.
On aurait pu tout réinstaller sur le nouveau VPS mais autant gagner du temps : Digital Ocean permet de faire une image du VPS existant et de l’installer sur un nouveau droplet. C’est quelques heures d’installation et de configuration d’économisées.
Voici les données de mes deux VPS :
MASTER
ipv4: 104.xxx.xxx.133
Private IP: 10.134.23.164
Code language: CSS (css)
BACKUP
ipv4: 104.xxx.xxx.186
Private IP: 10.134.4.220
Code language: CSS (css)
Floating IP
Floating IP: 138.xxx.xxx.177
Code language: CSS (css)
Je masque les IP publiques puisque mes serveurs sont en production mais ces IP serviront pour le tuto : l’IP qui se termine en .133 est le Master, l’IP qui se termine en .186 est le Backup, et l’IP qui se termine en .177 est l’IP flottante.
Réplication de la base de données
Les deux serveurs LEMP sont maintenant identiques, même les fichiers et bases de données. Mais nous avons besoin d’avoir une base de données synchronisée en temps réel, dans les deux sens, master-master.
Si un serveur tombe, l’autre prend le relais. Lorsque le serveur Master revient à lui, le serveur Backup lui redonne les données SQL manquantes.
1. Configuration du serveur MASTER
On édite la configuration MariaDB:
nano /etc/mysql/my.cnf
On édite et remplace/ajoute :
# MATT - skyminds.net : MariaDB replication instructions.
# https://www.skyminds.net/?p=28739
# 1. bind-adress : replace 127.0.0.1 with Internal IP.
# bind-address = 127.0.0.1
bind-address = 10.134.23.164
# 2. enable log_bin
log_bin = /var/log/mysql/mariadb-bin
log_bin_index = /var/log/mysql/mariadb-bin.index
# 3. add server-id AND binlog_do_db
# NOTE : server-id is a way to identify this server in MariaDB configs.
# NOTE : binlog_do_db contains the names of the databases to replicate
server-id = 1
binlog_format=mixed
# first DB
binlog_do_db = first_wpdb
# second DB
binlog_do_db = second_wp
# /MATT
Code language: PHP (php)
Nous allons maintenant lancer quelques commandes sur le serveur SQL:
mysql -u root -p