Aller au contenu principal

Réplication avec MariaDB

Notions théoriques

La réplication est un processus par lequel :

  • les données d'une base de données MariaDB sont copiées (répliquées) d'un serveur MariaDB (appelé le serveur principal)
  • vers un ou plusieurs serveurs MariaDB (appelés serveurs secondaires).
Termes utilisés

Historiquement, dans le cadre de la réplication de bases de données, les termes maître et esclave étaient couramment utilisés pour désigner respectivement le serveur principal (qui envoie les données) et le serveur secondaire (qui reçoit les données).

Cependant, ces termes ont été progressivement abandonnés pour des raisons éthiques et inclusives.

Aujourd'hui, MariaDB et d'autres systèmes de bases de données utilisent des termes plus neutres et descriptifs tels que principal/secondaire ou source/réplica pour désigner ces rôles.

Nous utilisons les termes serveur principal et serveur secondaire pour refléter cette évolution.

La réplication peut être utilisée :

  • pour des raisons de performance (répartir la charge de lecture entre plusieurs serveurs),
  • pour des raisons de sécurité (avoir une copie des données en cas de panne du serveur principal)
  • ou pour des raisons de disponibilité des données (avoir les données disponibles à plusieurs endroits).
attention

La réplication n'est pas une sauvegarde.

Les 4 étapes pour configurer une réplication

Pour mettre en place une réplication MariaDB entre un serveur principal et un serveur secondaire, voici les 4 étapes à suivre :

  1. Configurer le serveur principal : Activer le journal binaire et créer un utilisateur de réplication.
  2. Créer une copie des données : Verrouiller le serveur principal, exporter les données et noter la position du journal binaire.
  3. Configurer le serveur secondaire : Activer le journal de relais, importer les données et configurer la connexion au serveur principal.
  4. Démarrer la réplication : Lancer le processus de réplication sur le serveur secondaire.

Exemple pratique

Exemple d'une réplication entre 2 serveurs MariaDB :

  • Serveur principal : IP 192.168.1.10
  • Serveur secondaire : IP 192.168.1.20

1. Configuration du serveur principal

  1. Modifier le fichier de configuration de MariaDB :
    Ouvrez le fichier /etc/mysql/mariadb.conf.d/50-server.cnf et ajoutez ou modifiez les lignes suivantes :

    log_bin = /var/log/mysql/mariadb-bin
    log_bin_index = /var/log/mysql/mariadb-bin.index
    server-id = 1

    Le server-id doit être unique pour chaque serveur impliqué dans la réplication.

  2. Créer le dossier pour les journaux binaires :
    Si le dossier /var/log/mysql n'existe pas, créez-le avec la commande suivante :

    sudo mkdir -p /var/log/mysql
  3. Redémarrer MariaDB :
    Appliquez la configuration en redémarrant le service MariaDB :

    sudo service mariadb restart
  4. Créer un utilisateur de réplication :
    Connectez-vous à MariaDB et créez un utilisateur pour la réplication :

    sudo mysql
    CREATE USER 'replication'@'192.168.1.20' IDENTIFIED BY 'password';
    GRANT REPLICATION SLAVE ON *.* TO 'replication'@'192.168.1.20';
  5. Afficher les informations du journal binaire :
    Exécutez la commande suivante pour obtenir les valeurs de MASTER_LOG_FILE et MASTER_LOG_POS :

    SHOW MASTER STATUS;

    Notez ces valeurs, elles seront utilisées pour configurer le serveur secondaire.


2. Créer une copie des données

  1. Placer un verrou en lecture sur le serveur principal :
    Cela garantit que les données ne changent pas pendant la copie :

    FLUSH TABLES WITH READ LOCK;

    Cette commande vide toutes les tables en mémoire sur le disque et place un verrou en lecture global.

  2. Obtenir la position actuelle du journal binaire :
    Exécutez à nouveau la commande suivante pour noter les valeurs de MASTER_LOG_FILE et MASTER_LOG_POS :

    SHOW MASTER STATUS;
  3. Exporter les données du serveur principal :
    Utilisez la commande mysqldump pour créer une sauvegarde de toutes les bases de données :

    mysqldump -u root -p --all-databases > dump.sql
  4. Libérer le verrou en lecture :
    Une fois la copie terminée, libérez le verrou :

    UNLOCK TABLES;
  5. Transférer le fichier de sauvegarde vers le serveur secondaire :
    Utilisez la commande scp pour copier le fichier exporté (dump.sql) vers le serveur secondaire :

    scp dump.sql user@192.168.1.20:/path/to/destination

3. Configuration du serveur secondaire

  1. Modifier le fichier de configuration de MariaDB :
    Ouvrez le fichier /etc/mysql/mariadb.conf.d/50-server.cnf et ajoutez ou modifiez les lignes suivantes :

    relay_log = /var/log/mysql/mariadb-relay-bin
    relay_log_index = /var/log/mysql/mariadb-relay-bin.index
    server-id = 2

    Le server-id doit être différent de celui du serveur principal.

  2. Redémarrer MariaDB :
    Appliquez la configuration en redémarrant le service MariaDB :

    sudo service mariadb restart
  3. Importer les données copiées depuis le serveur principal :
    Chargez le fichier de sauvegarde transféré (dump.sql) dans le serveur secondaire :

    mysql -u root -p < /path/to/destination/dump.sql
  4. Configurer la réplication :
    Utilisez les informations obtenues avec SHOW MASTER STATUS sur le serveur principal pour configurer la réplication :

    CHANGE MASTER TO 
    MASTER_HOST='192.168.1.10',
    MASTER_USER='replication',
    MASTER_PASSWORD='password',
    MASTER_LOG_FILE='mysql-bin.000001',
    MASTER_LOG_POS=120;

    Remplacez MASTER_LOG_FILE et MASTER_LOG_POS par les valeurs obtenues précédemment.


4. Démarrer la réplication

attention

Avant de démarrer la réplication d'une base de données, il est important que les données soit identiques des 2 côtés (serveur principal et serveur secondaire).

  1. Lancer la réplication :
    Exécutez la commande suivante sur le serveur secondaire :

    START SLAVE;
  2. Vérifier le statut de la réplication :
    Assurez-vous que la réplication fonctionne correctement en exécutant :

    SHOW SLAVE STATUS\G;

    Vérifiez que les valeurs Slave_IO_Running et Slave_SQL_Running sont définies sur Yes.


Test de mémorisation/compréhension


Quelle est l'utilité du journal binaire sur le serveur principal ?


Quelle est l'utilité du journal binaire sur le serveur principal ?


Quelle est l'utilité du journal de relais sur le serveur secondaire ?


Quelle commande permet de créer un utilisateur de réplication sur le serveur principal ?


Quelle commande permet de changer les paramètre du maitre puis de commencer la réplication ?


Quelle est la première action effectuée par la commande `FLUSH TABLES WITH READ LOCK` ?


Quel est l'objectif principal de la commande `FLUSH TABLES WITH READ LOCK` ?


Que se passe-t-il après l'exécution de `UNLOCK TABLES` ?


Pourquoi est-il important de minimiser la durée de verrouillage du serveur primaire ?


Quelle commande permet d'obtenir la position actuelle du journal binaire ?


Dans quel ordre les commandes doivent-elles être exécutées dans le contexte de la réplication ?


Quel type de verrou est placé par `FLUSH TABLES WITH READ LOCK` ?


Quel est le rôle principal de la commande `UNLOCK TABLES` dans le processus de réplication ?


Quel est l'effet d'un verrou en lecture sur le serveur primaire ?



Atelier sur la réplication

Mise en place de la réplication entre 2 serveurs MariaDB

Dans cet atelier, vous allez configurer une réplication entre deux serveurs MariaDB en créant deux machines virtuelles sous Debian dans Proxmox. Vous suivrez les étapes pour configurer un serveur principal et un serveur secondaire, et vérifierez que la réplication fonctionne correctement.

Objectifs

  • Créer deux machines virtuelles sous Debian dans Proxmox.
  • Installer MariaDB sur les deux machines.
  • Configurer un serveur principal et un serveur secondaire pour la réplication.
  • Vérifier que les données insérées sur le serveur principal sont bien répliquées sur le serveur secondaire.

Résultats attendus

À la fin de cet atelier, vous aurez configuré une réplication fonctionnelle entre deux serveurs MariaDB. Vous serez capable de :

  • Créer et configurer des machines virtuelles sous Debian.
  • Installer et configurer MariaDB pour la réplication.
  • Vérifier que les données sont correctement répliquées entre les deux serveurs.

Vérification de la réplication

Pensez à vérifier que la réplication fonctionne correctement. Vous pouvez le faire en ajoutant des données dans une table existante sur le serveur principal, puis en vérifiant si ces modifications sont répliquées sur le serveur secondaire.

  1. Sur le serveur principal, insérez une ligne dans une table existante. Par exemple, supposons qu'il existe une base de données test_replication avec une table table_test :

    -- Sur le serveur principal
    USE test_replication;
    INSERT INTO table_test (data) VALUES ('Donnée répliquée');
  2. Sur le serveur secondaire, vérifiez si la nouvelle ligne a été répliquée :

    -- Sur le serveur secondaire
    USE test_replication;
    SELECT * FROM table_test;

    Si la ligne avec la valeur 'Donnée répliquée' apparaît dans les résultats de la commande SELECT, cela signifie que la réplication fonctionne correctement.

Rédiger 2 documentations (PDF)

Travail à faire

Préparer 2 documentations techniques : (une présentation et un tutoriel) au format PDF.

1. Présentation de la réplication

Expliquer en détails le principe de la réplication, ses avantages et ses inconvénients.

Vous devez :

  • Définir ce qu'est la réplication
  • Discuter des avantages de la réplication
  • Discuter des inconvénients de la réplication
  • Présenter les différents types de réplication

2. Tutoriel sur la réplication d'un serveur SQL

Créer un tutoriel détaillé, avec des copies d'écran, sur la mise en place d'une réplication d'un serveur SQL, en prenant l'exemple de MariaDB avec 2 serveurs sous Linux Debian.

Vous devez :

  • Expliquer les prérequis nécessaires pour la mise en place de la réplication
  • Fournir un guide pas à pas sur la mise en place de la réplication sur 2 serveurs Debian accessibles en SSH (toutes les étapes suivies) avec des copies d'écrans
  • Faire une démonstration du bon fonctionnement de la réplication (fournir une capture d'écran de la commande SHOW SLAVE STATUS\G sur le serveur secondaire)
  • Expliquer comment vérifier que la réplication fonctionne correctement (fournir une capture d'écran qui montre les données répliquées sur le serveur secondaire après insertion sur le serveur principal)