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

En el pasado, crear un servicio MySQL seguro, tolerante a fallas y multimaestro era tedioso. Requería múltiples pasos y paquetes dependientes. La configuración de la replicación, la sincronización de datos y varios archivos de configuración agregan complejidad. Cree una solución en un sistema operativo reforzado como Red Hat Enterprise Linux (RHEL) 8 y use una distribución de MySQL multimaestro empaquetada profesionalmente de percona lo hace fácil Esta guía le muestra cómo hacerlo.

Diagrama de arquitectura:

Figura 1: Clúster MySQL de tres nodos con direcciones IP individuales para cada nodo.

Índice

    Instale 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 él 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

    Sobre 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 pedido:

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

    Active la conexión desde cualquier host con UPDATE pedido:

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

    Salga de la administración de MySQL:

    # mysql> exit

    Sobre DB1 servidor, detenga el servicio de la base de datos:

    # systemctl stop mysql

    Sobre 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 con 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 debería 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

    Inicie el clúster

    Una vez que la configuración parece correcta, el siguiente paso es cebar 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%';

    Buscar wsrep_cluster_size, quien deberia ser 1, ya que el único servidor en el clúster actualmente es DB1.

    Bootstrap Service genera los certificados de seguridad TLS que se utilizan para las comunicaciones de clúster seguras. Copie estos archivos en el /var/lib/mysql en los otros dos servidores de base 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, DB2, y DB3) para configurarlos.

    Asegúrate que cortafuegos el servicio se está ejecutando:

    # systemctl enable firewalld
    # systemctl start firewalld

    La zona por defecto es Público, por lo que, a menos que lo haya cambiado, puede agregar los cuatro puertos necesarios 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 desde un solo comando:

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


    recargar el cortafuegos service 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í.

    Desarrollar el clúster

    Ahora es el momento de agregar más servidores al clúster existente que el que se está ejecutando actualmente después de haberlo inicializado. El objetivo es sumar los dos 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 se complete antes de pasar al siguiente servidor.

    En DB2, pegar:

    # systemctl start mysql

    Haz lo mismo en DB3:

    # systemctl start mysql

    En DB1, tail el mysql.log archivo para monitorear nuevos servidores que se unen al clúster. Esto le permitirá saber si las cosas funcionan como se esperaba o si se produce algún error 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 desde DB1. Otra forma de verificar el tamaño del clúster es conectarse a cualquier servidor miembro del clúster y ejecutar estos comandos:

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

    Buscar wsrep_cluster_size, que debe ser 3, ya que los tres servidores (DB1, DB2, y DB3) ahora se han unido al clúster.

    Buscar wsrep_incoming_addresses, que debería 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.

    Probar los clústeres

    Ahora que tiene un clúster de tres nodos en funcionamiento, necesita 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 Base de datos myACTIVEdb;

    en el servidor DB2 Donde DB3, ejecute los siguientes comandos para verificar si se muestra la base de datos recién creada:

    # mysql -u root -p
    # mysql> show databases; 
    +--------------------+ 
    | Base de datos           | 
    +--------------------+ 
    | 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 del servidor de escritura realizado, los datos se replican en los otros servidores de bases de datos. Felicitaciones, ahora tiene un servidor Percona MySQL activo-activo-activo de tres nodos ejecutándose en RHEL 8.

    Mantenimiento de racimos

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

    # systemctl stop mysql

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

    Reinicie el servidor para mantenimiento, luego únase al clúster con el siguiente comando:

    # systemctl start mysql

    El estado del clúster depende de la retención de archivos. Recuerde mantener siempre un clúster que tenga más de la mitad del tamaño del clúster operativo. Para un grupo de tres, el quórum sería de dos. Para un grupo de cinco, el quórum sería de tres. Cambiar el grupo de tres a cinco es fácil; simplemente repita los pasos descritos anteriormente. Se recomienda tener un número impar de servidores en el clúster, lo que facilita la administración del quórum.

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

    # systemctl start [email protected]

    En los otros dos servidores, únase a ellos después de que se complete el proceso de arranque, con el siguiente comando:

    # systemctl start mysql

    El clúster ya está operativo y operativo.

    SELinux

    RHEL 8 se envía con SELinux en Hacer cumplir Moda. Red Hat, Percona y MySQL hicieron un buen trabajo con SELinux trabajando directamente en Hacer cumplir Moda. No es necesaria ninguna modificación. Puede encontrar más detalles en El sitio de Percona si es necesario cambiar los cambios en algunos parámetros de configuración de Percona.

    Conclusión

    RHEL 8 proporciona una plataforma para cargas de trabajo de base de datos que es sostenible y ofrece un rendimiento excelente. 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.

    Artículos de interés

    Subir