Maison  >  Article  >  base de données  >  Comment créer un cluster MySQL hautement disponible à l'aide d'une architecture de base de données distribuée

Comment créer un cluster MySQL hautement disponible à l'aide d'une architecture de base de données distribuée

WBOY
WBOYoriginal
2023-08-02 16:29:131447parcourir

Comment créer un cluster MySQL hautement disponible à l'aide d'une architecture de base de données distribuée

Avec le développement d'Internet, la demande de haute disponibilité et d'évolutivité des bases de données devient de plus en plus élevée. L'architecture de bases de données distribuées est devenue l'un des moyens efficaces de répondre à ces besoins. Cet article explique comment utiliser une architecture de base de données distribuée pour créer un cluster MySQL hautement disponible et fournit des exemples de code pertinents.

  1. Créer un cluster de réplication maître-esclave MySQL

La réplication maître-esclave MySQL est la solution de base haute disponibilité fournie par MySQL. Grâce à la réplication maître-esclave, la sauvegarde des données et la séparation lecture-écriture peuvent être réalisées. Tout d’abord, nous devons créer une bibliothèque maître et plusieurs bibliothèques esclaves. Supposons que nous ayons 3 serveurs, à savoir le serveur maître (192.168.1.100) et deux serveurs esclaves (192.168.1.101 et 192.168.1.102).

Configurez les éléments suivants sur le serveur principal :

  1. Ajoutez le contenu suivant dans le fichier de configuration my.cnf :

    server-id=1
    log-bin=mysql-bin
  2. Créez un utilisateur pour la réplication dans MySQL et accordez les autorisations de réplication :

    GRANT REPLICATION SLAVE ON *.* TO 'replication'@'192.168.1.%' IDENTIFIED BY 'password';
    FLUSH PRIVILEGES;
  3. Exécutez le commande suivante pour démarrer l'enregistrement du journal binaire :

    FLUSH TABLES WITH READ LOCK;
    SHOW MASTER STATUS;

    Enregistrez le fichier et la position affichés, qui seront utilisés dans les étapes suivantes.

Configurez le serveur esclave comme suit :

  1. Ajoutez le contenu suivant dans le fichier de configuration my.cnf :

    server-id=2
  2. Exécutez la commande suivante pour connecter le serveur esclave au serveur maître :

    CHANGE MASTER TO 
     MASTER_HOST='192.168.1.100',
     MASTER_USER='replication',
     MASTER_PASSWORD='password',
     MASTER_LOG_FILE='[MASTER_LOG_FILE]',
     MASTER_LOG_POS=[MASTER_LOG_POS];
    START SLAVE;

    Change [MASTER_LOG_FILE ] et [MASTER_LOG_POS] sont remplacés par le fichier et la position enregistrés sur le serveur maître.

Répétez les étapes ci-dessus pour configurer tous les serveurs esclaves.

  1. Créer un cluster de séparation en lecture-écriture MySQL

Après avoir construit un cluster de réplication maître-esclave, nous pouvons utiliser la séparation en lecture-écriture pour améliorer encore les performances de la base de données. La répartition lecture-écriture distribue les opérations de lecture aux serveurs esclaves et envoie les opérations d'écriture au serveur maître. Cela peut réduire la charge sur le serveur principal et améliorer les performances de concurrence des opérations de lecture.

Tout d'abord, effectuez la configuration suivante sur le serveur maître :

  1. Ajoutez le contenu suivant dans le fichier de configuration my.cnf :

    log-slave-updates
  2. Exécutez la commande suivante pour redémarrer le serveur maître :

    SET @@GLOBAL.read_only=ON;

Effectuer sur le serveur esclave Configurez comme suit :

  1. Ajoutez le contenu suivant dans le fichier de configuration my.cnf :

    read-only
  2. Exécutez la commande suivante pour redémarrer le serveur esclave :

    SET @@GLOBAL.read_only=OFF;

Ensuite, nous devons configurer séparation lecture-écriture dans l’application. En supposant que nous utilisons PHP pour développer des applications, voici un exemple de code simplifié :

<?php
$readConn = new mysqli('192.168.1.101', 'username', 'password', 'database');
$writeConn = new mysqli('192.168.1.100', 'username', 'password', 'database');

// 读操作
$result = $readConn->query("SELECT * FROM table");

// 写操作
$writeConn->query("INSERT INTO table (column1, column2) VALUES ('value1', 'value2')");
?>
  1. Création d'un cluster de partitionnement MySQL

Le partitionnement MySQL est une méthode de répartition des données sur plusieurs serveurs pour améliorer les performances de l'évolutivité de la base de données. Un cluster partitionné divise les données en plusieurs partitions, chaque partition stockant une partie des données. Avant le partitionnement, vous devez d'abord définir des règles de partitionnement dans l'application.

Ce qui suit est un exemple de code qui implémente la logique du stockage partitionné basé sur l'ID utilisateur :

<?php
$user_id = 1;
$shard_id = $user_id % 3;

$conn = new mysqli('192.168.1.10' . $shard_id, 'username', 'password', 'database');

$result = $conn->query("SELECT * FROM table WHERE user_id = " . $user_id);
?>

Lors de la construction d'un cluster partitionné, vous devez créer plusieurs serveurs de base de données et les configurer en conséquence. Chaque serveur de base de données stocke une partie des données et lit et écrit les données via les règles de partitionnement de l'application.

Résumé

En créant un cluster de réplication maître-esclave MySQL, un cluster de séparation en lecture-écriture et un cluster fragmenté, nous pouvons obtenir un cluster MySQL hautement disponible et améliorer les performances et l'évolutivité de la base de données. Dans les applications réelles, des problèmes tels que la sauvegarde et la récupération des données, le basculement, etc. doivent également être pris en compte, et les configurations et optimisations correspondantes doivent être effectuées. J'espère que les exemples de code et les configurations ci-dessus pourront aider les lecteurs à comprendre et à appliquer l'architecture de base de données distribuée.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn