GNU/Linux >> Tutoriales Linux >  >> Debian

Cómo instalar Percona XtraDB Cluster para MySQL en Debian 8

En este artículo, le mostraré cómo configurar un clúster de base de datos MySQL con tres nodos en una replicación multimaestro. La replicación multimaestro permite escribir registros en cada nodo, por lo que si un nodo falla, podemos trabajar en el otro como si nada.

La documentación oficial de Percona se puede encontrar en el sitio web oficial https://www.percona.com/

En primer lugar, ¿por qué elegimos tres nodos y no solo dos? En cualquier clúster, la cantidad de nodos debe ser impar, por lo que en el caso de la desconexión de un nodo, asumimos que el grupo más alto de servidores tiene los datos nuevos y debe replicarse en el nodo inactivo para evitar la pérdida de datos. Esto está relacionado solo con la resolución de conflictos en la replicación de datos, no perderemos los datos escritos solo en el nodo desconectado.

Esto se usa para evitar una circunstancia llamada cerebro dividido , en el que no podemos elegir automáticamente qué nodo tiene datos correctos. Piense, por ejemplo, en un clúster de 2 nodos en el que ambos nodos están desconectados entre sí y se escribe el mismo registro en ambos nodos:¿quién gana cuando vuelven a estar en línea? No lo sabemos, por lo que ocurre el cerebro dividido y tenemos que decidir manualmente qué registro es el correcto.

La cantidad de nodos que se necesita para determinar qué parte del clúster tiene los datos correctos se llama QUORUM, en nuestro caso, el quórum será 2. Por lo tanto, necesitamos que 2 servidores estén siempre conectados entre sí. En caso de que los tres nodos se caigan, tenemos un cerebro dividido y debemos decidir qué servidor debe entrar en modo de arranque manualmente, este es el procedimiento para determinar cuál será el servidor principal para reanudar desde el cerebro dividido.

Configuración del clúster Percona XtraDB en Debian 8

Este tutorial describe cómo instalar y configurar tres nodos de Percona XtraDB Cluster en servidores Debian 8, usaremos los paquetes de los repositorios de Percona.

  • servidor 1
    • Nombre de host:mysql1.local.vm
    • Dirección IP:192.168.152.100
  • Nodo 2
    • Nombre de host: mysql2.local.vm
    • Dirección IP:192.168.152.110
  • Nodo 3
    • Nombre de host: mysql3.local.vm
    • Dirección IP:192.168.152.120

En cada host, modifique el archivo /etc/hosts de la siguiente manera para asegurarse de que el DNS funcione correctamente.

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

Requisitos

El procedimiento descrito en este tutorial requiere la siguiente configuración mínima del servidor:

  • Los tres nodos tienen Debian 8, recomendaré seguir esta guía https://www.howtoforge.com/tutorial/debian-8-jessie-minimal-server/

Paso 1. Instalación del clúster Percona Xtradb

En todos los nodos, ejecute los siguientes comandos como 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

Obviamente, ingrese la contraseña mysql que desea elegir.

Una vez instalados los paquetes, mysqld se iniciará automáticamente. Detener mysqld en los tres nodos usando /etc/init.d/mysql stop .

Paso 2. Configuración del primer nodo

Los nodos individuales deben configurarse para poder arrancar el clúster. Para obtener más información sobre el arranque del clúster, consulte Arranque del clúster .

  1. Asegúrese de agregar estas líneas al archivo de configuración /etc/mysql/my.cnf para el primer nodo (mysql1.local.vm) al final de la sección [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"

    Preste atención a la contraseña que configuró allí en mi caso "PASSW0RD".

  2. Inicie el primer nodo con el siguiente comando:

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

    Este comando iniciará el primer nodo y arrancará el clúster, verá algo como esto si todo está bien:

    [email protected]:~# /etc/init.d/mysql bootstrap-pxc
    [ ok ] Bootstrapping Percona XtraDB Cluster database server: mysqld ..
    [email protected]:~#
  3. Después de que se haya iniciado el primer nodo, conéctese a mysql con el comando clásico mysql -p, luego se puede verificar el estado del clúster ejecutando la consulta mostrar estado como 'wsrep%'; como en el siguiente ejemplo:

  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)
    

Este resultado muestra que el clúster se ha iniciado correctamente.

Para realizar Transferencia de instantáneas de estado utilizando XtraBackup , configure un nuevo usuario con los privilegios adecuados:

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

Nota

La cuenta raíz de MySQL también se puede usar para realizar SST, pero es más seguro usar un usuario diferente (no raíz) para esto.

Paso 3. Configuración del segundo nodo

  1. Agregue las siguientes líneas al archivo de configuración /etc/mysql/my.cnf en el segundo nodo (mysql2.local.vm), para que contenga los siguientes datos:

    [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. Inicie el segundo nodo con el siguiente comando (¡atención, esta vez, como puede ver, no está en modo boostrap!):

    [email protected]:~# /etc/init.d/mysql start
    
  3. Una vez iniciado el servidor, debería recibir SST automáticamente. El estado del clúster ahora se puede verificar en ambos nodos. El siguiente es un ejemplo del estado del segundo 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)
    

    Este resultado muestra que el nuevo nodo se agregó correctamente al clúster. Tenga en cuenta la variable wsrep_cluster_size que se ha convertido en 2, en lugar de una de las primeras consultas que hicimos.

Paso 4. Configuración del tercer nodo

  1. Agregue las siguientes líneas al archivo de configuración /etc/mysql/my.cnf en el segundo nodo (mysql3.local.vm), por lo que contiene la siguiente configuración:

    [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. Inicie el tercer nodo con el siguiente comando:

    [email protected]:~# /etc/init.d/mysql start
    
  3. Una vez que se haya iniciado el servidor, debería recibir SST automáticamente. El estado del clúster se puede comprobar en todos los nodos. El siguiente es un ejemplo de estado del tercer 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)
    

    Este resultado confirma que el tercer nodo se unió al clúster. De nuevo, eche un vistazo a wsrep_cluster_size, que ahora se ha convertido en 3, en lugar de 2.

Si encuentra algunos problemas, eche un vistazo a /var/log/syslog para ver si todo está bien

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)

En este ejemplo, todo salió bien y puede ver la Transferencia de estado en curso, lo que significa que los datos se transferirán al nodo.

Prueba de replicación

Para probar la replicación, creemos una nueva base de datos en el segundo nodo, creemos una tabla para esa base de datos en el tercer nodo y agreguemos algunos registros a la tabla en el primer nodo.

  1. Cree una nueva base de datos en el segundo nodo:

    mysql@mysql2> CREATE DATABASE percona;
    Query OK, 1 row affected (0.01 sec)
    
  2. Cree una tabla en el tercer 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. Insertar registros en el primer nodo:

    mysql@mysql1> INSERT INTO percona.example VALUES (1, 'percona1');
    Query OK, 1 row affected (0.02 sec)
    
  4. Recupera todas las filas de esa tabla en el segundo nodo:

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

Para asegurarse de que su aplicación siempre pueda llegar al clúster, puede agregar un equilibrador de carga delante de los tres nodos.


Debian
  1. Cómo instalar el clúster Percona XtraDB en CentOS 7

  2. Cómo instalar MySQL 8.0/5.7 en Debian 11/Debian 10

  3. Cómo instalar el servidor MySQL en Debian 9

  4. Cómo instalar MySQL en Debian 11

  5. Cómo instalar MySQL Workbench en Debian 11

Cómo instalar un clúster de CockroachDB en Debian 11

Cómo instalar Magento en Debian 11

Cómo instalar ownCloud 8 en Debian 8 (Jessie)

Cómo instalar MySQL 8 en Debian 10

Cómo instalar MySQL/MariaDB en Debian 11

Cómo instalar MySQL en Debian 10