GNU/Linux >> Linux Esercitazione >  >> Debian

Come installare Percona XtraDB Cluster per MySQL su Debian 8

In questo articolo, ti mostrerò come configurare un cluster di database MySQL con tre nodi in una replica multi-master. La replica multi-master consente la scrittura di record in ciascun nodo, quindi se un nodo si guasta, possiamo lavorare sull'altro come se nulla fosse.

La documentazione ufficiale di Percona è reperibile sul sito ufficiale https://www.percona.com/

Innanzitutto perché scegliamo tre nodi e non solo due? In qualsiasi cluster, il numero di nodi dovrebbe essere dispari, quindi in caso di disconnessione di un nodo, assumiamo che il gruppo di server più alto abbia i dati aggiornati e dovrebbe essere replicato sul nodo inattivo per evitare la perdita di dati. Questo è correlato solo alla risoluzione dei conflitti nella replica dei dati, non perderemo i dati scritti solo sul nodo disconnesso.

Viene utilizzato per evitare una circostanza chiamata cervello diviso , in cui non possiamo scegliere automaticamente quale nodo ha dati corretti. Pensa ad esempio a un cluster a 2 nodi in cui entrambi i nodi sono disconnessi l'uno dall'altro e lo stesso record viene scritto su entrambi i nodi:chi vince quando tornano online? Non lo sappiamo, quindi si verifica la divisione del cervello e dobbiamo decidere manualmente quale record è quello giusto.

Il numero di nodi necessario per determinare quale parte del cluster ha i dati corretti si chiama QUORUM, nel nostro caso il quorum sarà 2. Quindi abbiamo bisogno che 2 server siano sempre collegati tra loro. Nel caso in cui tutti e tre i nodi si interrompano, abbiamo un cervello diviso e dobbiamo decidere quale server deve passare in modalità bootstrap manualmente, questa è la procedura per determinare quale sarà il server principale da riprendere dal cervello diviso.

Configurazione del cluster Percona XtraDB su Debian 8

Questo tutorial descrive come installare e configurare tre nodi Percona XtraDB Cluster su server Debian 8, useremo i pacchetti dai repository Percona.

  • server 1
    • Nome host:mysql1.local.vm
    • Indirizzo IP:192.168.152.100
  • Nodo 2
    • Nome host: mysql2.local.vm
    • Indirizzo IP:192.168.152.110
  • Nodo 3
    • Nome host: mysql3.local.vm
    • Indirizzo IP:192.168.152.120

Su ciascun host, modifica il file /etc/hosts come segue per assicurarti che il DNS funzioni correttamente.

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

Prerequisiti

La procedura descritta in questo tutorial richiede la seguente configurazione minima del server:

  • Tutti e tre i nodi hanno Debian 8, ti consiglio di seguire questa guida https://www.howtoforge.com/tutorial/debian-8-jessie-minimal-server/

Passaggio 1. Installazione di Percona Xtradb Cluster

Su tutti i nodi, esegui i seguenti comandi come root:

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

Ovviamente, inserisci la password mysql che desideri scegliere.

Dopo che i pacchetti sono stati installati, mysqld si avvierà automaticamente. Interrompi mysqld su tutti e tre i nodi usando /etc/init.d/mysql stop .

Fase 2. Configurazione del primo nodo

I singoli nodi devono essere configurati per essere in grado di eseguire il bootstrap del cluster. Per ulteriori informazioni sul bootstrap del cluster, vedere Bootstrapping del cluster .

  1. Assicurati di aggiungere queste righe al file di configurazione /etc/mysql/my.cnf per il primo nodo (mysql1.local.vm) alla fine della sezione [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"

    Presta attenzione alla password che hai impostato lì nel mio caso "PASSW0RD".

  2. Avvia il primo nodo con il seguente comando:

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

    Questo comando avvierà il primo nodo e avvierà il cluster, vedrai qualcosa del genere se tutto è a posto:

    [email protected]:~# /etc/init.d/mysql bootstrap-pxc
    [ ok ] Bootstrapping Percona XtraDB Cluster database server: mysqld ..
    [email protected]:~#
  3. Dopo che il primo nodo è stato avviato, connettiti a mysql con il classico comando mysql -p, quindi lo stato del cluster può essere verificato eseguendo la query mostra lo stato come 'wsrep%'; come nell'esempio seguente:

  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)
    

Questo output mostra che il cluster è stato avviato correttamente.

Per eseguire Trasferimento di istantanee di stato utilizzando XtraBackup , configura un nuovo utente con i privilegi appropriati:

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

Nota

L'account root MySQL può essere utilizzato anche per eseguire SST, ma è più sicuro utilizzare un utente diverso (non root).

Fase 3. Configurazione del secondo nodo

  1. Aggiungi le seguenti righe al file di configurazione /etc/mysql/my.cnf sul secondo nodo (mysql2.local.vm), in modo che contenga i seguenti dati:

    [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. Avvia il secondo nodo con il seguente comando (attenzione questa volta come puoi vedere non è in modalità boostrap!!):

    [email protected]:~# /etc/init.d/mysql start
    
  3. Dopo che il server è stato avviato, dovrebbe ricevere SST automaticamente. Lo stato del cluster può ora essere verificato su entrambi i nodi. Quello che segue è un esempio dello stato del secondo nodo (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)
    

    Questo output mostra che il nuovo nodo è stato aggiunto correttamente al cluster. Nota la variabile wsrep_cluster_size che è diventata 2, invece di una delle prime query che abbiamo fatto.

Fase 4. Configurazione del terzo nodo

  1. Aggiungi le seguenti righe al file di configurazione /etc/mysql/my.cnf sul secondo nodo (mysql3.local.vm), quindi contiene la seguente configurazione:

    [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. Avvia il terzo nodo con il seguente comando:

    [email protected]:~# /etc/init.d/mysql start
    
  3. Dopo che il server è stato avviato, dovrebbe ricevere automaticamente SST. Lo stato del cluster può essere verificato su tutti i nodi. Quello che segue è un esempio di stato dal terzo nodo (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)
    

    Questo output conferma che il terzo nodo è entrato a far parte del cluster. Ancora una volta dai un'occhiata a wsrep_cluster_size che ora è diventato 3, invece di 2.

Se riscontri dei problemi, dai un'occhiata a /var/log/syslog per vedere se è tutto a posto

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 questo esempio, tutto è andato bene e puoi vedere il Trasferimento di stato in corso, il che significa che i dati verranno trasferiti al nodo.

Test della replica

Per testare la replica, creiamo un nuovo database sul secondo nodo, creiamo una tabella per quel database sul terzo nodo e aggiungiamo alcuni record alla tabella sul primo nodo.

  1. Crea un nuovo database sul secondo nodo:

    mysql@mysql2> CREATE DATABASE percona;
    Query OK, 1 row affected (0.01 sec)
    
  2. Crea una tabella sul terzo nodo:

    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. Inserisci i record sul primo nodo:

    mysql@mysql1> INSERT INTO percona.example VALUES (1, 'percona1');
    Query OK, 1 row affected (0.02 sec)
    
  4. Recupera tutte le righe da quella tabella sul secondo nodo:

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

Per assicurarti che la tua applicazione possa sempre raggiungere il cluster, puoi aggiungere un loadbalancer davanti ai tre nodi.


Debian
  1. Come installare MySQL 8.0 / 5.7 su Debian 11 / Debian 10

  2. Come installare MySQL Server su Debian 9

  3. Come installare MySQL Workbench su Debian 10

  4. Come installare PHP-Fusion 9 su Debian 8

  5. Come installare LAMP su Debian 8

Come installare un cluster CockroachDB su Debian 11

Come installare Magento su Debian 11

Come installare ownCloud 8 su Debian 8 (Jessie)

Come installare MySQL 8 su Debian 10

Come installare MySQL/MariaDB su Debian 11

Come installare MySQL su Debian 10