GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo construir un clúster activo-activo-activo con RHEL 8 y Percona MySQL

En el pasado, crear un servicio MySQL multimaestro seguro y tolerante a fallas era engorroso. Requirió varios pasos y paquetes dependientes. La configuración de la replicación, la sincronización de datos y varios archivos de configuración se suman a la complejidad. Construir una solución en un sistema operativo reforzado como Red Hat Enterprise Linux (RHEL) 8 y usar una distribución MySQL multimaestro empaquetada profesionalmente de Percona lo hace fácil. Esta guía le muestra cómo hacerlo.

Diagrama arquitectónico:

[ También te puede interesar: Keepalived y alta disponibilidad:temas avanzados]

Instalar el software del clúster

Ejecute los siguientes comandos en los tres servidores (DB1 , DB2 y DB3 ):

# yum -y install https://repo.percona.com/yum/percona-release-latest.noarch.rpm

# percona-release enable-only pxc-80 release
# percona-release enable tools release

# yum repolist 
Updating Subscription Management repositories. 
repo id                                         repo name 
prel-release-noarch                             Percona Release release/noarch YUM repository 
pxc-80-release-x86_64                           Percona XtraDB Cluster 8.0 release/x86_64 YUM repository 
rhel-8-for-x86_64-appstream-rpms                Red Hat Enterprise Linux 8 for x86_64 - AppStream (RPMs) 
rhel-8-for-x86_64-baseos-rpms                   Red Hat Enterprise Linux 8 for x86_64 - BaseOS (RPMs) 
satellite-tools-6.8-for-rhel-8-x86_64-rpms      Red Hat Satellite Tools 6.8 for RHEL 8 x86_64 (RPMs) 
tools-release-x86_64                            Percona Tools release/x86_64 YUM repository

Debido a que los repositorios de RHEL 8 incluyen una versión de MySQL, debe deshabilitar el acceso a ellos para que la instalación de Percona se complete correctamente.

# yum -y module disable mysql
# yum -y install percona-xtradb-cluster

Configurar el clúster

En DB1 servidor, inicie el servicio de base de datos para acceder a él a través del cliente MySQL para actualizar la contraseña predeterminada y permitir que cualquier host se conecte de forma remota para la administración:

# systemctl start mysql

# grep 'temporary password' /var/log/mysqld.log
# mysql -u root -p


Cambie la contraseña raíz predeterminada con ALTER comando:

# mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'redhatPERCONA';

Habilite el inicio de sesión desde cualquier host con UPDATE comando:


# mysql> UPDATE mysql.user SET host='%' WHERE user='root';

Salga de la administración de MySQL:

# mysql> exit

En DB1 servidor, detener el servicio de la base de datos:

# systemctl stop mysql

En DB2 y DB3 servidores, inicie/detenga el servicio MySQL para crear las estructuras de archivos iniciales:

# systemctl start mysql
# systemctl stop mysql

En todos los servidores de bases de datos del clúster (DB1 , DB2 y DB3 ) asegúrese de que el archivo de configuración /etc/my.cnf contiene los siguientes campos únicos:

wsrep_cluster_address=gcomm://
wsrep_cluster_name=
wsrep_node_name=

Agregue la dirección IP de cada servidor de base de datos. Así es como se comunica el clúster y a quién:

wsrep_cluster_address=gcomm://192.168.40.91,192.168.40.92,192.168.40.93

Agregue un nombre de clúster único. Esto debe ser igual en todos los servidores del clúster. Esto identificará el clúster de otros clústeres:

wsrep_cluster_name=pxc-cluster

Agregue un nombre de nodo único y su dirección IP. El clúster debe tener una forma de identificar cada nodo:

wsrep_node_name=pxc-cluster-node-db1
wsrep_node_address=192.168.40.91

Ejecute este comando en cada servidor de base de datos para asegurarse de que la configuración que realizó sea correcta:

[DB1]
# grep -e address -e cluster /etc/my.cnf | grep -v \# 
wsrep_cluster_address=gcomm://192.168.40.91,192.168.40.92,192.168.40.93 
wsrep_node_address=192.168.40.91 
wsrep_cluster_name=pxc-cluster 
wsrep_node_name=pxc-cluster-node-db1

[DB2]
# grep -e address -e cluster /etc/my.cnf | grep -v \# 
wsrep_cluster_address=gcomm://192.168.40.91,192.168.40.92,192.168.40.93 
wsrep_node_address=192.168.40.92 
wsrep_cluster_name=pxc-cluster 
wsrep_node_name=pxc-cluster-node-db2

[DB3]
# grep -e address -e cluster /etc/my.cnf | grep -v \# 
wsrep_cluster_address=gcomm://192.168.40.91,192.168.40.92,192.168.40.93 
wsrep_node_address=192.168.40.93 
wsrep_cluster_name=pxc-cluster 
wsrep_node_name=pxc-cluster-node-db3

Iniciar el clúster

Una vez que la configuración se ve bien, el siguiente paso es arrancar el DB1 servidor. Esto se hace con un servicio especial llamado [email protected] :

# systemctl start [email protected]

Inicie sesión para verificar el estado con los siguientes comandos:

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

Busque wsrep_cluster_size, que debería ser 1 , dado que el único servidor en el clúster en este momento es DB1 .

El servicio de arranque genera los certificados de seguridad TLS que se utilizan para las comunicaciones seguras del clúster. Copie estos archivos en /var/lib/mysql en los otros dos servidores de bases de datos:server-key.pem ,ca.pemserver-cert.pem

# cd /var/lib/mysql
# scp server-key.pem server-cert.pem ca.pem db2:/var/lib/mysql/
# scp server-key.pem server-cert.pem ca.pem db3:/var/lib/mysql/


Configurar el cortafuegos para operaciones de clúster seguras

El clúster de Percona requiere que los siguientes cuatro puertos estén abiertos para funcionar correctamente:3306, 4444, 4567 y 4568. Ejecute estos comandos de firewall en los tres servidores (DB1 , DB2 y DB3 ) para configurarlos.

Asegúrese de que el firewalld el servicio se está ejecutando:

# systemctl enable firewalld
# systemctl start firewalld

La zona predeterminada es pública , por lo que, a menos que lo haya cambiado, puede agregar los cuatro puertos requeridos de esta manera:

# firewall-cmd --add-port 3306/tcp --zone=public --permanent
# firewall-cmd --add-port 4444/tcp --zone=public --permanent
# firewall-cmd --add-port 4567/tcp --zone=public --permanent

# firewall-cmd --add-port 4568/tcp --zone=public --permanent

O, si lo prefiere, agregue varios puertos a la vez con un solo comando:

# firewall-cmd --add-port={3306/tcp,4444/tcp,4567/tcp,4568/tcp} --zone=public --permanent


Vuelva a cargar el firewalld servicio con el siguiente comando y luego enumere los puertos para confirmar que el servicio está configurado como se esperaba:

# firewall-cmd --reload

# firewall-cmd --list-ports 
3306/tcp 4444/tcp 4567/tcp 4568/tcp

Puede encontrar más información sobre el cortafuegos RHEL 8 aquí.

Hacer crecer el clúster

Ahora es el momento de agregar más servidores al clúster existente de uno que se está ejecutando actualmente después de haberlo iniciado. El objetivo es agregar tanto DB2 y DB3 al clúster que se ejecuta en DB1 .

Uno a la vez, inicie el servicio MySQL en cada servidor y espere a que finalice antes de pasar al siguiente servidor.

En DB2 , escriba:

# systemctl start mysql

Haga lo mismo en DB3 :

# systemctl start mysql

En DB1 , tail el mysql.log archivo para ver si hay nuevos servidores que se unan al clúster. Esto le permitirá saber si las cosas funcionan como se esperaba o si se producen errores durante la fase de unión al clúster:

# tail -f /var/log/mysqld.log | grep db3

2021-04-08T17:48:25.892746Z 0 [Note] [MY-000000] [Galera] STATE EXCHANGE: got state msg: 9ea100f1-9892-11eb-af
0e-66802999478c from 0 (pxc-cluster-node-db3) 
       0: 9e07f773-9892-11eb-a4b8-7bfcd02aca9e, pxc-cluster-node-db3

2021-04-08T17:48:26.405209Z 0 [Note] [MY-000000] [Galera] Member 0.0 (pxc-cluster-node-db3) requested state tr
ansfer from '*any*'. Selected 1.0 (pxc-cluster-node-db1)(SYNCED) as donor.

2021-04-08T17:48:41.023324Z 0 [Note] [MY-000000] [Galera] 1.0 (pxc-cluster-node-db1): State transfer to 0.0 (p
xc-cluster-node-db3) complete. 
2021-04-08T17:48:46.677727Z 0 [Note] [MY-000000] [Galera] 0.0 (pxc-cluster-node-db3): State transfer from 1.0 
(pxc-cluster-node-db1) complete. 
2021-04-08T17:48:46.678022Z 0 [Note] [MY-000000] [Galera] Member 0.0 (pxc-cluster-node-db3) synced with group.

En la salida del archivo de registro anterior, puede ver que DB3 se unió al clúster, solicitó la transferencia de estado y sincronizó correctamente sus datos de DB1. Otra forma de verificar el tamaño del clúster es iniciar sesión en cualquier servidor que sea miembro del clúster y ejecutar estos comandos:

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

Busque wsrep_cluster_size , que debería ser 3 , ya que los tres servidores (DB1 , DB2 y DB3 ) se han unido al grupo ahora.

Busque wsrep_incoming_addresses , que debe mostrar las tres direcciones IP del servidor. Nuevamente, esta es otra forma de confirmar que todos los servidores están en el clúster y se comunican correctamente.

Probando los clústeres

Ahora que tiene un clúster de tres nodos en funcionamiento, debe probar las capacidades activo-activo-activo.

En el servidor DB1 , cree una nueva base de datos con el siguiente comando:

# mysql -u root -p
# mysql> create database myACTIVEdb;

En el servidor DB2 o DB3 , ejecute los siguientes comandos para verificar si aparece la base de datos recién creada:

# mysql -u root -p
# mysql> show databases; 
+--------------------+ 
| Database           | 
+--------------------+ 
| information_schema | 
| myACTIVEdb         | 
| mysql              | 
| performance_schema | 
| sys                | 
+--------------------+ 
5 rows in set (0.00 sec)

La nueva base de datos debería aparecer casi inmediatamente. Independientemente de qué escrituras de servidor se realicen, los datos se replican en los otros servidores de bases de datos. Felicitaciones, ahora tiene un servidor MySQL Percona activo-activo-activo de tres nodos ejecutándose en RHEL 8.

Mantenimiento del clúster

De vez en cuando, uno de los servidores de la base de datos puede necesitar un mantenimiento que requiere un reinicio. Siempre debe cerrar el servicio MySQL correctamente antes de reiniciar:

# systemctl stop mysql

Este comando puede tardar algún tiempo, ya que prepara el clúster para estar en un estado interrumpido. Deje que se apague correctamente para sincronizar y actualizar el estado del clúster en todos los servidores.

Reinicie el servidor en mantenimiento y luego vuelva a unirse al clúster con el siguiente comando:

# systemctl start mysql

El estado del clúster depende de mantener el quórum . Recuerde siempre mantener uno de más de la mitad del tamaño del clúster en funcionamiento. Para un grupo de tres, el quórum sería dos. Para un grupo de cinco, el quórum sería de tres. Hacer crecer el grupo de tres a cinco es fácil; simplemente repita los pasos descritos anteriormente. Es recomendable tener un número impar de servidores en el clúster, lo que facilita la gestión del quórum.

Si todo el clúster está apagado y debe reiniciarse, recuerde seleccionar un servidor para iniciar el clúster. Eso se hace con el proceso de arranque. Por ejemplo, en DB1 :

# systemctl start [email protected]

En los otros dos servidores, únase a ellos una vez que se haya completado el proceso de arranque, con el siguiente comando:

# systemctl start mysql

El clúster ya está activo y operativo.

SELinux

RHEL 8 se entrega con SELinux en Enforcing modo. Red Hat, Percona y MySQL han hecho un buen trabajo con SELinux desde el primer momento en Cumplimiento modo. No es necesario realizar cambios. Puede encontrar más detalles en el sitio web de Percona si es necesario modificar cambios en ciertos parámetros de configuración de Percona.

[ Obtenga este libro electrónico gratuito:Administrar sus clústeres de Kubernetes para principiantes. ]

Resumir

RHEL 8 proporciona una plataforma para cargas de trabajo de base de datos que es compatible y ofrece un gran rendimiento. Percona ha hecho un buen trabajo al empaquetar una implementación multimaestro fácil de implementar del servidor MySQL con detalles de seguridad en mente.


Linux
  1. Cómo crear una base de datos en MySQL con MySQL Workbench

  2. Cómo instalar Lighttpd con PHP5 FastCGI y MySQL en Fedora 16

  3. Cómo instalar Nginx con PHP-FPM y MySQL en Fedora 16 “Verne”

  4. Cómo instalar Nginx con PHP5 y MySQL en Ubuntu 11.10

  5. Cómo instalar Lighttpd con PHP5 y MySQL en Ubuntu 11.04

Cómo instalar Lighttpd con PHP-FPM 7 y MySQL 5.7 en Ubuntu 18.04 LTS

Cómo configurar Percona Cluster con HAproxy Loadbalancer en CentOS 7

Cómo implementar CouchDB como un clúster con Docker

Cómo Multi-Master MySQL con Percona y Keepalived

Cómo implementar una aplicación PHP con Nginx y MySQL usando Docker y Docker Compose

Cómo configurar un clúster de Linux con 2 nodos en RedHat y CentOS