Heim > Datenbank > MySQL-Tutorial > Aufbau eines hochverfügbaren MySQL-Clusters: Best-Practice-Leitfaden für Master-Slave-Replikation und Lastausgleich

Aufbau eines hochverfügbaren MySQL-Clusters: Best-Practice-Leitfaden für Master-Slave-Replikation und Lastausgleich

WBOY
Freigeben: 2023-09-09 10:57:36
Original
1058 Leute haben es durchsucht

Aufbau eines hochverfügbaren MySQL-Clusters: Best-Practice-Leitfaden für Master-Slave-Replikation und Lastausgleich

Aufbau eines hochverfügbaren MySQL-Clusters: Best-Practice-Leitfaden für Master-Slave-Replikation und Lastausgleich

In den letzten Jahren hat sich die Datenbank mit der rasanten Entwicklung des Internets zu einer der wichtigsten Datenspeicher- und -verarbeitungs-Engines von entwickelt die meisten Webanwendungen. In diesem Szenario sind Hochverfügbarkeit und Lastausgleich zu wichtigen Überlegungen beim Entwurf der Datenbankarchitektur geworden. Als eine der beliebtesten relationalen Open-Source-Datenbanken hat die Cluster-Bereitstellungslösung von MySQL große Aufmerksamkeit auf sich gezogen.

In diesem Artikel erfahren Sie, wie Sie einen hochverfügbaren Datenbankcluster durch MySQL-Master-Slave-Replikation und Lastausgleich implementieren. Wir stellen zunächst das Prinzip und die Konfiguration der MySQL-Master-Slave-Replikation vor und besprechen dann, wie ein Load Balancer zum Ausgleich des Datenbankzugriffsverkehrs verwendet wird.

1. Das Prinzip und die Konfiguration der MySQL-Master-Slave-Replikation

MySQL-Master-Slave-Replikation ist eine Datenbankreplikationstechnologie, die auf der Protokollübertragung basiert und diese Protokolle dann liest Ändern Sie die Slave-Datenbank, um eine Datensynchronisierung zwischen der Master-Datenbank und der Slave-Datenbank zu erreichen.

Die Konfiguration der MySQL-Master-Slave-Replikation erfordert die folgenden Schritte:

  1. Konfigurieren Sie die Master-Datenbank

Fügen Sie die folgende Konfiguration in der Konfigurationsdatei my.cnf der Master-Datenbank hinzu:

[mysqld]
server-id=1
log_bin=mysql-bin
binlog_format=ROW
Nach dem Login kopieren
  1. Erstellen Sie ein Replikationskonto und autorisieren Sie

Anmelden Gehen Sie zur Master-Datenbank, erstellen Sie ein Replikationskonto und erteilen Sie Replikationsberechtigungen:

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

Ersetzen Sie slaveip durch die IP-Adresse der Slave-Datenbank und password durch das Passwort des Replikationskontos. slaveip替换为从数据库的IP地址,password替换为复制账号的密码。

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

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

mysql> FLUSH TABLES WITH READ LOCK;
mysql> SHOW MASTER STATUS;
Nach dem Login kopieren

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

  1. 配置从数据库

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

[mysqld]
server-id=2
Nach dem Login kopieren

然后重启从数据库。

  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;
Nach dem Login kopieren

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
Nach dem Login kopieren

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();
?>
Nach dem Login kopieren

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

    Starten Sie das Binärprotokoll der Hauptdatenbank

    Melden Sie sich in der MySQL-Befehlszeile der Hauptdatenbank an und führen Sie den folgenden Befehl aus, um das Binärprotokoll zu starten:

    rrreee

    Zeichnen Sie den File und der Wert von Position werden später bei der Konfiguration der Slave-Datenbank verwendet.

      🎜Konfigurieren Sie die Slave-Datenbank🎜🎜🎜Fügen Sie die folgende Konfiguration in der Konfigurationsdatei my.cnf der Slave-Datenbank hinzu: 🎜rrreee🎜Dann starten Sie die Slave-Datenbank neu. 🎜
        🎜Replikation aus der Datenbank starten🎜🎜🎜Führen Sie den folgenden Befehl in der MySQL-Befehlszeile der Slave-Datenbank aus, um die Replikation zu starten:🎜rrreee🎜Ersetzen Sie masterip durch die IP Adresse der Master-Datenbank, ersetzen Sie password durch das Passwort des kopierten Kontos und ersetzen Sie filename und position durch die in der aufgezeichneten Werte vorherigen Schritt. 🎜🎜Nachdem die Konfiguration abgeschlossen ist, beginnt die Slave-Datenbank mit der Synchronisierung mit der Master-Datenbank. 🎜🎜2. Auswahl und Konfiguration des Load Balancers🎜🎜 In einem Hochverfügbarkeits-Datenbankcluster spielt der Load Balancer eine entscheidende Rolle. Es kann Lesevorgangsanforderungen gleichmäßig auf mehrere Slave-Datenbanken verteilen und so die Gesamtleistung und Verfügbarkeit des Systems verbessern. 🎜🎜Zu den gängigen MySQL-Load-Balancern gehören HAProxy, MaxScale und MySQL Router. Am Beispiel von HAProxy ist das Folgende eine Beispielkonfigurationsdatei: 🎜rrreee🎜Ersetzen Sie masterip und slaveip durch die IP-Adressen der Master- und Slave-Datenbanken. 🎜🎜Nachdem die Konfiguration abgeschlossen ist, starten Sie den HAProxy-Dienst und Sie können HAProxy für den Lastausgleich des Datenbankzugriffs verwenden. 🎜🎜3. Codebeispiel🎜🎜Das Folgende ist ein einfaches PHP-Codebeispiel, um zu demonstrieren, wie man über einen Load Balancer eine Verbindung zu einem MySQL-Datenbankcluster herstellt: 🎜rrreee🎜Ersetzen Sie load-balancer-ip durch Load The Die IP-Adresse des Balancers, Benutzername, Passwort und Datenbank werden durch die korrekten Datenbank-Anmeldeinformationen ersetzt. 🎜🎜Mit der obigen Konfiguration und dem Beispielcode können wir einen hochverfügbaren MySQL-Cluster implementieren und über den Load Balancer einen Lastausgleich des Datenbankzugriffs erreichen. Eine solche Architektur kann nicht nur die Verfügbarkeit und Leistung des Systems verbessern, sondern auch verschiedene Fehler und Szenarien mit hoher Parallelität besser bewältigen. 🎜🎜Zusammenfassung: 🎜🎜In diesem Artikel wird erläutert, wie Sie einen hochverfügbaren Datenbankcluster durch MySQL-Master-Slave-Replikation und Lastausgleich implementieren. Durch die Master-Slave-Replikation kann eine Datensynchronisierung zwischen der Master-Datenbank und der Slave-Datenbank erreicht werden. Über den Load Balancer können Datenbankzugriffsanforderungen gleichmäßig verteilt werden. Gleichzeitig stellen wir auch entsprechende Konfigurations- und Codebeispiele zur Verfügung, um den Lesern einen schnellen Einstieg zu erleichtern. Ich hoffe, dass dieser Artikel jedem eine Referenz und Hilfe beim Aufbau eines hochverfügbaren MySQL-Clusters bieten kann. 🎜

Das obige ist der detaillierte Inhalt vonAufbau eines hochverfügbaren MySQL-Clusters: Best-Practice-Leitfaden für Master-Slave-Replikation und Lastausgleich. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage