Maison  >  Article  >  base de données  >  Création d'un cluster MySQL hautement disponible : guide des meilleures pratiques pour la réplication maître-esclave et l'équilibrage de charge

Création d'un cluster MySQL hautement disponible : guide des meilleures pratiques pour la réplication maître-esclave et l'équilibrage de charge

WBOY
WBOYoriginal
2023-09-09 10:57:36972parcourir

Création dun cluster MySQL hautement disponible : guide des meilleures pratiques pour la réplication maître-esclave et léquilibrage de charge

Création d'un cluster MySQL hautement disponible : guide des meilleures pratiques pour la réplication maître-esclave et l'équilibrage de charge

Ces dernières années, avec le développement rapide d'Internet, la base de données est devenue l'un des principaux moteurs de stockage et de traitement des données de la plupart des applications Web. Dans ce scénario, la haute disponibilité et l'équilibrage de charge sont devenus des considérations importantes dans la conception de l'architecture de base de données. En tant que l'une des bases de données relationnelles open source les plus populaires, la solution de déploiement de cluster de MySQL a attiré beaucoup d'attention.

Cet article explique comment implémenter un cluster de bases de données hautement disponible via la réplication maître-esclave MySQL et l'équilibrage de charge. Nous présenterons d'abord le principe et la configuration de la réplication maître-esclave MySQL, puis discuterons de la manière d'utiliser un équilibreur de charge pour équilibrer le trafic d'accès à la base de données.

1. Le principe et la configuration de la réplication maître-esclave MySQL

La réplication maître-esclave MySQL est une technologie de réplication de base de données basée sur la transmission de journaux. Elle enregistre les opérations de modification sur la base de données maître dans des journaux binaires, puis lit ces journaux. modifier la base de données esclave pour obtenir la synchronisation des données entre la base de données maître et la base de données esclave.

La configuration de la réplication maître-esclave MySQL nécessite les étapes suivantes :

  1. Configurer la base de données maître

Ajouter la configuration suivante dans le fichier de configuration my.cnf de la base de données maître :

[mysqld]
server-id=1
log_bin=mysql-bin
binlog_format=ROW
  1. Créer un compte de réplication et autoriser

Connexion Accédez à la base de données maître, créez un compte de réplication et accordez les autorisations de réplication :

CREATE USER 'repl'@'slaveip' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'slaveip';
FLUSH PRIVILEGES;

Remplacez slaveip par l'adresse IP de la base de données esclave et mot de passe par le mot de passe du compte de réplication. slaveip替换为从数据库的IP地址,password替换为复制账号的密码。

  1. 启动主数据库的二进制日志

登录到主数据库的mysql命令行中,执行以下命令启动二进制日志:

mysql> FLUSH TABLES WITH READ LOCK;
mysql> SHOW MASTER STATUS;

记录下FilePosition的值,后续在配置从数据库时会用到。

  1. 配置从数据库

在从数据库的配置文件my.cnf中增加以下配置:

[mysqld]
server-id=2

然后重启从数据库。

  1. 启动从数据库复制

在从数据库的mysql命令行中执行以下命令启动复制:

mysql> CHANGE MASTER TO MASTER_HOST='masterip', MASTER_USER='repl', MASTER_PASSWORD='password', MASTER_LOG_FILE='filename', MASTER_LOG_POS=position;
mysql> START SLAVE;

masterip替换为主数据库的IP地址,password替换为复制账号的密码,filenameposition替换为上一步中记录的值。

配置完成后,从数据库将开始与主数据库进行同步。

二、负载均衡器的选择和配置

在高可用的数据库集群中,负载均衡器发挥着至关重要的作用。它可以在多个从数据库之间均衡分发读操作的请求,从而提高系统的整体性能和可用性。

常见的MySQL负载均衡器有HAProxy、MaxScale和MySQL Router等。以HAProxy为例,下面是一个示例的配置文件:

global
    maxconn 4096

defaults
    mode tcp
    timeout connect 5000ms
    timeout client 50000ms
    timeout server 50000ms

listen mysql-cluster
    bind 0.0.0.0:3306
    mode tcp
    balance roundrobin
    option mysql-check user haproxy_check
    server mysql-1 masterip:3306 check
    server mysql-2 slaveip:3306 check

masteripslaveip替换为主从数据库的IP地址。

配置完成后,启动HAProxy服务,即可使用HAProxy进行数据库访问的负载均衡。

三、代码示例

以下是一个简单的PHP代码示例,用于演示如何通过负载均衡器连接到MySQL数据库集群:

<?php
$host = 'load-balancer-ip';
$user = 'username';
$pass = 'password';
$db = 'database';

$conn = new mysqli($host, $user, $pass, $db);

if($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$sql = "SELECT * FROM users";
$result = $conn->query($sql);

if($result->num_rows > 0) {
    while($row = $result->fetch_assoc()) {
        echo "ID: " . $row["id"] . " - Name: " . $row["name"] . "<br>";
    }
} else {
    echo "0 results";
}

$conn->close();
?>

load-balancer-ip替换为负载均衡器的IP地址,usernamepassworddatabase

    Démarrez le journal binaire de la base de données principale

    Connectez-vous à la ligne de commande mysql de la base de données principale et exécutez la commande suivante pour démarrer le journal binaire :

    rrreee

    Enregistrez le Fichier et la valeur de Position seront utilisées ultérieurement lors de la configuration de la base de données esclave.

      🎜Configurer la base de données esclave🎜🎜🎜Ajoutez la configuration suivante dans le fichier de configuration my.cnf de la base de données esclave : 🎜rrreee🎜Puis redémarrez la base de données esclave. 🎜
        🎜Démarrer la réplication depuis la base de données🎜🎜🎜Exécutez la commande suivante dans la ligne de commande mysql de la base de données esclave pour démarrer la réplication :🎜rrreee🎜Remplacez masterip par l'adresse IP adresse de la base de données master, remplacez password par le mot de passe du compte copié, et remplacez filename et position par les valeurs enregistrées dans le étape précédente. 🎜🎜Une fois la configuration terminée, la base de données esclave commencera à se synchroniser avec la base de données maître. 🎜🎜2. Sélection et configuration de l'équilibreur de charge🎜🎜 Dans un cluster de bases de données à haute disponibilité, l'équilibreur de charge joue un rôle essentiel. Il peut répartir uniformément les demandes d'opérations de lecture entre plusieurs bases de données esclaves, améliorant ainsi les performances globales et la disponibilité du système. 🎜🎜Les équilibreurs de charge MySQL courants incluent HAProxy, MaxScale et MySQL Router. En prenant HAProxy comme exemple, voici un exemple de fichier de configuration : 🎜rrreee🎜Remplacez masterip et slaveip par les adresses IP des bases de données maître et esclave. 🎜🎜Une fois la configuration terminée, démarrez le service HAProxy et vous pourrez utiliser HAProxy pour équilibrer la charge de l'accès à la base de données. 🎜🎜3. Exemple de code🎜🎜Ce qui suit est un exemple de code PHP simple pour montrer comment se connecter à un cluster de base de données MySQL via un équilibreur de charge : 🎜rrreee🎜Remplacez load-balancer-ip par load The L'adresse IP de l'équilibreur, le nom d'utilisateur, le mot de passe et la base de données sont remplacés par les informations de connexion à la base de données correctes. 🎜🎜Avec la configuration et l'exemple de code ci-dessus, nous pouvons implémenter un cluster MySQL hautement disponible et réaliser un équilibrage de charge de l'accès à la base de données via l'équilibreur de charge. Une telle architecture peut non seulement améliorer la disponibilité et les performances du système, mais également mieux faire face à diverses pannes et scénarios de concurrence élevée. 🎜🎜Résumé : 🎜🎜Cet article explique comment implémenter un cluster de bases de données hautement disponible via la réplication maître-esclave MySQL et l'équilibrage de charge. Grâce à la réplication maître-esclave, la synchronisation des données entre la base de données maître et la base de données esclave peut être réalisée grâce à l'équilibreur de charge, les demandes d'accès à la base de données peuvent être réparties uniformément. Dans le même temps, nous fournissons également des exemples de configuration et de code correspondants pour permettre aux lecteurs de démarrer rapidement. J'espère que cet article pourra fournir des références et aider tout le monde à créer un cluster MySQL hautement disponible. 🎜

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