sql >> Base de Datos >  >> RDS >> MariaDB

Cómo instalar y configurar MaxScale para MariaDB

Hay diferentes razones para agregar un balanceador de carga entre su aplicación y su base de datos. Si tiene mucho tráfico (y desea equilibrar el tráfico entre diferentes nodos de la base de datos) o si desea utilizar el equilibrador de carga como punto final único (por lo que, en caso de conmutación por error, este equilibrador de carga se encargará de este problema enviando el tráfico al nodo disponible/en buen estado). También podría ser que desee utilizar diferentes puertos para escribir y leer datos de su base de datos.

En todos estos casos, un balanceador de carga le resultará útil y, si tiene un clúster de MariaDB, una opción para esto es usar MaxScale, que es un proxy de base de datos para bases de datos de MariaDB.

En este blog, le mostraremos cómo instalarlo y configurarlo manualmente, y cómo ClusterControl puede ayudarlo en esta tarea. Para este ejemplo, usaremos un clúster de replicación de MariaDB con 1 nodo maestro y 1 esclavo, y CentOS8 como sistema operativo.

Cómo instalar MaxScale

Supondremos que tiene su base de datos MariaDB funcionando y también una máquina (virtual o física) para instalar MaxScale. Le recomendamos que utilice un host diferente, de modo que, en caso de que falle el maestro, MaxScale puede conmutar por error al nodo esclavo; de lo contrario, MaxScale no puede realizar ninguna acción si el servidor en el que se ejecuta deja de funcionar.

Hay diferentes formas de instalar MaxScale, en este caso usaremos los repositorios de MariaDB. Para agregarlo al servidor MaxScale, debe ejecutar:

$ curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | sudo bash

[info] Repository file successfully written to /etc/yum.repos.d/mariadb.repo

[info] Adding trusted package signing keys...

[info] Successfully added trusted package signing keys

Ahora, instale el paquete MaxScale:

$ yum install maxscale

Ahora que tiene instalado su nodo MaxScale, antes de comenzar, debe configurarlo.

Cómo configurar MaxScale

Como MaxScale realiza tareas como autenticación, monitoreo y más, necesita crear un usuario de base de datos con algunos privilegios específicos:

MariaDB [(none)]> CREATE USER 'maxscaleuser'@'%' IDENTIFIED BY 'maxscalepassword';

MariaDB [(none)]> GRANT SELECT ON mysql.user TO 'maxscaleuser'@'%';

MariaDB [(none)]> GRANT SELECT ON mysql.db TO 'maxscaleuser'@'%';

MariaDB [(none)]> GRANT SELECT ON mysql.tables_priv TO 'maxscaleuser'@'%';

MariaDB [(none)]> GRANT SELECT ON mysql.roles_mapping TO 'maxscaleuser'@'%';

MariaDB [(none)]> GRANT SHOW DATABASES ON *.* TO 'maxscaleuser'@'%';

MariaDB [(none)]> GRANT REPLICATION CLIENT on *.* to 'maxscaleuser'@'%';

Recuerde que las versiones de MariaDB 10.2.2 a 10.2.10 también requieren:

MariaDB [(none)]> GRANT SELECT ON mysql.* TO 'maxscaleuser'@'%';

Ahora que tiene listo el usuario de la base de datos, veamos los archivos de configuración. Cuando instale MaxScale, el archivo maxscale.cnf se creará en /etc/. Hay varias variables y diferentes formas de configurarlo, así que veamos un ejemplo:

$ cat  /etc/maxscale.cnf 

# Global parameters

[maxscale]

threads = auto

log_augmentation = 1

ms_timestamp = 1

syslog = 1



# Server definitions

[server1]

type=server

address=192.168.100.126

port=3306

protocol=MariaDBBackend

[server2]

type=server

address=192.168.100.127

port=3306

protocol=MariaDBBackend



# Monitor for the servers

[MariaDB-Monitor]

type=monitor

module=mariadbmon

servers=server1,server2

user=maxscaleuser

password=maxscalepassword

monitor_interval=2000



# Service definitions

[Read-Only-Service]

type=service

router=readconnroute

servers=server2

user=maxscaleuser

password=maxscalepassword

router_options=slave

[Read-Write-Service]

type=service

router=readwritesplit

servers=server1

user=maxscaleuser

password=maxscalepassword



# Listener definitions for the services

[Read-Only-Listener]

type=listener

service=Read-Only-Service

protocol=MariaDBClient

port=4008

[Read-Write-Listener]

type=listener

service=Read-Write-Service

protocol=MariaDBClient

port=4006

En esta configuración, tenemos 2 nodos de base de datos, 192.168.100.126 (Maestro) y 192.168.100.127 (Esclavo), como puede ver en la sección Definición de Servidores.

También tenemos 2 servicios diferentes, uno de solo lectura, donde está el nodo esclavo, y otro de lectura-escritura donde está el nodo maestro.

Finalmente, tenemos 2 oyentes, uno para cada servicio. El oyente de solo lectura, escuchando en el puerto 4008, y el de lectura y escritura, escuchando en el puerto 4006.

Este es un archivo de configuración básico. Si necesita algo más específico, puede seguir la documentación oficial de MariaDB.

Ahora está listo para iniciarlo, así que simplemente ejecute:

$ systemctl start maxscale.service

Y compruébalo:

$ maxctrl list services
f
$ maxctrl list servers

Puede encontrar una lista de comandos maxctrl aquí, o incluso puede usar maxadmin para gestionarlo.

Ahora probemos la conexión. Para esto, puede intentar acceder a su base de datos utilizando la dirección IP de MaxScale y el puerto que desea probar. En nuestro caso, el tráfico en el puerto 4006 debe enviarse al servidor 1 y el tráfico en el puerto 4008 al servidor 2.

$ mysql -h 192.168.100.128 -umaxscaleuser -pmaxscalepassword -P4006 -e 'SELECT @@hostname;'

+------------+

| @@hostname |

+------------+

| server1   |

+------------+

$ mysql -h 192.168.100.128 -umaxscaleuser -pmaxscalepassword -P4008 -e 'SELECT @@hostname;'

+------------+

| @@hostname |

+------------+

| server2   |

+------------+

¡Funciona!

Cómo implementar MaxScale con ClusterControl

Veamos ahora cómo puede usar ClusterControl para simplificar esta tarea. Para esto, asumiremos que tiene su clúster de MariaDB agregado a ClusterControl.

Vaya a ClusterControl -> Seleccione el clúster de MariaDB -> Acciones de clúster -> Agregar balanceador de carga -> MaxScale.

Aquí puede implementar un nuevo nodo MaxScale o también puede importar uno existente uno. Si lo está implementando, debe agregar la dirección IP o el nombre de host, las credenciales de administrador y usuario de MaxScale, la cantidad de subprocesos y los puertos (de escritura y de solo lectura). También puede especificar qué nodo de base de datos desea agregar a la configuración de MaxScale.

Puede monitorear la tarea en la sección Actividad de ClusterControl. Cuando finalice, tendrá un nuevo nodo MaxScale en su clúster de MariaDB.

Y ejecutar los comandos de MaxScale desde la interfaz de usuario de ClusterControl sin necesidad de acceder a la servidor vía SSH.

Parece más fácil que implementarlo manualmente, ¿verdad?

Conclusión

Tener un Load Balancer es una buena solución si desea equilibrar o dividir su tráfico, o incluso para acciones de conmutación por error, y MaxScale, como producto MariaDB, es una buena opción para las bases de datos MariaDB.

La instalación es fácil, pero la configuración y el uso pueden resultar complicados si es algo nuevo para usted. En ese caso, puede usar ClusterControl para implementarlo, configurarlo y administrarlo de una manera más sencilla.