Configurar Percona XtraDB Cluster con Vagrant

By hilariotun Sept. 14, 2024, 6:08 p.m.

¿Qué es Percona XtraDB Cluster?

Percona XtraDB Cluster es una versión avanzada de MySQL que permite que múltiples servidores de bases de datos trabajen juntos como un solo "clúster". Imagina que tienes varias computadoras (servidores) que actúan como una única base de datos. El propósito principal de este clúster es ofrecer alta disponibilidad y replicación de datos en tiempo real.

¿Por qué usar un clúster de bases de datos?

En desarrollo, a veces una sola base de datos puede no ser suficiente por varias razones:

  1. Escalabilidad: Si tienes muchos usuarios y una sola base de datos, el servidor puede saturarse. Un clúster permite distribuir la carga entre múltiples servidores.
  2. Disponibilidad: Si la única base de datos falla, tu aplicación se detiene. Con un clúster, los datos se replican entre varios servidores, por lo que si uno falla, los demás continúan funcionando.
  3. Seguridad de datos: Al tener los datos replicados en varios servidores, reduces el riesgo de pérdida de datos.

¿Cómo funciona Percona XtraDB Cluster?

Para entender cómo funciona, imagina un equipo de personas trabajando en un documento compartido:

  1. Replicación en tiempo real: Cuando uno de los servidores (nodos) recibe una solicitud para agregar, modificar o eliminar datos, esta información se copia automáticamente a los demás servidores del clúster. Es como si varias personas estuvieran editando el mismo documento y cada cambio se sincronizara inmediatamente para que todos vean lo mismo.
  2. Todos los nodos son iguales: En un clúster de Percona, todos los servidores (nodos) pueden realizar operaciones de lectura y escritura. No hay un "servidor principal" y un "servidor secundario" como en otros sistemas. Esto significa que puedes distribuir las solicitudes de tu aplicación entre los diferentes nodos para mejorar la velocidad y eficiencia.
  3. Consenso y sincronización: Percona XtraDB Cluster usa un mecanismo llamado Galera para asegurarse de que todos los nodos estén sincronizados. Si un nodo recibe una solicitud para insertar datos, ese cambio debe ser aprobado por los demás nodos antes de aplicarse. Esto garantiza que los datos sean coherentes en todos los servidores.
  4. Fallos y recuperación: Si un nodo falla, el clúster sigue funcionando con los demás nodos. Cuando el nodo caído se reinicia, automáticamente se sincroniza con el resto del clúster para recuperar los datos que se perdió mientras estuvo desconectado.

¿Cómo se configura Percona XtraDB Cluster en términos simples?

  • Nodos: Un clúster de Percona está formado por varios nodos. Cada nodo es básicamente una instancia de MySQL que está configurada para sincronizar datos con los demás nodos.
  • Replicación: Al escribir o actualizar datos en uno de los nodos, esos cambios se replican a los otros nodos casi inmediatamente.
  • Balanceo de carga: En tu aplicación, puedes configurar las operaciones de lectura y escritura para que se distribuyan entre los nodos. Por ejemplo, puedes configurar que todas las escrituras se hagan en un nodo específico y que las lecturas se distribuyan entre los demás nodos.

1) Levantar vagrant

1.1 Crear archivo Vagrantfile

Es necesario tener virtualbox instalado y vagrant configurado. Partiendo de eso creamos un archivo Vagrantfile con el siguiente contenido:

Vagrant.configure("2") do |config|
  # Configuración de la máquina 1
  config.vm.define "pxc-node-1" do |server|
    server.vm.box = "ubuntu/focal64"
    server.vm.hostname = "pxc-node-1"
    server.vm.network "private_network", ip: "192.168.56.11"

    server.vm.provider "virtualbox" do |vb|
      vb.memory = "1024"
      vb.cpus = 2
    end

  end

  # Configuración de la máquina 2
  config.vm.define "pxc-node-2" do |server|
    server.vm.box = "ubuntu/focal64"
    server.vm.hostname = "pxc-node-2"
    server.vm.network "private_network", ip: "192.168.56.12"

    server.vm.provider "virtualbox" do |vb|
      vb.memory = "1024"
      vb.cpus = 2
    end

  end

  # Configuración de la máquina 3
  config.vm.define "pxc-node-3" do |server|
    server.vm.box = "ubuntu/focal64"
    server.vm.hostname = "pxc-node-3"
    server.vm.network "private_network", ip: "192.168.56.13"

    server.vm.provider "virtualbox" do |vb|
      vb.memory = "1024"
      vb.cpus = 2
    end

  end

  # Configuración de la máquina 4
  config.vm.define "pxc-node-4" do |server|
    server.vm.box = "ubuntu/focal64"
    server.vm.hostname = "pxc-node-4"
    server.vm.network "private_network", ip: "192.168.56.14"

    server.vm.provider "virtualbox" do |vb|
      vb.memory = "1024"
      vb.cpus = 2
    end

  end

  # Configuración de la máquina 4 (solo Ubuntu)
  config.vm.define "pxc-proxysql" do |server|
    server.vm.box = "ubuntu/focal64"
    server.vm.hostname = "pxc-proxysql"
    server.vm.network "private_network", ip: "192.168.56.15"

    server.vm.provider "virtualbox" do |vb|
      vb.memory = "512"
      vb.cpus = 1
    end

  end
end

Ahora levantamos los servidores con vagrant

vagrant up

Esto nos creara 4 maquinas virtuales, en las cuales instalaremos el cluster pxc y cada una de las maquinas se comportara como un nodo del cluster.

Una vez hecho esto podemos configurar la conexion por ssh, para eso copiamos la configuracion de ssh de vagrant a nuestro archivo .ssh/config para ver la configuracion de cada host ejecutar y copiar la salida:

vagrant ssh-config pxc-node-1
vagrant ssh-config pxc-node-2
vagrant ssh-config pxc-node-3

Nos dara una salida como la siguiente:

Host pxc-node-1
  HostName 127.0.0.1
  User vagrant
  Port 2222
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile /home/user/Documentos/Tests/pxc-vagrant/.vagrant/machines/pxc-node-1/virtualbox/private_key
  IdentitiesOnly yes
  LogLevel FATAL

La salida la copiamos al archivo .ssh/config

2) Instalar Percona XtraDB Cluster


NOTA

La finalidad de este paso es instalar percona XtraDB Cluster desde los repositorios


Ejemplo de como acceder a los nodos:

ssh pxc-node-1

En los 3 nodos instalar percona xtradb cluster:

apt update \
    && wget https://repo.percona.com/apt/percona-release_latest.generic_all.deb \
    && dpkg -i percona-release_latest.generic_all.deb \
    && percona-release setup pxc57 \
    && apt install -y libdbi-perl libdbd-mysql-perl libmecab2 socat  libcurl4-openssl-dev libev4 \
    && apt install -y percona-xtrabackup-24  qpress \
    && apt install -y percona-xtradb-cluster-full-57=5.7.40-31.63-1.focal percona-xtradb-cluster-server-5.7=5.7.40-31.63-1.focal percona-xtradb-cluster-client-5.7=5.7.40-31.63-1.focal percona-xtradb-cluster-test-5.7=5.7.40-31.63-1.focal percona-xtradb-cluster-5.7-dbg=5.7.40-31.63-1.focal percona-xtradb-cluster-server-debug-5.7=5.7.40-31.63-1.focal percona-xtradb-cluster-garbd-5.7=5.7.40-31.63-1.focal percona-xtradb-cluster-garbd-debug-5.7=5.7.40-31.63-1.focal percona-xtradb-cluster-common-5.7=5.7.40-31.63-1.focal \
    && systemctl start mysql

3) Configurar nodos


NOTA

La finalidad de este apartado es configurar los nodos para que se comuniquen entre ellos y puedan compartir informacion en forma de cluster


Todas las configuraciones siguientes se corren excluyendo el nodo 4, ya que se integrara al cluster mas adelante.

Nos conectamos al nodo y entramos a la consola de mysql, en caso de que nos pida contraseña utilizaremos "root", por ejemplo

ssh pxc-node-1
sudo mysql

En el nodo 1 creamos el usuario SST

CREATE USER 'sstuser'@'%' IDENTIFIED BY 'temporal1';
GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO 'sstuser'@'%';
FLUSH PRIVILEGES;

En cada nodo cambiamos la configuracion para agregarlo al cluster

Editar el siguiente archivo:

nano /etc/mysql/percona-xtradb-cluster.conf.d/wsrep.cnf

Cambiamos unicamente la siguiente informacion:

wsrep_cluster_address=gcomm://192.168.56.11,192.168.56.12,192.168.56.13
wsrep_node_address=<ip_nodo>
# Nombre del nodo de preferencia la terminacion de la ip
wsrep_node_name=pxc-cluster-node-1
pxc_strict_mode=PERMISSIVE
# La misma contraseña del usuario SST
wsrep_sst_auth="sstuser:temporal1"

Nuestro archivo deberia verse de la siguiente manera pero con las configuraciones correspondientes al nodo actual,

[mysqld]
# Path to Galera library
wsrep_provider=/usr/lib/galera3/libgalera_smm.so

# Cluster connection URL contains IPs of nodes
#If no IP is found, this implies that a new cluster needs to be created,
#in order to do that you need to bootstrap this node
wsrep_cluster_address=gcomm://192.168.56.11,192.168.56.12,192.168.56.13

# 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

# Slave thread to use
wsrep_slave_threads=2

wsrep_log_conflicts

# This changes how InnoDB autoincrement locks are managed and is a requirement for Galera
innodb_autoinc_lock_mode=2

# Node IP address
wsrep_node_address=192.168.56.11
# Cluster name
wsrep_cluster_name=pxc-cluster

#If wsrep_node_name is not specified,  then system hostname will be used
wsrep_node_name=pxc-cluster-node-1

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

# SST method
wsrep_sst_method=xtrabackup-v2

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

3.1 Iniciar el primer nodo

En todos los nodos detenemos mysql:

service mysql stop

Una vez que hemos finalizado al configuración de nuestros 3 nodos, accedemos al nodo 1 y lo inicializamos usando el siguiente comando

/etc/init.d/mysql bootstrap-pxc

Este comando iniciara nuestro nodo pero ademas indicara que es nuestro nodo principal

Una vez hecho esto accedemos a mysql

mysql -u root -p

Podemos verificar el estado de nuestro cluster usando el siguiente comando

show status like 'wsrep%';

La salida del comando deberia ser algo similar a esto

+----------------------------+--------------------------------------+
| Variable_name              | Value                                |
+----------------------------+--------------------------------------+
| wsrep_local_state_uuid     | b598af3e-ace3-11e2-0800-3e90eb9cd5d3 |
| wsrep_local_state          | 4                                    |
| wsrep_local_state_comment  | Synced                               |
| wsrep_cluster_size         | 1                                    |
| wsrep_cluster_status       | Primary                              |
| wsrep_connected            | ON                                   |
| wsrep_ready                | ON                                   |
+----------------------------+--------------------------------------+
40 rows in set (0.01 sec)

3.2 Iniciar el segundo y tercer nodo

Accedemos a los nodos 2 y 3 respectivamente y ejecutamos el siguiente comando

/etc/init.d/mysql start

Eso inicializara nuestro nodo y deberia sincrinizarse con nuestro nodo principal, nodo 1

Una vez se haya inicializado ingresamos a mysql y comprobamos el estado de nuestro cluster

mysql -u root -p
show status like 'wsrep%';

La salida de nuestro comando ahora deberia mostrarnos que el tamaño del cluster ha cambiado, podemos observarlo en la variable wsrep_cluster_size

+----------------------------+--------------------------------------+
| Variable_name              | Value                                |
+----------------------------+--------------------------------------+
| wsrep_local_state_uuid     | b598af3e-ace3-11e2-0800-3e90eb9cd5d3 |
| 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)

NOTA

Hasta este punto, ya tendras un Cluster de Base de Datos con Percona XtraDB Cluster.
La información se replica entre todos los nodos.

Puedes comprobarlo creando una base de datos.


3.3 Crear base de datos

Para poder realizar las pruebas podemos crear una base de datos con datos de prueba, para el ejercicio trabajaremos con la siguiente base de datos: CompanyDB

Ingresamos a mysql y creamos una base de datos

mysql -u root -p

Una vez hayamos accedido a mysql podemos crear la base de datos usando el siguiente comando

CREATE DATABASE companydb;

Salimos de mysql

exit

Transferir el archivo de backup a nuestro nodo 1, posicionado en la carpeta donde descargamos nuestro backup ejecutamos lo siguiente:

scp backup.sql pxc-node-1:/home/vagrant/test

Nos conectamos al nodo y nos posicionamos en la carpeta, ejemplo:

ssh pxc-node-1
cd /home/vagrant/test

Una vez la hayamos importado nos posicionamos en la ruta donde tengamos nuestro backup y ejectuamos el siguiente comando

mysql -u root -p companydb < backup.sql

NOTA

Si te da error importar la base de datos, porque el collation no corresponde a tu version de MySQL, puede ejecutar lo siguiente:

sed -i 's/utf8mb4_0900_ai_ci/utf8mb4_unicode_ci/g' backup.sql -> Actualizar la bd


3.4 Comprobación

Esto nos importara la información de la base de datos que creamos previamente, ademas, al tener configurados nuestros nodos deberia replicarse la información de nuestra base de datos, para ello podemos comprobarlo accediendo a mysql en alguno de nuestros nodos

mysql -u root -p

Verificamos que tengamos la base de datos que creamos en el nodo 1

show databases;

La salida del comando deberia mostrarnos la base de datos que creamos en el nodo 1

+--------------------+
| Database           |
+--------------------+
| information_schema |
| companydb          | -- Base de datos que creamos en el nodo 1
| mysql              |
| performance_schema |
| sys                |
+--------------------+
6 rows in set (0.00 sec)

Una vez que hayamos comprobado que tenemos nuestra base de datos en los tres nodos podemos realizar las pruebas, las pruebas que realizaremos seran las mismas que se hicieron en Implementar Percona Cluster - Parte 2

Una vez hecho esto en ambos nodos nuestro cluster deberia estar configurado correctamente por lo que ya podriamos realizar nuestras pruebas

Luego de nuestras configuraciones debemos tener un cluster similar al siguiente:

PXC Cluster - Vagrant.png

4) Pruebas

4.1) Replicacion


NOTA

La finalidad de esta prueba es verificar que la información se replica en cada uno de nuestros nodos sin importar en donde hacemos las inserciones de registros.


4.1.1 Acceder al servidor y conectarse a mysql en los nodos

# Ejemplo de conexion por ssh
ssh pxc-node-1

# Conectarse a mysql
sudo mysql

4.1.2 Conectarse a la base de datos

mysql> use companydb;

4.1.3 Verificamos en todos los nodos el ultimo ID:

select * from Companies order by CompanyID DESC LIMIT 10 \G

Imagen

4.1.4 Hacer inserciones en el nodo 1 (se puede realizar desde cualquier nodo):

mysql> INSERT INTO Companies (CompanyID, Name, Address, Phone, Email) VALUES (NULL, 'Other Company', 'Unit 5699 Box 8173 DPO AP 62802', '+1-635-243-2015x623', '[email protected]');
mysql> INSERT INTO Companies (CompanyID, Name, Address, Phone, Email) VALUES (NULL, 'Other Company', 'Unit 5699 Box 8173 DPO AP 62802', '+1-635-243-2015x623', '[email protected]');
mysql> INSERT INTO Companies (CompanyID, Name, Address, Phone, Email) VALUES (NULL, 'Other Company', 'Unit 5699 Box 8173 DPO AP 62802', '+1-635-243-2015x623', '[email protected]');

Creamos 3 registros en el nodo 1, al crearlo, la información debería reflejarse en los otros nodos: Captura

Volvemos a verificar los últimos IDs

4.1.5 En todos los nodos, verificamos que la información se este replicando correctamente:

select * from Companies order by CompanyID DESC LIMIT 10 \G

Podemos observar que la información se ha replicado correctamente: Captura

4.2) Servidor caido


NOTA

La finalidad de este apartado es detener un servidor y comprobar que las replicaciones continúan sin problema alguno.


4.2.1 Detenemos mysql en cualquiera de nuestros nodos Nos conectamos a un nodo, por ejemplo el nodo 3

# Ejemplo de conexion por ssh
ssh pxc-node-3

En cualquier nodo ejecutamos, en este caso de ejemplo el 3:

service mysql stop

4.2.2 Insertamos registros Hacer inserciones en cualquiera de los nodos sobrantes (Se pueden realizar desde cualquier nodo, para este ejemplo el nodo 1):

mysql> INSERT INTO Companies (CompanyID, Name, Address, Phone, Email) VALUES (NULL, 'Other Company', 'Unit 5699 Box 8173 DPO AP 62802', '+1-635-243-2015x623', '[email protected]');
mysql> INSERT INTO Companies (CompanyID, Name, Address, Phone, Email) VALUES (NULL, 'Other Company', 'Unit 5699 Box 8173 DPO AP 62802', '+1-635-243-2015x623', '[email protected]');
mysql> INSERT INTO Companies (CompanyID, Name, Address, Phone, Email) VALUES (NULL, 'Other Company', 'Unit 5699 Box 8173 DPO AP 62802', '+1-635-243-2015x623', '[email protected]');
mysql> INSERT INTO Companies (CompanyID, Name, Address, Phone, Email) VALUES (NULL, 'Other Company', 'Unit 5699 Box 8173 DPO AP 62802', '+1-635-243-2015x623', '[email protected]');
mysql> INSERT INTO Companies (CompanyID, Name, Address, Phone, Email) VALUES (NULL, 'Other Company', 'Unit 5699 Box 8173 DPO AP 62802', '+1-635-243-2015x623', '[email protected]');

Para esta prueba, teniendo un servidor detenido realizamos una inserción de 5 registros, la cual se replico hacia nuestro servidor que esta en linea: Captura

4.3) Reintegro de servidor caido


NOTA

La finalidad de esta prueba es volver a levantar el servidor que desactivamos previamente y ver si la información se pierde o se replica


En esta prueba podremos observar que sucede en caso de que uno de nuestros nodos se detenga, como en el caso anterior que detuvimos el nodo, pero que pasa si queremos reintegrarlo, la informacion que insertamos mientras estaba caida se replica? podemos comprobarlo levantando el nodo que detuvimos en el paso 4.2.1 si volvemos a levantarlo la informacion que se creo mientras estaba ausente se replicará.

4.3.1 Levantamos el nodo faltante En el nodo caido ejecutamos:

# Ejemplo de conexion por ssh
ssh pxc-node-3

service mysql start

Captura

Levantamos nuevamente nuestro nodo y al hacerlo se nos replica la información que se agrego previamente:

select * from Companies order by CompanyID DESC LIMIT 10 \G

NOTA

Extrabackup tiene una forma de conocer el ultimo hash de los registros insertados, con esto se guiá de que tan sincronizado esta con las otras bases de datos.


5) Levantar un nodo con xtrabackup y unirlo al cluster


NOTA

La finalidad de este apartado es levantar un nuevo nodo y unirlo al cluster, para comprobar como se hace la replicacion de los datos en un servidor que esta vacío.


5.1 Instalar PXC

Con el nodo 4 que dejamos vacio, podemos realizar la configuracion e integracion del nodo, realizamos lo siguiente. Desde una instancia nueva de ubuntu 20.04:

apt update
apt update \
    && wget https://repo.percona.com/apt/percona-release_latest.generic_all.deb \
    && dpkg -i percona-release_latest.generic_all.deb \
    && percona-release setup pxc57 \
    && apt install -y libdbi-perl libdbd-mysql-perl libmecab2 socat  libcurl4-openssl-dev libev4 \
    && apt install -y percona-xtrabackup-24  qpress \
    && apt install -y percona-xtradb-cluster-full-57=5.7.40-31.63-1.focal percona-xtradb-cluster-server-5.7=5.7.40-31.63-1.focal percona-xtradb-cluster-client-5.7=5.7.40-31.63-1.focal percona-xtradb-cluster-test-5.7=5.7.40-31.63-1.focal percona-xtradb-cluster-5.7-dbg=5.7.40-31.63-1.focal percona-xtradb-cluster-server-debug-5.7=5.7.40-31.63-1.focal percona-xtradb-cluster-garbd-5.7=5.7.40-31.63-1.focal percona-xtradb-cluster-garbd-debug-5.7=5.7.40-31.63-1.focal percona-xtradb-cluster-common-5.7=5.7.40-31.63-1.focal \
    && systemctl start mysql

5.2 Editar el archivo

nano /etc/mysql/percona-xtradb-cluster.conf.d/wsrep.cnf

Agregar la configuración del nodo

GNU nano 4.8                /etc/mysql/percona-xtradb-cluster.conf.d/wsrep.cnf                          
[mysqld]
# Path to Galera library
wsrep_provider=/usr/lib/galera3/libgalera_smm.so

# Cluster connection URL contains IPs of nodes
#If no IP is found, this implies that a new cluster needs to be created,
#in order to do that you need to bootstrap this node
# Agregar las ip's incluidas la del nuevo nodo
wsrep_cluster_address=gcomm://192.168.56.11,192.168.56.12,192.168.56.13,192.168.56.14

# 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

# Slave thread to use
# El numero de nucleos "nproc"
wsrep_slave_threads=2

wsrep_log_conflicts

# This changes how InnoDB autoincrement locks are managed and is a requirement for Galera
innodb_autoinc_lock_mode=2

# Node IP address
# IP del nodo actual
wsrep_node_address=192.168.56.14
# Cluster name
wsrep_cluster_name=pxc-cluster

#If wsrep_node_name is not specified,  then system hostname will be used
# Nombre para identificar al nodo
wsrep_node_name=pxc-cluster-node-4

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

# SST method
wsrep_sst_method=xtrabackup-v2

#Authentication for SST method
#wsrep_sst_auth="sstuser:s3cretPass"
wsrep_sst_auth="sstuser:temporal1"

Detener el servicio de mysql

service mysql stop

Iniciar de nuevo el servicio de mysql

service mysql start

Comprobamos que el servidor mysql se inicio correctamente:

service mysql status

percona_6_1.png

Con esto el nuevo nodo debe estar añadido y devemos ver que la informacion se ha replicado.

Video Tutorial

Puedes ver el paso a paso en el video de nuestro canal.

Utilidades para el Desarrollo

Debido a que esto se realiza en un entorno de Desarrollo/Pruebas para entender el concepto y funcionamiento de Percona XtradbCluster, brindaremos los siguientes comandos para facilitar la solución de errores:

Logs de Errores de Mysql Percona Cluster:

tail -f /var/log/mysqld.log

Logs de Errores de Xtrabackup (al momento de levantar un nuevo nodo)

tail -f /var/lib/mysql//innobackup.backup.log

Error al inicializar Cluster

Una cosa a tener en cuenta es que si el vagrant se detiene bruscamente (como si se apagaran los servidores) el cluster mostrara un error al volver a levantarse, ya que desconoce que servidor fue el ultimo en detenerse.

image

Teniendo en cuenta esto, podemos levantar el Cluster nuevamente entrando al nodo 1 (nodo principal) y modificando el siguiente archivo:

nano /var/lib/mysql/grastate.dat

Modifica la variable safe_to_bootstrap, de la siguiente forma:

safe_to_bootstrap: 1

image

Con esto ya podremos levantar el cluster nuevamente:

/etc/init.d/mysql bootstrap-pxc

Problemas de Sincronizacion debido a Firewall

Puedes comprobar que los puertos 4444, 4567 y 4568 esten abiertos entre las maquinas virtuales de la siguiente forma:

En el servidor que se unira al cluster (JOINER):

socat - TCP-LISTEN:4444

En el servidor que sera el donante (DONOR):

echo "hello" | socat - TCP:ip.adr.of.donor:4444

Con esto puedes comprobar si los puertos se encuentran abiertos o tienes inconvenientes con Firewall. El servidor nuevo estará a la escucha de informacion en el puerto designado (en este caso 4444) y el servidor Donante, enviara un "hello" que se imprimira en el donante.

Levantar cluster con un Backup usando Xtrabackup

Debido a que Percona Cluster necesita una tabla en donde almacenar datos de la replicacion y el cluster, se necesita realizar lo siguiente en el nodo que iniciará el cluster. Con el MySQL funcionando ejecuta en la terminal de ubuntu:

mysql_upgrade

Esto deberia mostrar un output parecido a esto:

bd.table1                     OK
bd.table2             OK
bd.table                  OK
...
sys.sys_config                                     OK
Upgrade process completed successfully.
Checking if update is needed.

Puedes comprobar que el cambio funcionío ejecutando lo siguiente:

SHOW GLOBAL VARIABLES LIKE 'wsrep_sync_wait';

Saber si el cluster esta en funcionamiento

Puedes ejecutar la siguiente query:

show global status where variable_name IN ('wsrep_local_state','wsrep_local_state_comment','wsrep_local_commits','wsrep_received','wsrep_cluster_size','wsrep_cluster_status','wsrep_connected','wsrep_ready');

Esto brindará un output como el siguiente:

+---------------------------+---------+
| Variable_name             | Value   |
+---------------------------+---------+
| wsrep_received            | 7       |
| wsrep_local_commits       | 0       |
| wsrep_local_state         | 4       |
| wsrep_local_state_comment | Synced  |
| wsrep_cluster_size        | 3       |
| wsrep_cluster_status      | Primary |
| wsrep_connected           | ON      |
| wsrep_ready               | ON      |
+---------------------------+---------+
8 rows in set (0.00 sec)

Explicacion de cada parametro:

  • wsrep_received: Esta variable indica cuántos eventos de replicación (transacciones) ha recibido el nodo desde los otros nodos del clúster. En este caso, el nodo ha recibido 7 eventos.
  • wsrep_local_commits: Muestra cuántas transacciones locales ha confirmado el nodo en su propia base de datos. En este caso, el nodo no ha hecho ninguna confirmación de transacciones propias, por eso está en 0.
  • wsrep_local_state: Indica el estado del nodo dentro del clúster. El valor 4 corresponde al estado Synced, lo que significa que el nodo está completamente sincronizado y listo para procesar transacciones.
  • wsrep_local_state_comment: Es un comentario en texto del estado del nodo. Como el valor es Synced, confirma que el nodo está sincronizado con el resto del clúster. Mas Info
  • wsrep_cluster_size: Indica el número de nodos activos en el clúster. En este caso, hay 3 nodos activos.
  • wsrep_cluster_status: Muestra el estado del clúster. Primary significa que el clúster está operativo y que los nodos pueden comunicarse y replicar datos correctamente. Este es el estado deseado
  • wsrep_connected: Indica si el nodo está conectado al clúster. ON significa que el nodo está conectado correctamente a los otros nodos.