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 ,
# 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 , /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.pem
y server-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 ,
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 ,
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.