GNU/Linux >> LINUX-Kenntnisse >  >> Debian

So installieren Sie Percona XtraDB Cluster für MySQL unter Debian 8

In diesem Artikel zeige ich Ihnen, wie Sie einen MySQL-Datenbank-Cluster mit drei Knoten in einer Multi-Master-Replikation konfigurieren. Die Multi-Master-Replikation ermöglicht das Schreiben von Datensätzen in jeden Knoten. Wenn also ein Knoten ausfällt, können wir an dem anderen arbeiten, als ob nichts passiert wäre.

Die offizielle Dokumentation von Percona finden Sie auf der offiziellen Website https://www.percona.com/

Erstens, warum wählen wir drei Knoten und nicht nur zwei? In jedem Cluster sollte die Anzahl der Knoten ungerade sein. Im Falle der Trennung eines Knotens gehen wir also davon aus, dass die höchste Servergruppe die aktuellen Daten hat und auf den inaktiven Knoten repliziert werden sollte, um Datenverluste zu vermeiden. Dies bezieht sich nur auf die Lösung von Konflikten bei der Datenreplikation, wir verlieren keine Daten, die nur auf den getrennten Knoten geschrieben wurden.

Dies wird verwendet, um einen Umstand namens Split Brain zu vermeiden , in dem wir nicht automatisch auswählen können, welcher Knoten die richtigen Daten hat. Denken Sie zum Beispiel an einen 2-Knoten-Cluster, bei dem beide Knoten voneinander getrennt sind und derselbe Datensatz auf beide Knoten geschrieben wird:Wer gewinnt, wenn sie wieder online sind? Wir wissen es nicht, also kommt es zu Split Brain und wir müssen manuell entscheiden, welcher Datensatz der richtige ist.

Die Anzahl der Knoten, die benötigt wird, um zu bestimmen, welcher Teil des Clusters die richtigen Daten hat, wird QUORUM genannt, in unserem Fall ist das Quorum 2. Wir brauchen also immer 2 Server, die miteinander verbunden sind. Falls alle drei Knoten ausfallen, haben wir ein Split Brain und müssen manuell entscheiden, welcher Server in den Bootstrap-Modus wechseln soll. Dies ist das Verfahren, um zu bestimmen, welcher der Hauptserver ist, der vom Split Brain fortgesetzt werden soll.

Konfigurieren des Percona XtraDB-Clusters unter Debian 8

Dieses Tutorial beschreibt, wie drei Percona XtraDB-Cluster-Knoten auf Debian 8-Servern installiert und konfiguriert werden, wir werden die Pakete aus den Percona-Repositories verwenden.

  • Server 1
    • Hostname:mysql1.local.vm
    • IP-Adresse:192.168.152.100
  • Knoten 2
    • Hostname: mysql2.local.vm
    • IP-Adresse:192.168.152.110
  • Knoten 3
    • Hostname: mysql3.local.vm
    • IP-Adresse:192.168.152.120

Ändern Sie auf jedem Host die Datei /etc/hosts wie folgt, um sicherzustellen, dass DNS korrekt funktioniert.

127.0.0.1 localhost
192.168.152.100 mysql1.local.vm mysql1
192.168.152.110 mysql2.local.vm mysql2
192.168.152.120 mysql3.local.vm mysql3

# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

Voraussetzungen

Das in diesem Tutorial beschriebene Verfahren erfordert die folgende minimale Serverkonfiguration:

  • Alle drei Knoten haben Debian 8, ich empfehle, dieser Anleitung zu folgen https://www.howtoforge.com/tutorial/debian-8-jessie-minimal-server/

Schritt 1. Percona Xtradb Cluster installieren

Führen Sie auf allen Knoten die folgenden Befehle als root aus:

wget https://repo.percona.com/apt/percona-release_0.1-4.$(lsb_release -sc)_all.deb
dpkg -i percona-release_0.1-4.$(lsb_release -sc)_all.deb
apt-get update
apt-get -y install percona-xtradb-cluster-57

Geben Sie natürlich das gewünschte MySQL-Passwort ein.

Nachdem die Pakete installiert wurden, mysqld startet automatisch. Beenden Sie mysqld auf allen drei Knoten mit /etc/init.d/mysql stop .

Schritt 2. Konfigurieren des ersten Knotens

Einzelne Knoten sollten so konfiguriert werden, dass sie den Cluster booten können. Weitere Informationen zum Bootstrapping des Clusters finden Sie unter Bootstrapping des Clusters .

  1. Achten Sie darauf, diese Zeilen zur Konfigurationsdatei /etc/mysql/my.cnf hinzuzufügen für den ersten Knoten (mysql1.local.vm) am Ende des Abschnitts [mysqld]:

    [mysqld]

    ... # Path to Galera library
    wsrep_provider=/usr/lib/libgalera_smm.so

    # Cluster connection URL contains the IPs of node#1, node#2 and node#3
    wsrep_cluster_address=gcomm://192.168.152.100,192.168.152.110,192.168.152.120

    # In order for Galera to work correctly binlog format should be ROW
    binlog_format=ROW

    # MyISAM storage engine has only experimental support
    default_storage_engine=InnoDB

    # This InnoDB autoincrement locking mode is a requirement for Galera
    innodb_autoinc_lock_mode=2

    # Node #1 address
    wsrep_node_address=192.168.152.100

    # SST method
    wsrep_sst_method=xtrabackup-v2

    # Cluster name
    wsrep_cluster_name=my_ubuntu_cluster

    # Authentication for SST method
    wsrep_sst_auth="sstuser:PASSW0RD"

    Achten Sie auf das Passwort, das Sie dort einrichten, in meinem Fall "PASSW0RD".

  2. Starten Sie den ersten Knoten mit dem folgenden Befehl:

    [email protected]:~# /etc/init.d/mysql bootstrap-pxc
    

    Dieser Befehl startet den ersten Knoten und bootet den Cluster, wenn alles in Ordnung ist, sehen Sie etwa Folgendes:

    [email protected]:~# /etc/init.d/mysql bootstrap-pxc
    [ ok ] Bootstrapping Percona XtraDB Cluster database server: mysqld ..
    [email protected]:~#
  3. Nachdem der erste Knoten gestartet wurde, stellen Sie mit dem klassischen mysql -p-Befehl eine Verbindung zu mysql her, dann kann der Clusterstatus überprüft werden, indem Sie die Abfrage „show status“ wie „wsrep%“ ausführen; wie im folgenden Beispiel:

  4. mysql> show status like 'wsrep%';
    +----------------------------+--------------------------------------+
    | Variable_name              | Value                                |
    +----------------------------+--------------------------------------+
    | wsrep_local_state_uuid     | 0251a27c-8a19-11e6-905b-f3f13b0ddc5b |
    ...
    | wsrep_local_state          | 4                                    |
    | wsrep_local_state_comment  | Synced                               |
    ...
    | wsrep_cluster_size         | 1                                    |
    | wsrep_cluster_status       | Primary                              |
    | wsrep_connected            | ON                                   |
    ...
    | wsrep_ready                | ON                                   |
    +----------------------------+--------------------------------------+
    59 rows in set (0.00 sec)
    

Diese Ausgabe zeigt, dass der Cluster erfolgreich gebootet wurde.

Um State Snapshot Transfer durchzuführen mit XtraBackup , richten Sie einen neuen Benutzer mit den entsprechenden Rechten ein:

mysql> CREATE USER 'sstuser'@'localhost' IDENTIFIED BY 'PASSW0RD';
mysql> GRANT PROCESS, RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'sstuser'@'localhost';
mysql> FLUSH PRIVILEGES;

Hinweis

Das MySQL-Root-Konto kann auch zum Ausführen von SST verwendet werden, aber es ist sicherer, dafür einen anderen (Nicht-Root-)Benutzer zu verwenden.

Schritt 3. Konfiguration des zweiten Knotens

  1. Hängen Sie die folgenden Zeilen an die Konfigurationsdatei /etc/mysql/my.cnf an auf dem zweiten Knoten (mysql2.local.vm), sodass er die folgenden Daten enthält:

    [mysqld]

    ... # Path to Galera library
    wsrep_provider=/usr/lib/libgalera_smm.so

    # Cluster connection URL contains the IPs of node#1, node#2 and node#3
    wsrep_cluster_address=gcomm://192.168.152.100,192.168.152.110,192.168.152.120

    # In order for Galera to work correctly binlog format should be ROW
    binlog_format=ROW

    # MyISAM storage engine has only experimental support
    default_storage_engine=InnoDB

    # This InnoDB autoincrement locking mode is a requirement for Galera
    innodb_autoinc_lock_mode=2

    # Node #2 address
    wsrep_node_address=192.168.152.110

    # SST method
    wsrep_sst_method=xtrabackup-v2

    # Cluster name
    wsrep_cluster_name=my_ubuntu_cluster

    # Authentication for SST method
    wsrep_sst_auth="sstuser:PASSW0RD"
  2. Starten Sie den zweiten Knoten mit dem folgenden Befehl (Achtung, dieses Mal befindet er sich, wie Sie sehen können, nicht im Boostrap-Modus!!):

    [email protected]:~# /etc/init.d/mysql start
    
  3. Nachdem der Server gestartet wurde, sollte er SST empfangen automatisch. Der Clusterstatus kann jetzt auf beiden Knoten überprüft werden. Das Folgende ist ein Beispiel für den Status des zweiten Knotens (mysql2.local.vm):

  4. mysql> show status like 'wsrep%';
    +----------------------------+--------------------------------------+
    | Variable_name              | Value                                |
    +----------------------------+--------------------------------------+
    | wsrep_local_state_uuid     | 0251a27c-8a19-11e6-905b-f3f13b0ddc5b |
    ...
    | wsrep_local_state          | 4                                    |
    | wsrep_local_state_comment  | Synced                               |
    ...
    | wsrep_cluster_size         | 2                                    |
    | wsrep_cluster_status       | Primary                              |
    | wsrep_connected            | ON                                   |
    ...
    | wsrep_ready                | ON                                   |
    +----------------------------+--------------------------------------+
    40 rows in set (0.01 sec)
    

    Diese Ausgabe zeigt, dass der neue Knoten erfolgreich zum Cluster hinzugefügt wurde. Beachten Sie die Variable wsrep_cluster_size, die 2 geworden ist, anstatt einer der ersten Abfragen, die wir gemacht haben.

Schritt 4. Konfiguration des dritten Knotens

  1. Hängen Sie die folgenden Zeilen an die Konfigurationsdatei /etc/mysql/my.cnf an auf dem zweiten Knoten (mysql3.local.vm), also enthält er die folgende Konfiguration:

    [mysqld]

    ... # Path to Galera library
    wsrep_provider=/usr/lib/libgalera_smm.so

    # Cluster connection URL contains the IPs of node#1, node#2 and node#3
    wsrep_cluster_address=gcomm://192.168.152.100,192.168.152.110,192.168.152.120

    # In order for Galera to work correctly binlog format should be ROW
    binlog_format=ROW

    # MyISAM storage engine has only experimental support
    default_storage_engine=InnoDB

    # This InnoDB autoincrement locking mode is a requirement for Galera
    innodb_autoinc_lock_mode=2

    # Node #2 address
    wsrep_node_address=192.168.152.120

    # SST method
    wsrep_sst_method=xtrabackup-v2

    # Cluster name
    wsrep_cluster_name=my_ubuntu_cluster

    # Authentication for SST method
    wsrep_sst_auth="sstuser:PASSW0RD"
  2. Starten Sie den dritten Knoten mit dem folgenden Befehl:

    [email protected]:~# /etc/init.d/mysql start
    
  3. Nachdem der Server gestartet wurde, sollte er SST automatisch empfangen. Der Clusterstatus kann auf allen Knoten überprüft werden. Das Folgende ist ein Beispiel für den Status des dritten Knotens (mysql3.local.vm):

    mysql> show status like 'wsrep%';
    +----------------------------+--------------------------------------+
    | Variable_name              | Value                                |
    +----------------------------+--------------------------------------+
    | wsrep_local_state_uuid     | 0251a27c-8a19-11e6-905b-f3f13b0ddc5b |
    ...
    | wsrep_local_state          | 4                                    |
    | wsrep_local_state_comment  | Synced                               |
    ...
    | wsrep_cluster_size         | 3                                    |
    | wsrep_cluster_status       | Primary                              |
    | wsrep_connected            | ON                                   |
    ...
    | wsrep_ready                | ON                                   |
    +----------------------------+--------------------------------------+
    40 rows in set (0.01 sec)
    

    Diese Ausgabe bestätigt, dass der dritte Knoten dem Cluster beigetreten ist. Sehen Sie sich erneut wsrep_cluster_size an, das jetzt 3 statt 2 geworden ist.

Wenn Sie auf Probleme stoßen, werfen Sie einen Blick auf /var/log/syslog, um zu sehen, ob alles in Ordnung ist

Oct 4 12:16:13 mysql3 mysql[2767]: Starting MySQL (Percona XtraDB Cluster) database server: mysqld . . .State transfer in progress, setting sleep higher: mysqld . ..
Oct 4 12:16:13 mysql3 systemd[1]: Started LSB: Start and stop the mysql (Percona XtraDB Cluster) daemon.
Oct 4 12:17:01 mysql3 CRON[3731]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)

In diesem Beispiel ist alles gut gelaufen und Sie können die Statusübertragung sehen in Bearbeitung, was bedeutet, dass Daten an den Knoten übertragen werden.

Replikation testen

Um die Replikation zu testen, erstellen wir eine neue Datenbank auf dem zweiten Knoten, erstellen eine Tabelle für diese Datenbank auf dem dritten Knoten und fügen der Tabelle auf dem ersten Knoten einige Datensätze hinzu.

  1. Erstellen Sie eine neue Datenbank auf dem zweiten Knoten:

    mysql@mysql2> CREATE DATABASE percona;
    Query OK, 1 row affected (0.01 sec)
    
  2. Erstellen Sie eine Tabelle auf dem dritten Knoten:

    mysql@mysql3> USE percona;
    Database changed
    
    mysql@pxc3> CREATE TABLE example (node_id INT PRIMARY KEY, node_name VARCHAR(30));
    Query OK, 0 rows affected (0.05 sec)
    
  3. Datensätze im ersten Knoten einfügen:

    mysql@mysql1> INSERT INTO percona.example VALUES (1, 'percona1');
    Query OK, 1 row affected (0.02 sec)
    
  4. Rufen Sie alle Zeilen aus dieser Tabelle auf dem zweiten Knoten ab:

    mysql@mysql2> SELECT * FROM percona.example;
    +---------+-----------+
    | node_id | node_name |
    +---------+-----------+
    |       1 | percona1  |
    +---------+-----------+
    1 row in set (0.00 sec)
    

Um sicherzustellen, dass Ihre Anwendung den Cluster immer erreichen kann, können Sie einen Loadbalancer vor den drei Knoten hinzufügen.


Debian
  1. So installieren Sie MySQL 8.0 / 5.7 unter Debian 11 / Debian 10

  2. So installieren Sie MySQL Workbench unter Debian 10

  3. So installieren Sie MySQL unter Debian 11

  4. So installieren Sie MySQL Workbench unter Debian 11

  5. So installieren Sie PHP-Fusion 9 auf Debian 8

So installieren Sie einen CockroachDB-Cluster unter Debian 11

So installieren Sie Magento unter Debian 11

So installieren Sie ownCloud 8 auf Debian 8 (Jessie)

So installieren Sie MySQL 8 auf Debian 10

So installieren Sie MySQL/MariaDB unter Debian 11

So installieren Sie MySQL unter Debian 10