sql >> Base de Datos >  >> RDS >> Mysql

Cómo implementar Percona XtraDB Cluster 8 para alta disponibilidad

Percona XtraDB Cluster 8.0 se basa en Percona Server para MySQL 8.0 integrado con la API de replicación de conjunto de escritura de Galera y la biblioteca de replicación de Galera, para formar una replicación multimaestro de alta disponibilidad para el servidor de base de datos basado en MySQL. Percona XtraDB Cluster viene con el motor de almacenamiento XtraDB (un reemplazo directo de InnoDB) y sigue muy de cerca las versiones anteriores de Oracle MySQL (incluidas todas las correcciones de errores), con algunas variables adicionales y estados específicos para esta compilación.

En esta publicación de blog, veremos cómo implementar un Percona XtraDB Cluster 8.0 para alta disponibilidad de forma manual y automática.

Características notables

Antes de continuar con los pasos de implementación, vale la pena mencionar las características notables y las mejoras significativas en esta versión principal que se basa en Percona Server para MySQL 8.0 (sin complemento de replicación de grupo) y Galera 4:

  • Replicación de transmisión:esto permite que la replicación del conjunto de escritura procese grandes transacciones de datos en fragmentos más pequeños y manejables, lo que minimiza los conflictos de datos.
  • Las funciones MySQL de sincronización para la coordinación de acciones (wsrep_last_seen_gtid, wsrep_last_write_gtid, wsrep_sync_wait_upto_gtid).
  • Nuevas tablas del sistema Galera, que ayudarán a monitorear el estado del clúster bajo el esquema "mysql":wsrep_cluster, wsrep_cluster_members y wsrep_streaming_log.
  • Cifrado de Gcache.
  • La infraestructura wsrep de Galera 4 es más robusta que la de Galera 3. Presenta una ejecución de código más rápida con mejor manejo de estado, previsibilidad mejorada y manejo de errores.

Para obtener una lista completa de cambios, consulte las notas de la versión.

Implementación manual de Percona XtraDB Cluster 8.0

Pasos de instalación

Para el clúster Percona XtraDB, necesitamos al menos tres nodos:

  • db1 (192.168.20.61)
  • db2 (192.168.20.62)
  • db3 (192.168.20.63)

Los pasos descritos en esta sección deben realizarse en todos los nodos de la base de datos (db1, db2 y db3) que se ejecutan en CentOS 8. Primero, deshabilite SELinux (de lo contrario, el proceso IST fallaría):

$ setenforce 0
$ sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/sysconfig/selinux

Instalar el paquete del repositorio de Percona:

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

La última versión estable en este momento es Percona XtraDB Cluster 8.0, pero de forma predeterminada, el paquete del repositorio está configurado hasta la versión 5.7. El paquete percona-release contiene un script que puede habilitar repositorios adicionales para los productos más nuevos. Ejecutemos ese script y habilitemos el repositorio específico de pxc80:

$ percona-release setup pxc80
* Disabling all Percona Repositories

On RedHat 8 systems it is needed to disable dnf mysql module to install Percona-Server
Do you want to disable it? [y/N]

Elija "y" para deshabilitar el módulo mysql DNF. Esto es necesario para priorizar el repositorio de Percona para paquetes relacionados con MySQL.

Luego, instale Percona XtraDB Cluster y Percona Xtrabackup:

$ dnf -y install percona-xtradb-cluster percona-xtrabackup-80

En este momento, debe tener instalado Percona XtraDB Cluster 8.0.0-11.3. Todos los paquetes de dependencia se instalarán como paquetes de compatibilidad compartida, compartidos y de cliente. Luego podemos iniciar el servicio MySQL para la configuración inicial:

$ systemctl start mysql

Se generará una nueva contraseña de root durante el primer inicio. Necesitamos recuperar la información de la contraseña raíz primero del registro de errores de MySQL (el valor predeterminado es /var/log/mysqld.log en sistemas basados ​​en RHEL):

$ cat /var/log/mysqld.log | grep 'temporary password'
2020-11-27T06:53:05.929661Z 6 [Note] [MY-010454] [Server] A temporary password is generated for [email protected]: <eqo+jXNw2lk

Como puede ver, la contraseña generada es "

$ mysql_secure_installation

Securing the MySQL server deployment.

Enter password for user root:

The existing password for the user account root has expired. Please set a new password.

New password:

Re-enter new password:

VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?

Press y|Y for Yes, any other key for No: y

There are three levels of password validation policy:
LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 2

Using existing password for root.
Estimated strength of the password: 100

Change the password for root ? ((Press y|Y for Yes, any other key for No) : y

New password:

Re-enter new password:

Estimated strength of the password: 100

Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y

By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Success.

Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
Success.

By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.

Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
 - Dropping test database...
Success.

 - Removing privileges on test database...
Success.

Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y

Success.

All done!

La contraseña raíz generada caducará inmediatamente después del primer inicio de sesión raíz. El script de ayuda anterior nos ayuda a configurar una nueva contraseña raíz de MySQL, establecer la política de validación de contraseñas, deshabilitar el inicio de sesión remoto para la raíz, eliminar la base de datos de prueba y los usuarios anónimos y también recargar las tablas de privilegios.

El archivo de configuración predeterminado (/etc/my.cnf) está configurado con una cadena de conexión gcomm:// vacía en la variable wsrep_cluster_address, como se muestra a continuación:

wsrep_cluster_address=gcomm://

La línea anterior debe configurarse con una lista de direcciones IP de todos los nodos participantes en el clúster. Si se saltó este paso, se crearía un nuevo clúster de Galera en cada nodo (3 clústeres separados de 1 nodo) después de que se iniciara el servicio en cada nodo. Por lo tanto, las siguientes líneas deben modificarse en consecuencia en la sección [mysqld]:

wsrep_cluster_address=gcomm://192.168.20.51,192.168.20.52,192.168.20.53
wsrep_node_address=192.168.20.51 # IP address of this DB host
wsrep_node_name=db1 # any name to identify this DB host
pxc-encrypt-cluster-traffic=OFF

Espere que wsrep_cluster_address sea idéntico en todos los hosts de base de datos, mientras que wsrep_node_address y wsrep_node_name deben ser distintos en cada host de base de datos. La última línea pxc-encrypt-cluster-traffic=OFF significa que nos gustaría deshabilitar el cifrado para el tráfico del clúster. Tenga en cuenta que esto es intencional para simplificar nuestros pasos de implementación o, de lo contrario, tendríamos que realizar pasos de administración de claves/certificados. Si desea habilitar el cifrado, consulte este artículo.

Repita los pasos anteriores para los nodos de base de datos restantes antes de proceder a arrancar el clúster.

Arranque de clúster

Galera requiere que inicie un nodo en un clúster como punto de referencia antes de que los nodos restantes puedan unirse y formar el clúster. Este proceso se conoce como arranque de clúster. Bootstrapping es un paso inicial para introducir un nodo de base de datos como componente principal antes de que otros lo vean como un punto de referencia para sincronizar datos.

En este ejemplo, usaremos db1 como nodo de referencia y lo iniciaremos con el comando bootstrap (también puede elegir otros nodos, ya que este es un nuevo clúster sin datos):

$ systemctl stop mysql
$ systemctl start [email protected]
$ systemctl status [email protected]

Una vez iniciado, podemos iniciar los otros nodos (db2 y db3) con el comando de inicio estándar (un nodo a la vez):

$ systemctl stop mysql
$ systemctl start mysql

Puede verificar con la siguiente línea dentro de /var/log/mysqld.log:

2020-11-27T08:09:01.964152Z 2 [Note] [MY-000000] [WSREP] Synchronized with group, ready for connections

En este punto, nuestro servicio de clúster Percona XtraDB se ha iniciado y la implementación manual ahora está completa. Para obtener más información sobre el proceso de arranque de Percona XtraDB Cluster, consulte esta publicación de blog Cómo Arrancar MySQL o MariaDB Galera Cluster.

Despliegue automático con ClusterControl

Hay dos formas de implementar un Percona XtraDB Cluster 8.0 mediante ClusterControl. Puede utilizar la interfaz de usuario de ClusterControl (GUI basada en web) o la CLI de ClusterControl llamada s9s. Le mostraremos ambas formas en esta sección. ClusterControl debe residir en un host separado, lejos de su clúster de base de datos. Por lo tanto, nuestra arquitectura se puede ilustrar así:

Instalando ClusterControl

SSH en el servidor ClusterControl e instale ClusterControl con los siguientes comandos:

$ wget http://severalnines.com/downloads/cmon/install-cc
$ chmod 744 install-cc
$ ./install-cc

Siga el asistente de instalación hasta que finalice la instalación. Una vez completada la instalación, abra el navegador web y vaya a http://192.168.20.19/clustercontrol. Cree un usuario administrador y la licencia se instalará automáticamente. Todas las instalaciones nuevas vienen con una licencia de prueba para la edición empresarial durante 30 días. Una vez que caduque esta licencia de prueba, volverá de forma predeterminada a la edición comunitaria, que es gratuita para siempre.

SSH sin contraseña

ClusterControl requiere que se configure SSH sin contraseña desde el servidor de ClusterControl a todos los nodos administrados. Para lograr esto, primero debemos generar una clave SSH en el servidor ClusterControl. El usuario de SSH debe tener un privilegio de superusuario (sudo o root). En este caso, vamos a utilizar el usuario root:

$ whoami
root

Ahora genere una clave SSH para el usuario root:

$ ssh-keygen -t rsa # press Enter on all prompts

Luego, copie la clave pública a todos los nodos de la base de datos que vamos a implementar y administrar. En este caso, los 3 nodos de Galera:

$ ssh-copy-id [email protected]
$ ssh-copy-id [email protected]
$ ssh-copy-id [email protected]

Ingrese la contraseña raíz de los hosts respectivos cuando se le solicite.

Pruébelo con el siguiente comando y asegúrese de obtener una respuesta correcta:

$ ssh [email protected] "ls /root"

Ahora estamos listos para implementar nuestro clúster mediante la interfaz de usuario o CLI de ClusterControl, como se muestra en las siguientes secciones.

Implementación de PXC mediante la interfaz de usuario de ClusterControl

Es prácticamente fácil implementar un clúster Percona XtraDB con ClusterControl y, de forma predeterminada, ClusterControl configurará el clúster con el cifrado Galera habilitado. Una vez que se haya configurado el SSH sin contraseña, vaya a ClusterControl -> Implementar -> MySQL Galera y especifique los detalles requeridos a continuación:

Luego, haga clic en "Continuar" para pasar al siguiente paso donde configuramos la especificación MySQL:

Elija "Percona" como proveedor y 8.0 como versión. Mantenga el resto como predeterminado e ingrese la contraseña de root de MySQL. Especifique la dirección IP o el nombre de host de los hosts de la base de datos uno por uno y asegúrese de obtener los íconos de marca verde después de cada inserción. Esto indica que ClusterControl puede llegar a los hosts correspondientes a través de SSH sin contraseña con el usuario y la clave de SSH proporcionados, tal como se define en el paso 1. Haga clic en el botón "Implementar" para iniciar la implementación.

Luego, ClusterControl desencadena un trabajo de implementación en el que puede monitorear el progreso de la implementación yendo a ClusterControl -> Actividad -> Trabajos -> Crear clúster -> Detalles completos del trabajo, como se muestra en la siguiente captura de pantalla:

Una vez que se complete el proceso, debería ver que el clúster aparece en el panel :

Eso es todo. La implementación ahora está completa.

Implementación de PXC mediante CLI de ClusterControl

Si prefiere implementar el clúster mediante la línea de comandos, simplemente podemos usar la herramienta de cliente de línea de comandos ClusterControl llamada "s9s". Esta herramienta enviará un trabajo de implementación al controlador ClusterControl y realizará todos los pasos necesarios para implementar el clúster.

Ejecute el siguiente comando en el servidor ClusterControl:

$ s9s cluster --create \
--cluster-type=galera \
--nodes="192.168.20.51;192.168.20.52;192.168.20.53" \
--vendor=percona \
--provider-version=8.0 \
--db-admin-passwd='P4ssw0rdSecr3t' \
--os-user=root \
--os-key-file=/root/.ssh/id_rsa \
--cluster-name='My Percona XtraDB Cluster 8.0' \
--log

Verá que aparecerán los mensajes de trabajo y podrá monitorear el progreso de la implementación allí y también puede monitorear el progreso del trabajo desde ClusterControl UI -> Actividad -> Trabajos . Espere de 15 a 20 minutos (dependiendo de la conexión a Internet) hasta que vea la notificación de finalización del trabajo. Nuestro Percona XtraDB Cluster 8.0 ahora está implementado y puede verlo en la lista de la interfaz de usuario de ClusterControl.