MariaDB Cluster consta de MariaDB Server con Galera Cluster y MariaDB MaxScale. Como solución de replicación multimaestro, cualquier servidor MariaDB con Galera Cluster puede funcionar como servidor principal. Esto significa que los cambios realizados en cualquier nodo del clúster se replican en todos los demás nodos del clúster, utilizando la replicación basada en certificación y el ordenamiento global de transacciones para el motor de almacenamiento InnoDB. MariaDB MaxScale es un proxy de base de datos que se asienta sobre el servidor MariaDB que amplía la alta disponibilidad, la escalabilidad y la seguridad y, al mismo tiempo, simplifica el desarrollo de aplicaciones al desacoplarla de la infraestructura de la base de datos subyacente.
En esta serie de blogs, veremos la administración de MaxScale usando maxctrl para nuestro MariaDB Cluster. En esta primera entrega de la serie de blogs, cubriremos la introducción y algunos conceptos básicos de la utilidad de línea de comandos maxctrl. Nuestra configuración consta de un servidor MaxScale y un MariaDB 10.4 de 3 nodos con Galera 4, como se ilustra en el siguiente diagrama:
Nuestro clúster MariaDB fue implementado y administrado por ClusterControl, mientras que nuestro host MaxScale es un nuevo host en el clúster y ClusterControl no lo implementó para este tutorial.
Instalación de MaxScale
La instalación de MaxScale es bastante sencilla. Elija el sistema operativo correcto de la página de descarga de MariaDB para MaxScale y descárguelo. El siguiente ejemplo muestra cómo se instalaría MaxScale en un host CentOS 8:
$ wget https://dlm.mariadb.com/1067156/MaxScale/2.4.10/centos/8/x86_64/maxscale-2.4.10-1.centos.8.x86_64.rpm
$ yum localinstall maxscale-2.4.10-1.centos.8.x86_64.rpm
$ systemctl enable maxscale
$ systemctl start maxscale
Después de iniciar el daemon, de forma predeterminada, los componentes de MaxScale se ejecutarán en los siguientes puertos:
- 0.0.0.0:4006 - Escucha de división de lectura y escritura predeterminada.
- 0.0.0.0:4008 - Escucha por turnos predeterminada.
- 127.0.0.1:8989 - API Resto MaxScale.
Los puertos anteriores son modificables. Es común que un servidor MaxScale independiente en producción se ejecute con la división de lectura/escritura en el puerto 3306 y round-robin en el puerto 3307. Esta configuración es la que vamos a implementar en esta publicación de blog.
Archivos importantes y estructura de directorios
Una vez que el paquete esté instalado, obtendrá las siguientes utilidades/programas:
- escala máxima - El propio MaxScale.
- maxctrl - El cliente administrativo de línea de comandos para MaxScale que utiliza la API REST de MaxScale para la comunicación.
- maxadmin - El cliente administrativo y de supervisión obsoleto de MaxScale. Utilice maxctrl en su lugar.
- teclas máximas - Esta utilidad escribe en el archivo .secrets, en el directorio especificado, la clave de cifrado AES y el vector de inicio que utiliza la utilidad maxpasswd, al cifrar las contraseñas utilizadas en el archivo de configuración MariaDB MaxScale.
- maxpasswd - Esta utilidad crea una contraseña cifrada usando un archivo .secrets que se creó anteriormente usando maxkeys.
MaxScale cargará todas las opciones de configuración desde las siguientes ubicaciones, en el orden particular:
- /etc/maxscale.cnf
- /etc/maxscale.cnf.d/*.cnf
- /var/lib/maxscale/maxscale.cnf.d/*.cnf
Para obtener más información sobre la configuración de MaxScale, consulte la Guía de configuración de MaxScale.
Una vez que se inicializa MaxScale, los archivos predeterminados y las estructuras de directorio son:
- Directorio de datos MaxScale:/var/lib/maxscale
- Archivo PID MaxScale:/var/run/maxscale/maxscale.pid
- Archivo de registro de MaxScale:/var/log/maxscale/maxscale.log
- Documentación de MaxScale:/usr/share/maxscale
MaxCtrl - La CLI
Una vez iniciado, podemos usar el cliente de línea de comandos MaxCtrl para administrar MaxScale usando las escuchas de API REST de MaxScale en el puerto 8989 en el host local. Las credenciales predeterminadas para la API REST son "admin:mariadb". Los usuarios utilizados por la API REST son los mismos que utiliza la interfaz de red MaxAdmin. Esto significa que cualquier usuario creado para la interfaz de red MaxAdmin debería funcionar con MaxScale REST API y MaxCtrl.
Podemos usar la utilidad maxctrl en modo interactivo, similar al cliente mysql. Simplemente escriba "maxctrl" y accederá al modo interactivo (donde el aviso cambió del aviso de shell al aviso de maxctrl), como en la siguiente captura de pantalla:
Alternativamente, podemos ejecutar el mismo comando directamente en el indicador de shell, por ejemplo:
Las opciones del comando MaxCtrl dependen de la versión MaxScale que viene con él. En el momento de escribir este artículo, la versión de MaxScale es 2.4 y debe consultar esta documentación para obtener una lista completa de comandos. MaxCtrl utiliza la interfaz API REST de MaxScale, que se explica en detalle aquí.
Adición de servidores MariaDB en MaxScale
Cuando iniciamos nuestro MaxScale por primera vez, generará un archivo de configuración en /etc/maxscale.cnf con algunos parámetros predeterminados y ejemplos. No vamos a usar esta configuración y vamos a crear la nuestra en su lugar. Cree una copia de seguridad de este archivo porque queremos vaciarlo más adelante:
$ mv /etc/maxscale.cnf /etc/maxscale.cnf.bak
$ cat /dev/null > /etc/maxscale.cnf # empty the file
Reinicie MaxScale para comenzar todo de nuevo:
$ systemctl restart maxscale
El término "servidor" en MaxScale básicamente significa el servidor backend de MariaDB, como en este caso, los 3 nodos de nuestro MariaDB Cluster. Para agregar los 3 servidores de MariaDB Cluster al tiempo de ejecución de MaxScale, use los siguientes comandos:
$ maxctrl create server mariadbgalera1 192.168.0.221 3306
$ maxctrl create server mariadbgalera2 192.168.0.222 3306
$ maxctrl create server mariadbgalera3 192.168.0.222 3306
Para verificar los servidores agregados, use el comando list:
$ maxctrl list servers
Y debería ver el siguiente resultado:
Agregar monitoreo a MaxScale
Lo siguiente es configurar el servicio de monitoreo para el uso de MaxScale. MaxScale admite varios módulos de supervisión según el tipo de base de datos, a saber:
- Monitor MariaDB
- Monitor Galera
- Monitor Clustrix
- Monitor de almacén de columnas
- Monitor Aurora
En esta configuración, vamos a utilizar el módulo Galera Monitor llamado "galeramon". En primer lugar, debemos crear un usuario de base de datos para que MaxScale lo utilice en uno de los servidores del clúster de MariaDB. En este ejemplo, elegimos mariadbgalera1, 192.168.0.221 para ejecutar las siguientes declaraciones:
MariaDB> CREATE USER [email protected]'192.168.0.220' IDENTIFIED BY 'MaXSc4LeP4ss';
MariaDB> GRANT SELECT ON mysql.* TO 'maxscale_monitor'@'192.168.0.220';
MariaDB> GRANT SHOW DATABASES ON *.* TO 'maxscale_monitor'@'192.168.0.220';
Donde 192.168.0.220 es la dirección IP de nuestro servidor MaxScale.
No es seguro almacenar la contraseña de usuario de maxscale_monitor en texto sin formato. Se recomienda encarecidamente almacenar la contraseña en un formato cifrado. Para lograr esto, necesitamos generar una clave secreta específicamente para esta instancia de MaxScale. Utilice la utilidad "maxkeys" para generar la clave secreta que utilizará MaxScale para fines de cifrado y descifrado:
$ maxkeys
Generating .secrets file in /var/lib/maxscale.
Ahora podemos usar la utilidad maxpasswd para generar el valor encriptado de nuestra contraseña:
$ maxpasswd MaXSc4LeP4ss
D91DB5813F7C815B351CCF7D7F1ED6DB
Siempre usaremos el valor anterior cuando almacenemos nuestras credenciales de usuario de monitoreo dentro de MaxScale. Ahora estamos listos para agregar el servicio de monitoreo de Galera a MaxScale usando maxctrl:
maxctrl> create monitor galera_monitor galeramon servers=mariadbgalera1,mariadbgalera2,mariadbgalera3 user=maxscale_monitor password=D91DB5813F7C815B351CCF7D7F1ED6DB
Verifique con el siguiente comando:
Adición de servicios en MaxScale
El servicio es básicamente cómo MaxScale debe enrutar las consultas a los servidores backend. MaxScale 2.4 admite múltiples servicios (o enrutadores), a saber:
- Avrorouter
- Binlogrouter
- Gato
- CLI
- HintRouter
- Readconnroute
- Lectura/escritura dividida
- SchemaRouter
- Enrutador inteligente
Para nuestro clúster de MariaDB, solo necesitamos dos servicios de enrutamiento:división de lectura y escritura y balanceo de carga por turnos. Para la división de lectura y escritura, las consultas de escritura se reenviarán a un solo servidor MariaDB hasta que no se pueda acceder al servidor, donde MaxScale reenviará las consultas de escritura al siguiente nodo disponible. Para el equilibrio por turnos, las consultas se reenviarán a todos los nodos de back-end de forma rotativa.
Cree un servicio de enrutamiento para round-robin (o multimaestro):
maxctrl> create service Round-Robin-Service readconnroute user=maxscale_monitor password=D91DB5813F7C815B351CCF7D7F1ED6DB --servers mariadbgalera1 mariadbgalera2 mariadbgalera3
Cree otro servicio de enrutamiento para división de lectura y escritura (o maestro único):
maxctrl> create service Read-Write-Service readwritesplit user=maxscale_monitor password=D91DB5813F7C815B351CCF7D7F1ED6DB --servers mariadbgalera1 mariadbgalera2 mariadbgalera3
Verificar con:
Todos los componentes creados con éxito por MaxCtrl generarán su propio archivo de configuración en / var/lib/maxscale/maxscale.cnf.d. En este punto, el directorio se ve así:
$ ls -l /var/lib/maxscale/maxscale.cnf.d
total 24
-rw-r--r--. 1 maxscale maxscale 532 Jul 5 13:18 galera_monitor.cnf
-rw-r--r--. 1 maxscale maxscale 250 Jul 5 12:55 mariadbgalera1.cnf
-rw-r--r--. 1 maxscale maxscale 250 Jul 5 12:55 mariadbgalera2.cnf
-rw-r--r--. 1 maxscale maxscale 250 Jul 5 12:56 mariadbgalera3.cnf
-rw-r--r--. 1 maxscale maxscale 1128 Jul 5 16:01 Read-Write-Service.cnf
-rw-r--r--. 1 maxscale maxscale 477 Jul 5 16:00 Round-Robin-Service.cnf
Agregar oyentes a MaxScale
Los oyentes representan los puertos en los que el servicio escuchará las conexiones entrantes. Puede ser un puerto o un archivo de socket UNIX y el tipo de componente debe ser "oyente". Comúnmente, los oyentes están vinculados a los servicios. En nuestra configuración, vamos a crear dos oyentes:el oyente de lectura y escritura en el puerto 3306 y el oyente Round-Robin en el puerto 3307:
maxctrl> create listener Read-Write-Service Read-Write-Listener 3306 --interface=0.0.0.0 --authenticator=MariaDBAuth
maxctrl> create listener Round-Robin-Service Round-Robin-Listener 3307 --interface=0.0.0.0 --authenticator=MariaDBAuth
Verifique con los siguientes comandos:
En este punto, nuestro MaxScale ahora está listo para equilibrar la carga de las consultas para nuestro clúster MariaDB. Desde las aplicaciones, envíe las consultas al host MaxScale en el puerto 3306, donde las consultas de escritura siempre llegarán al mismo nodo de la base de datos, mientras que las consultas de lectura se enviarán a los otros dos nodos. Esto también se conoce como configuración de un solo escritor. Si desea utilizar una configuración de múltiples escritores, donde las escrituras se reenviarán a todos los nodos back-end de MariaDB en función de algoritmos de equilibrio por turnos. Puede ajustar aún más el equilibrio mediante el uso de prioridad y peso.
Nuevamente, al cambiar las opciones de configuración a través de maxctrl, todos los componentes creados con éxito tendrán su propio archivo de configuración dentro de /var/lib/maxscale/maxscale.cnf.d, como se muestra en el siguiente resultado:
$ ls -l /var/lib/maxscale/maxscale.cnf.d
-rw-r--r--. 1 maxscale maxscale 532 Jul 5 13:18 galera_monitor.cnf
-rw-r--r--. 1 maxscale maxscale 250 Jul 5 12:55 mariadbgalera1.cnf
-rw-r--r--. 1 maxscale maxscale 250 Jul 5 12:55 mariadbgalera2.cnf
-rw-r--r--. 1 maxscale maxscale 250 Jul 5 12:56 mariadbgalera3.cnf
-rw-r--r--. 1 maxscale maxscale 259 Jul 5 16:06 Read-Write-Listener.cnf
-rw-r--r--. 1 maxscale maxscale 1128 Jul 5 16:06 Read-Write-Service.cnf
-rw-r--r--. 1 maxscale maxscale 261 Jul 5 16:06 Round-Robin-Listener.cnf
-rw-r--r--. 1 maxscale maxscale 477 Jul 5 16:06 Round-Robin-Service.cnf
Las opciones de configuración anteriores se pueden modificar directamente para satisfacer sus necesidades, pero es necesario reiniciar el servicio MaxScale para cargar los nuevos cambios. Si desea comenzar de cero nuevamente, puede borrar todo lo que se encuentra en este directorio y reiniciar MaxScale.
En el próximo episodio, analizaremos los comandos de administración y supervisión de MaxCtrl para nuestro clúster de MariaDB.