Cómo configurar Mariadb Maxscale Master-Slave con Galera Cluster

En este artículo instalaremos el clúster MariaDB galera con la base de datos proxy MaxScale de MariaDB corporation. MaxScale es una base de datos proxy inteligente que puede enrutar las declaraciones de la base de datos desde el clúster a un servidor. Pero a diferencia de HAproxy, MaxScale usa E / S asincrónica del kernel de Linux, lo que debería ayudar con el rendimiento.
El clúster que vamos a hacer tendrá división de lectura y escritura, lo que significa que todas las escrituras se realizan en maestro por MaxScale, y las replica en todos los nodos donde se pueden leer.
En este artículo usamos node-01 como maestro y node-02 / node-03 como esclavos. Node-04 será nuestra máquina central maxscale.
Características principales de maxscale
a) Si falla algún servidor de base de datos, la conexión se creará automáticamente a otro nodo
B) Las conexiones se pueden agregar o eliminar dinámicamente de la sesión
C) Maxscale enrutará la solicitud del cliente a la cantidad de servidores de base de datos
Instalación del clúster
Lo primero es configurar su archivo de host con nombres de host e ips privados de todos sus hosts. Esto es necesario para que pueda hacer que sus nodos se comuniquen a través de IP privadas y evitar la necesidad de cifrar el tráfico. Aquí está mi archivo de hosts (/ etc / hosts) en los 4 servidores:
10.132.84.235 node-01 node-01 10.132.86.222 node-02 node-02 10.132.19.195 node-03 node-03 10.132.53.122 node-04 node-04
Los primeros tres serán para el clúster Galera y el cuarto para el proxy MaxScale.
Agreguemos la clave para el repositorio MariaDB en los primeros 3 servidores
apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
Luego agregaremos repositorio para arquitecturas x86 y POWER little endian, el paquete se instalará de acuerdo con su arco.
add-apt-repository 'deb [arch=amd64,i386,ppc64el] http://nyc2.mirrors.digitalocean.com/mariadb/repo/10.2/ubuntu xenial main'
Actualizar la lista de fuentes
apt update
Y luego instala el mariadb
apt install mariadb-server rsync
Configurar y construir el clúster
A continuación, debemos editar los archivos de configuración y crear el clúster. El nodo-01 será el nodo para el arranque del clúster y otros nodos se unirán a este. Entonces, primero editemos los archivos de configuración en los tres nodos.
nano /etc/mysql/my.cnf
Allí tenemos que encontrar [galera] sección y cambie estas líneas:
[galera] # Mandatory settings wsrep_on=ON wsrep_provider=/usr/lib/galera/libgalera_smm.so wsrep_cluster_name="linoxide-cluster" wsrep_cluster_address="gcomm://node-01,node-02,node-03" binlog_format=row default_storage_engine=InnoDB innodb_autoinc_lock_mode=2 # # Allow server to accept connections on all interfaces. # bind-address=0.0.0.0 # wsrep_sst_method=rsync wsrep_node_address="10.132.84.235" wsrep_node_name="node-01"
Las dos últimas líneas deben tener la dirección y el nombre de host del nodo actual, por lo que este es el archivo del nodo-01. En cada nodo, esas dos líneas deben cambiarse en consecuencia, mientras que otras líneas pueden ser iguales.
Una vez hecho esto, debemos iniciar el clúster. Si el servidor de la base de datos se está ejecutando por casualidad, deténgalo en los tres nodos.
systemctl stop mysql
En la primera ejecución del nodo:
galera_new_cluster
En los otros dos nodos
systemctl start mysql
De vuelta en el primer nodo, necesitamos establecer la contraseña, por lo que ejecutaremos
mysql_secure_installation
Después de ejecutar ese script, puede escribir este comando en cualquier nodo
mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"
Debería darte una salida similar a esta
Instalación de MaxScale Proxy y preparación del clúster
Cuando tengamos el clúster en funcionamiento, podemos recurrir al nodo-04 para instalar MaxScale en él. MaxScale solo es compatible con la arquitectura x86_64 por ahora. Vamos a descargar el paquete deb maxscale con wget
wget https://downloads.mariadb.com/MaxScale/2.0.1-oct27/ubuntu/dists/xenial/main/binary-amd64/maxscale-2.0.1-2.ubuntu.xenial.x86_64.deb
A continuación instalaremos la dependencia
apt install libcurl3
Y luego istall MaxScale
dpkg -i maxscale-2.0.1-2.ubuntu.xenial.x86_64.deb
Maxscale ha sido instalado ahora necesitamos ingresar nuevamente el indicador de mysql en nuestro clúster de Galera para hacer que maxscale sea usuario y otorgarle suficientes privilegios para que maxscale funcione.
mysql -u root -p
Y en el indicador de mysql escriba esta línea por línea
CREATE USER 'maxscale'@'%' IDENTIFIED BY 'you-password-here'; Query OK, 0 rows affected (0.00 sec) GRANT SELECT ON mysql.db TO 'maxscale'@'%'; Query OK, 0 rows affected (0.01 sec) GRANT SELECT ON mysql.user TO 'maxscale'@'%'; Query OK, 0 rows affected (0.01 sec) GRANT SHOW DATABASES ON *.* TO 'maxscale'@'%'; Query OK, 0 rows affected (0.01 sec)
Configuración de MaxScale
Vamos a explicar cómo funciona este archivo de configuración. Primera parte debajo [maxscale] establecerá respectivamente el número de subprocesos de la CPU en 4, desactivará el registro en / var / log / syslog, activará el registro en / var / log / maxscale, activará la advertencia de registro, registrará en la memoria y los avisos de registro, y desactivará la información de registro y Opciones de desarrollador de registro para depurar el código.
La siguiente sección importante es [Galera Monitor]. Allí tenemos que concentrarnos en varias líneas. La linea que dice servidores = deben llenarse con los nombres de los servidores. Este no es el nombre de host, así es como MaxScale nombra a los servidores en este archivo de configuración más abajo. En nuestro caso, estableceremos server1 en server3. El usuario es el nombre de usuario que creamos en la sección anterior, maxscale en nuestro caso. La contraseña es lo que establezca como contraseña para el usuario de maxscale. Galera Monotor elegirá un nodo como maestro y otros como esclavo (de nuestros tres nodos). El nodo con WSREP_LOCAL_INDEX más bajo se seleccionará como maestro. Si cambia la configuración del clúster, puede ocurrir la nueva selección y el nodo con un índice más bajo se seleccionará como maestro. Si no desea que el maestro cambie de esta manera, puede usar la opción disable_master_failback y establecerla en 1 como en nuestro archivo de configuración. De esta manera, el maestro no cambiará incluso si un nuevo nodo con un índice más bajo se une al clúster.
Luego pasamos a la siguiente sección importante que es [RW Split Router]. Aquí ingresamos nuevamente los nombres de tres servidores y el mismo usuario y contraseña que el [Galera Monitor] sección.
Por último, necesitamos editar esos tres servidores e ingresar los nombres por los que MaxScale los verá y las direcciones IP que usará para comunicarse con ellos. Los nombres serán [server1][server2] y [server3], y para ip usaremos direcciones IP privadas para evitar tener que encriptar el tráfico.
Ahora en el servidor de maxscale, que es el nodo-04, vamos a configurar e iniciar la base de datos del proxy de maxscale. Primero configuremos el ufw para permitir conexiones en los puertos necesarios.
ufw allow 6603 ufw allow 4442
Luego haga una copia de seguridad del archivo de configuración
mv /etc/maxscale.cnf /etc/maxscale.cnf.bk
Después de que el archivo haya sido respaldado y movido, creemos un nuevo archivo desde cero.
nano /etc/maxscale.cnf
Allí, puede usar esto como esqueleto para la configuración, excepto que, por supuesto, debe cambiar las partes en negrita:
[maxscale] threads=4 syslog=0 maxlog=1 log_to_shm=1 log_warning=1 log_notice=1 log_info=0 log_debug=0 [Galera Monitor] type=monitor module=galeramon servers=server1,server2,server3 user=maxscale passwd=you-password-here monitor_interval=2000 disable_master_failback=1 available_when_donor=1 [qla] type=filter module=qlafilter options=/tmp/QueryLog [fetch] type=filter module=regexfilter match=fetch replace=select [RW Split Router] type=service router=readwritesplit servers=server1,server2,server3 user=maxscale passwd=you-password-here max_slave_connections=100% max_slave_replication_lag=30 [CLI] type=service router=cli [RW Split Listener] type=listener service=RW Split Router protocol=MySQLClient port=3306 [CLI Listener] type=listener service=CLI protocol=maxscaled address=127.0.0.1 port=6603 [server1] type=server address=10.132.84.235 port=3306 protocol=MySQLBackend [server2] type=server address=10.132.86.222 port=3306 protocol=MySQLBackend [server3] type=server address=10.132.19.195 port=3306 protocol=MySQLBackend
Una vez guardado esto, puede iniciar el servicio maxscale
systemctl start maxscale.service
Y prueba si está funcionando
maxadmin -pmariadb list servers
Conclusión
Hemos instalado con éxito la base de datos proxy MaxScale como balanceador de carga para nuestro clúster Galera que se ejecuta en 3 nodos Ubuntu 16.04 con un cuarto nodo para MaxScale. MaxScale es una buena solución para clústeres grandes, hoy hicimos la configuración más pequeña posible, pero es posible escalar desde aquí. Espero que ese artículo te haya sido útil para presentarte con la configuración de MaxScale, que para leer y que tengas un buen día.