Paso a paso de como montar un cluster de MariaDB Maxscale para dotar resiliencia, HA y Balanceo a tus SQLs
Tenia esto post en mente desde hace tiempo, ya que llevo usando Maxscale desde hace tiempo y no se ha hablado mucho nunca de proxies de bases de datos, con lo que molan, jo.
Pues este es el post del proxy que yo creo que es mejor que SQLProxy, ya que aunque es mas lento, tiene mas funcionalidad que el otro, que es casi in HAProxy para SQL.
Que es Maxscale?
Pues en una palabra, es un proxy de bases de datos, que desde que los descubri el año pasado, no paro de usarlo.
No solo eso, si no que poco a poco han ido añadiendo mas funciones, entre las que destacan por ejemplo:
Filtrado o Masking de datos
Router de Binlog
Yo lo vengo usando desde hace tiempo ya y he visto como se ha ido convirtiendo en parte imprescindible de mi stack de cluster de base de datos.
Las posibilidades que te da, como la de tener los servidores de MariaDB totalmente resguardados, asi como poder filtrar datos depende de que usuario acceda a ella ( hola GDPR! ) son basicas. Ademas, como te permite definir varios endpoints de bases de datos, yo tengo 2 bestias fisicas que corren multiples instancias de MariaDB, cada una en su puerto. Maxscale las redirije a cada una de ellas segund de donde entren, con lo que, cada entorno tiene su propio endpoint de acceso a la bd y yo los meto todos en varios servidores fisicos, vamos, el concepto BlackBox :) (Te recomiendo que le eches un vistazo a la web, en la seccion de Links mas abajo y veas las bondades de las que es capaz)
Yo aqui voy a explicar un poco como configurarlo para tener un nivel basico de cluster, ya que he visto poco o nada de Maxscale en nuestro idioma, casi todo en ingles.
Ingredientes
Tenemos 5 nodos:
maxscale-1
maxscale-2
mariadb-1
mariadb-2
mariadb-3
Tenemos 3 redes:
red publica de acceso a la bd > 10.10.0.0/24
red interna de datos > 192.168.0.0/24
red de gestion (si la quereis, que deberiais ) 10.100.0.0/24
una ip virtual gestionada por keepalived en los MAXSCALE
Este va a ser un manual de alto nivel, no voy a entrar en pormenores porque entiendo que para eso, esta al manual de maxscale. Es mas, lo siento pero cada vez estoy mas acostumbrado a no tocar ficheros de configuracion ni con un palo, asi que todo lo hago con Ansible, con lo cual, puede que explique como va la logica y luego ponga el Playbook :)
virtual_ipaddress { 10.25.152.150 #<LA IP VIRTUAL O NO VIRTUAL> } track_script { chk_maxscale } smtp_alert }
Como sabemos que maxscale esta vivo? con el vrrp_script que busca el PID de maxscale cada 2 segundos
Configuramos las ips de la red tanto publica como interna. La interna NO necesita de gateway
Si hemos elegido tener una tercera red de gestion, en la red publica solo publicamos el 3306 (3307, 3308 si queremos tener mas un servicio funcionando en la misma vIP)
Este seria el archivo de configuracion del Maxscale, os lo voy comentando sobre el fichero mismo
############################### #ESTO ES PARA SACAR METRICAS A PROMETHEUS #METRICS [MaxInfo] type=service router=maxinfo user=<MONITORUSER> passwd=<PASSWORD>
############################### #AQUI DEFINIMOS SI QUEREMOS UN MASKING Y CUANDO LO APLICAMOS, LEED MAS EN LA WEB DE MAXSCALE #OFUSCATION STREAM [Enigma-1] type=filter module=masking warn_type_mismatch=always large_payload=abort rules=/etc/maxscale/masking/enigma-1.json
############################### #ESTOS SON LOS SERVICIOS QUE VAMOS A DAR A TRAVES DE MAXSCALE, SE PODRIA DECIR QUE SON LAS BBDD QUE VAMOS A #OFRECER A LOS CLIENTES A TRAVES DE EL. SE COMPONEN SIEMPRE DE UN SERVICIO, QUE ESCUCHA EN UN LISTENER QUE TIENE UN #MONITOR PARA QUE MAXSCALE SEPA EN QUE ESTADO ESTA EL NODO #INSTANCES
############################### #ESTOS SON LOS SERVIDORES DONDE SE VAN A DAR LOS SERVICIOS. AL TENER VARIAS INSTANCIAS EN EL MISMO, USO EL MISMO SERVER, DISTINTO PUERTO. #SERVERS FOR ALL INSTANCES ###############################
maxadmin list services Services. --------------------------+-------------------+--------+----------------+------------------- Service Name | Router Module | #Users | Total Sessions | Backend databases --------------------------+-------------------+--------+----------------+------------------- CLI | cli | 2 | 217694 | MaxInfo | maxinfo | 2 | 321937 | dev1 service | readwritesplit | 99 | 35207 | db-11, db-12 qa service | readwritesplit | 1 | 1 | db-21, db-22 corp service | readwritesplit | 110 | 5315 | db-31, db-32 --------------------------+-------------------+--------+----------------+-------------------
Voila! Espero que os haya servido de utilidad, dejad vuestros comentarios abajo si os place. Ah….y perdonar la ausencia. Demasiado lio que ire contando poco a poco, porque tengo aprox 5 post casi listos.