Cómo instalar Percona XtraDB Cluster en Debian 11

Percona XtraDB Cluster es una solución de clustering de bases de datos totalmente de código abierto para MySQL. Te permite crear un despliegue de servidores MySQL robusto y de alta disponibilidad que proporciona un alto rendimiento. La última versión de Percona XtraDB Cluster es la 8.0, que es totalmente compatible con MySQL Server Comunity Edition 8.0.

Percona XtraDB Cluster proporciona funciones como replicación síncrona, replicación multifuente, aprovisionamiento automático de nodos, configuración automática de cifrado SSL y rendimiento optimizado.

Percona XtraDB Cluster garantiza la alta disponibilidad de tu servidor de base de datos, proporciona escalabilidad lineal y evita el tiempo de inactividad y la pérdida de datos.

En este tutorial, instalarás y configurarás un clúster MySQL mediante Percona XtraDB Cluster (PXC) en servidores Debian 11. Instalarás Percona XtraDB Cluster -una solución de código abierto para el clúster MySQL- en varios servidores Debian y, a continuación, configurarás el clúster MySQL para permitir la replicación entre varios servidores MySQL.

Requisitos previos

Para completar este tutorial, necesitarás dos o más servidores que ejecuten Debian 11. Además, debes tener un usuario no root con privilegios de administrador sudo/root en todos tus servidores.

Este ejemplo utiliza tres servidores Debian 11 con los siguientes detalles:

Hostname       IP Address
--------------------------
pxc01       192.168.5.15
pxc02       192.168.5.16
pxc03       192.168.5.17

Cuando todos los servidores estén listos, puedes empezar a instalar el Cluster Percona XtraDB.

Configurar los hosts y el cortafuegos

En primer lugar, debes configurar el archivo /etc/hosts en cada servidor para asegurarte de que cada nombre de host se resuelve con la dirección IP adecuada, y después configurar un cortafuegos para abrir algunos puertos que utilizará Percona XtraDB Cluster. Esto debes hacerlo en todos los servidores.

A continuación se detallan los puertos de Percona XtraDB Cluster que debes abrir en tu cortafuegos.

Ports   Used for
---------------------------
3306    MySQL client connection and SST (State Snapshot Transfer)
4444    SST via Percona XtraBackup
4567    write-set replication traffic (over TCP) and multicast replication (over TCP and UDP)
4568    IST (Incremental State Transfer)

Para empezar, abre el archivo de configuración ‘/etc/hosts’ utilizando el siguiente editor nano.

sudo nano /etc/hosts

Añade las siguientes líneas al archivo y asegúrate de cambiar los detalles de las direcciones IP y los nombres de host con tu entorno.

192.168.5.15  pxc01
192.168.5.16  pxc02
192.168.5.17  pxc03

Guarda el archivo y sal de él cuando hayas terminado.

Ahora introduce el siguiente comando ‘apt install’ para instalar el paquete del cortafuegos ufw. Cuando se te pida, introduce y para confirmar y pulsa ENTER para continuar.

sudo apt install ufw

instalar ufw

Una vez instalado ufw, ejecuta el siguiente comando ufw para añadir el servicio OpenSSH. Esto garantizará que no se te bloquee el acceso a tu servidor. Y si tienes un puerto SSH personalizado, sólo tienes que cambiar el parámetro ‘OpenSSH’ por tu puerto SSH.

sudo ufw allow OpenSSH

A continuación, introduce el siguiente comando ufw para abrir algunos puertos que utilizará Percona XtraDB Cluster. Asegúrate de cambiar la subred de una dirección IP interna con tu entorno actual.

sudo ufw allow from 192.168.5.1/24 proto tcp to any port 3306
sudo ufw allow from 192.168.5.1/24 proto tcp to any port 4444
sudo ufw allow from 192.168.5.1/24 proto tcp to any port 4567
sudo ufw allow from 192.168.5.1/24 proto udp to any port 4567
sudo ufw allow from 192.168.5.1/24 proto tcp to any port 4568

configuración ufw

Después, ejecuta y habilita el cortafuegos ufw introduciendo el comando ‘ufw enable’. Cuando se te solicite, introduce y para confirmar y pulsa ENTER para continuar. La salida «El cortafuegos está activo y habilitado al iniciar el sistema» confirma que el cortafuegos ufw se está ejecutando y se iniciará automáticamente al iniciar el sistema.

sudo ufw enable

Por último, verifica el estado del cortafuegos ufw utilizando el siguiente comando.

sudo ufw status

Deberías recibir una salida como ésta

verificar ufw

Instalación del Cluster Percona XtraDB

En esta sección, añadirás y configurarás el repositorio de Percona XtraDB para la distribución basada en Debian. A continuación, instalarás Percona XtraDB en todos tus servidores.

Además, durante la instalación, se te pedirá que configures la contraseña raíz de MySQL y que configures el plugin de autenticación por defecto para Percona XtraDB Cluster. Por último, verificarás la instalación de Percona XtraDB Cluster iniciando sesión en el shell de MySQL mediante el usuario y contraseña raíz de MySQL que hayas configurado.

Para empezar, introduce el siguiente comando apt para instalar algunas dependencias básicas. Inpu y cuando se te solicite y pulsa ENTER para continuar.

sudo apt install wget gnupg2 lsb-release curl -y

instalar dependencias básicas

A continuación, descarga el paquete del repositorio Percona XtraDB mediante el siguiente comando wget. Una vez descargado, instálalo mediante el siguiente comando‘dpkg -i‘.

wget -q https://repo.percona.com/apt/percona-release_latest.generic_all.deb
sudo dpkg -i percona-release_latest.generic_all.deb

add repo percona xtradb

Ahora actualiza y refresca tu índice de paquetes de Debian y ejecuta el comando ‘percona-release‘ para configurar el repositorio de Percona XtraDB Cluster. En este ejemplo, habilitarás el paquete Percona XtraDB Cluster v8.0, que equivale al servidor MySQL v8.0.

sudo apt update
sudo percona-release setup pxc80

Actualiza el repositorio.

actualizar repo

Habilita el repositorio Percona XtraDB Cluster v8.0.

activar percona 80

Una vez habilitado el repositorio, introduce el comando‘apt install ‘ para instalar el paquete‘percona-xtradb-cluster ‘ en tus sistemas. Introduce y para confirmar la instalación y pulsa INTRO para continuar.

sudo apt install percona-xtradb-cluster

instalar percona extradb

Durante la instalación de Percona XtraDB Cluster, se te pedirá que configures la contraseña raíz de MySQL.

Introduce la nueva contraseña segura y selecciona Aceptar.

configurar contraseña

Repite la contraseña y vuelve a seleccionar Aceptar.

Para el complemento de autenticación de MySQL por defecto, elige la opción«Utilizar cifrado de contraseña segura (RECOMENDADO)» y selecciona Aceptar.

configurar contraseña

Ahora el Cluster Percona XtraDB debería estar instalado y se iniciará y habilitará automáticamente.

Cuando Percona XtraDB Cluster esté instalado, introduce el siguiente comando para verificar el estado del servicio MySQL.

sudo systemctl is-enabled mysql
sudo systemctl status mysql

La salida ‘enabled‘ confirma que el servidor MySQL está habilitado y se iniciará automáticamente al arrancar el sistema. Y la salida ‘activo(en ejecución)‘ confirma que el servidor MySQL está en ejecución.

configurar auth

Para verificar tu contraseña de root de MySQL, accede al shell de MySQL mediante el comando‘mysql‘ que aparece a continuación. Cuando se te pida la contraseña, introduce tu contraseña raíz de MySQL.

sudo mysql -u root -p

Si lo consigues, deberías acceder al intérprete de comandos MySQL.

acceder a mysql

También puedes verificar el estado de los detalles de tu servidor MySQL introduciendo la siguiente consulta.

sudo systemctl status mysql

Deberías recibir una salida similar a ésta – Has iniciado sesión en el Cluster MySQL 8.0 Percona XtraDB.

verificar mysql

Llegados a este punto, ya has configurado el archivo /etc/hosts de tu sistema, has instalado y configurado el cortafuegos ufw, y también has instalado el Cluster MySQL 8.0 Percona XtraDB en todos tus servidores. Ya estás listo para empezar a configurar Percona XtraDB Cluster.

Detener el servicio Percona XtraDB Cluster

Antes de empezar a configurar Percona XtraDB Cluster, debes asegurarte de que el servidor MySQL está detenido.

Introduce el siguiente comando systemctl para detener el servidor MySQL en tus servidores. A continuación, comprueba el estado del servidor MySQL para asegurarte de que el servicio está detenido.

sudo systemctl stop mysql

Una salida ‘inactivo (muerto)‘ confirma que el servidor MySQL está detenido.

Ahora puedes empezar a inicializar Percona XtraDB Cluster para el primer nodo‘pxc01‘.

Copiar certificados SSL/TLS

Percona XtraDB Cluster tiene dos tipos de cifrado de tráfico: una conexión cliente-servidor y el tráfico de replicación. En la última versión de Percona XtraDB Cluster v8.0, todo el tráfico de replicación está habilitado por defecto para mejorar la seguridad.

Durante la instalación de Percona XtraDB Cluster, SSL/TLS se genera automáticamente en el directorio de datos‘/var/lib/mysql’. Introduce el siguiente comando para comprobar la lista de certificados SL/TLS en el directorio ‘/var/lib/mysql ‘.

ls /var/lib/mysql/*.pem

Deberías ver tres tipos de certificados SSL/TLS: Cliente, Servidor y CA.

lista de certificados

Para crear y configurar Percona XtraDB Cluster, todos los servidores deben tener los mismos certificados de CA y Servidor. Por tanto, debes copiar los certificados CA y Servidor por defecto de ‘pxc01‘ a‘pxc02‘ y‘pxc03‘.

En el servidor ‘pxc01‘, mueve tu directorio de trabajo al directorio ‘/var/lib/mysql’.

cd /var/lib/mysql

Introduce el siguiente comando scp para copiar los certificados de la CA y del servidor en los servidores ‘pxc02‘ y ‘pxc03‘.

scp server-key.pem server-cert.pem ca.pem root@pax02:/var/lib/mysql
scp server-key.pem server-cert.pem ca.pem root@pax03:/var/lib/mysql

Recibirás una salida similar a ésta – Copiar certificados CA y Servidor de‘pxc01‘ a los servidores‘pxc02‘ y‘pxc03‘.

copiar certificados

copiar certificados

Con los certificados SSL/TLS copiados, puedes inicializar el Cluster Percona XtraDB.

Inicializar el Cluster Percona XtraDB en el Primer Nodo

En esta sección, inicializarás el Cluster Percona XtraDB desde el servidor del primer nodo‘pxc01‘. Asegúrate de ejecutar los siguientes pasos en el servidor ‘pxc01‘.

Abre el archivo de configuración de MySQL ‘/etc/mysql/my.cnf ‘ utilizando el siguiente comando del editor nano.

sudo nano /etc/mysql/my.cnf

Añade las siguientes líneas al archivo. Asegúrate de cambiar el valor de‘wsrep_cluster_address‘ con las direcciones IP de todos tus servidores. Además, en ‘wsrep_node_address‘, debes introducir la dirección IP de‘pxc01‘.

[mysqld]
datadir=/var/lib/mysql
user=mysql
# Path to Galera library
wsrep_provider=/usr/lib/libgalera_smm.so

# Cluster connection URL contains the IPs of pxc01, pxc02, and pxc03
wsrep_cluster_address=gcomm://192.168.5.15,192.168.5.16,192.168.5.17

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

# Using the MyISAM storage engine is not recommended.
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.5.15

# SST method
wsrep_sst_method=xtrabackup-v2

# Cluster name
wsrep_cluster_name=pxc_cluster

#pxc_strict_mode allowed values: DISABLED,PERMISSIVE,ENFORCING,MASTER
pxc_strict_mode=ENFORCING

wsrep_provider_options="socket.ssl_key=server-key.pem;socket.ssl_cert=server-cert.pem;socket.ssl_ca=ca.pem"

[sst]
encrypt=4
ssl-key=server-key.pem
ssl-ca=ca.pem

Guarda y cierra el archivo ‘/etc/mysql/mi.cnf‘ cuando hayas terminado.

confog mysql pxc01

A continuación, ejecuta el siguiente comando systemctl para arrancar e inicializar el Cluster Percona XtraDB.

El‘mysql@bootstrap‘ es un servicio systemd que se utiliza para ejecutar Percona XtraDB Cluster y es diferente del servicio‘mysql‘. Al construir un servidor MySQL con percona XtraDB Cluster, el primer nodo debe ejecutarse con el servicio ‘mysql@bootstrap‘.

systemctl start [email protected]

Cuando hayas terminado, introduce el siguiente comando mysql para acceder al shell de MySQL. Introduce la contraseña de root de tu servidor MySQL.

sudo mysql -u root -p

Introduce la siguiente consulta MySQL para asegurarte de que se inicializa el clúster.

show status like 'wsrep%';

Deberías recibir una salida como ésta – En la sección‘wsrep_cluster_size‘ verás el valor‘1’, que significa que el Cluster Percona XtraDB está inicializado con 1 servidor. También obtendrás las direcciones IP de los servidores en la sección ‘wsrep_incoming_address‘. Por último, el nodo está en estado Sincronizado, lo que significa que está totalmente conectado y listo para la replicación de escritura.

clúster activado

Con el primer nodo inicializado, estás listo para añadir el segundo y el tercer nodos‘pxc02‘ y‘pxc03‘ al Cluster Percona XtraDB.

Añadir el Nodo2 y el Nodo3 al Cluster

Añadir nuevos nodos al Cluster percona XtraDB es similar a la inicialización en el primer nodo. A continuación se indican los sencillos pasos que deberás seguir:

  • Modifica el archivo de configuración de MySQL ‘/etc/mysql/my.cnf’.
  • Inicia el servidor MySQL
  • Accede al shell de MySQL y verifica el Cluster Percona XtraDB.

Ahora, vamos a empezar a añadir‘pxc02‘ y‘pxc03‘ a Percona XtraDB Cluster.

Añadir el Nodo pxc02

Accede al servidorpxc02′ y abre el archivo de configuración MySQL‘/etc/mysql/my.cnf ‘ utilizando el siguiente comando del editor nano.

sudo nano /etc/mysql/my.cnf

Añade las siguientes líneas al archivo y asegúrate de cambiar el valor de‘wsrep_cluster_address ‘ con las direcciones IP de todos tus servidores. Además, en ‘ wsrep_node_address‘, debes introducir la dirección IP de‘pxc02‘.

[mysqld]
datadir=/var/lib/mysql
user=mysql

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

# Cluster connection URL contains the IPs of pxc01, pxc02, and pxc03
wsrep_cluster_address=gcomm://192.168.5.15,192.168.5.16,192.168.5.17

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

# Using the MyISAM storage engine is not recommended
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.5.16

# Cluster name
wsrep_cluster_name=pxc_cluster

# SST method
wsrep_sst_method=xtrabackup-v2

wsrep_provider_options="socket.ssl_key=server-key.pem;socket.ssl_cert=server-cert.pem;socket.ssl_ca=ca.pem"

[sst]
encrypt=4
ssl-key=server-key.pem
ssl-ca=ca.pem
ssl-cert=server-cert.pem

Guarda y cierra el archivo‘/etc/mysql/my.cnf‘ cuando hayas terminado.

mysql cnf pxc02

A continuación, inicia el servidor MySQL introduciendo el siguiente comando de utilidad systemctl. A continuación, comprueba el estado del servidor MySQL para asegurarte de que se está ejecutando.

Esto iniciará el servicio MySQL y se unirá al Cluster Percona XtraDB inicializado en el servidor‘pxc01‘.

sudo systemctl start mysql
sudo systemctl status mysql

iniciar y verificar mysql pxc02

Para verificar que el proceso se ha realizado correctamente, debes iniciar sesión en el intérprete de comandos de MySQL. Introduce el siguiente comando para acceder al intérprete de comandos de MySQL como usuario root. Cuando se te solicite, introduce tu contraseña de root de MySQL.

sudo mysql -u root -p

Una vez conectado, introduce la siguiente consulta MySQL para verificar el estado del Cluster Percona XtraDB.

show status like 'wsrep%';

Deberías recibir una salida como ésta – En la sección‘wsrep_cluster_size‘ verás el valor ‘2’, lo que significa que hay dos servidores disponibles en el Cluster Percona XtraDB. También obtendrás las direcciones IP de los servidores en la sección ‘wsrep_incoming_address‘, que son las direcciones IP de los servidores pxc01 y pxc02. Por último, el nodo está en estado Sincronizado, lo que significa que está totalmente conectado y listo para la replicación de conjuntos de escritura.

verificar cluster pxc02

Con esto, el Cluster Percona XtraDB está funcionando ahora con dos nodos/servidores pxc01 y pxc02. A continuación, pasa al servidor pxc03 para añadirlo al Cluster Percona XtraDB.

Añadir el Nodo pxc03

Accede al servidorpxc03′ y abre el archivo de configuración MySQL‘/etc/mysql/my.cnf‘ utilizando el siguiente comando del editor nano.

sudo nano /etc/mysql/my.cnf

Añade las siguientes líneas al archivo y asegúrate de cambiar el valor de‘wsrep_cluster_address‘ con las direcciones IP de todos tus servidores. Además, en ‘wsrep_node_address‘, debes introducir la dirección IP de‘pxc03‘.

[mysqld]
datadir=/var/lib/mysql
user=mysql

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

# Cluster connection URL contains the IPs of pxc01, pxc02, and pxc03
wsrep_cluster_address=gcomm://192.168.5.15,192.168.5.16,192.168.5.17

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

# Using the MyISAM storage engine is not recommended
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.5.17

# Cluster name
wsrep_cluster_name=pxc_cluster

# SST method
wsrep_sst_method=xtrabackup-v2

wsrep_provider_options="socket.ssl_key=server-key.pem;socket.ssl_cert=server-cert.pem;socket.ssl_ca=ca.pem"

[sst]
encrypt=4
ssl-key=server-key.pem
ssl-ca=ca.pem
ssl-cert=server-cert.pem

Guarda y cierra el archivo‘/etc/mysql/my.cnf ‘ cuando hayas terminado.

conf mysql px03

A continuación, inicia el servidor MySQL introduciendo el siguiente comando de utilidad systemctl. A continuación, comprueba el estado del servidor MySQL para asegurarte de que se está ejecutando.

Esto iniciará el servicio MySQL y se unirá al Cluster Percona XtraDB.

sudo systemctl start mysql

empezar a verificar pxc03

Para verificar que el proceso se ha realizado correctamente, debes iniciar sesión en el shell de MySQL. Introduce el siguiente comando para acceder al intérprete de comandos de MySQL como usuario root. Cuando se te solicite, introduce tu contraseña de root de MySQL.

sudo mysql -u root -p

Una vez conectado, introduce la siguiente consulta MySQL para verificar el estado del Cluster Percona XtraDB.

show status like 'wsrep%';

Deberías recibir una salida como ésta – En la sección‘wsrep_cluster_size ‘ verás el valor ‘3’, lo que significa que hay tres servidores disponibles en el Cluster Percona XtraDB. También obtendrás las direcciones IP de los servidores en la sección ‘wsrep_incoming_address‘, que son las direcciones IP de los servidores pxc01, pxc02 y pxc03. Por último, el nodo está en estado Sincronizado, lo que significa que está totalmente conectado y listo para la replicación de conjuntos de escritura.

verificar el estado del cluster pxc03

Con esto, el Cluster Percona XtraDB está funcionando ahora con tres servidores Debian pxc01, pxc02 y pxc03. Ya has terminado el despliegue del Cluster Percona XtraDB con tres servidores Debian 11. En el siguiente paso, comprobarás la replicación de la base de datos entre el servidor Percona XtraDB Cluster.

Probar la replicación

Accede al shell de MySQL desde el servidor ‘pxc02‘ y crea una nueva base de datos‘percona‘.

sudo mysql -u root -p
CREATE DATABASE percona;

Ahora pasa al servidor «pxc03«, inicia sesión en el intérprete de comandos de MySQL a través del usuario raíz de MySQL y, a continuación, cambia a la base de datos «percona» que has creado desde el servidor«pxc02«.

sudo mysql -u root -p
USE percona;

Si lo consigues, deberías recibir un mensaje como «Base de datos modificada». Esto también confirma que la base de datos ‘percona’ está replicada en los servidores Percona XtraDB Cluster.

verificar la replicación

A continuación, ejecuta la siguiente consulta MySQL para crear una nueva tabla‘ejemplo‘ desde el servidor ‘pxc03‘.

CREATE TABLE example (node_id INT PRIMARY KEY, node_name VARCHAR(30));

verificar replicación 2

A continuación, desplázate de nuevo al servidor ‘pxc01‘ y ejecuta la siguiente consulta para insertar nuevos datos en la base de datos‘percona‘.

INSERT INTO percona.example VALUES (1, 'pxc01');
INSERT INTO percona.example VALUES (2, 'pxc02');
INSERT INTO percona.example VALUES (3, 'pxc03');

Por último, vuelve al servidor «pxc02» y ejecuta la siguiente consulta para recuperar los datos de la base de datos«percona» y de la tabla«ejemplo«.

SELECT * FROM percona.example;

Deberías recibir una salida como ésta – Los datos están disponibles en el Cluster Percona XtraDB‘pxc02‘. Con esto, la replicación entre servidores de Percona XtraDB Cluster funciona, lo que significa que tu despliegue de Percona XtraDB Cluster en servidores Debian 11 también tiene éxito.

verificar replicación pxc03

Conclusión

En este tutorial, has instalado y configurado Percona XtraDB Cluster con tres servidores Debian 11. Has inicializado Percona XtraDB Cluster y añadido dos nodos/servidores al Percona XtraDB Cluster. Además, has asegurado Percona XtraDB Cluster mediante el cortafuegos ufw.

Además, también has asegurado Percona XtraDB Cluster cifrando el tráfico entre todos los servidores mediante certificados SSL/TLS. Esto se consigue con la opción ‘pxc-encrypt-cluster-traffic’, activada por defecto.

Con esto, ya puedes empezar a añadir más servidores a tu Percona XtraDB Cluster siguiendo los pasos que has aprendido y añadiendo nodos adicionales que permitirán la alta disponibilidad y el equilibrio de carga en Percona XtraDB Cluster. Para saber más, visita la documentación oficial de Percona XtraDB Cluster.

Scroll al inicio