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
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
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
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
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
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.
Habilita el repositorio Percona XtraDB Cluster v8.0.
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
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.
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.
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.
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.
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.
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.
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‘.
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.
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.
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 servidor‘pxc02′ 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.
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
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.
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 servidor‘pxc03′ 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.
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
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.
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.
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));
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.
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.