GNU/Linux >> Tutoriales Linux >  >> Cent OS

Cómo configurar HAProxy como Load Balancer para MariaDB en CentOS 7

En este tutorial, lo guiaré a través de la instalación de un clúster de MariaDB Galera en CentOS 7 que tiene un balanceador de carga HAProxy al frente. La configuración total consta de 4 servidores. Usaré 3 servidores CentOS 7 para los nodos de la base de datos, 2 nodos estarán activos y 1 actuará como nodo de respaldo. El cuarto servidor se usará para el balanceador de carga HAProxy. Para el algoritmo de equilibrio, usamos lessconn (pero puede usar otros algoritmos).

MariaDB es uno de los servidores de bases de datos relacionales más populares creado por el desarrollador original del servidor de bases de datos MySQL. MariaDB es una bifurcación de MySQL que admite el motor de almacenamiento XtraDB, el motor de almacenamiento InnoDB y un nuevo motor de almacenamiento llamado aria.

MariaDB Galera Cluster es un clúster multimaestro síncrono para MariaDB que está disponible solo en sistemas operativos basados ​​en GNU/Linux. Galera Cluster solo admite los motores de almacenamiento XtraDB e InnoDB. Utiliza la biblioteca Galera para la replicación con control automático de miembros, unión automática de nodos y para leer y escribir en los nodos del clúster.

Requisito previo

  • 4 servidores CentOS 7 - 64 bits:

mariadb1
           192.168.1.132

           mariadb2
           192.168.1.133

           mariadb3
           192.168.1.134

           HAProxy
           192.168.1.135

  • Privilegios de raíz en los cuatro servidores.

Paso 1:instalar y configurar el clúster MariaDB Galera

En este paso, instalaremos y configuraremos MariaDB Galera Cluster en 3 servidores CentOS. Instalaremos el servidor MariaDB-Galera, luego habilitaremos el firewall y abriremos algunos puertos para la base de datos y otros servicios. Luego, instalaremos el script de verificación de clúster en cada servidor MariaDB, para que podamos verificar el estado del servidor desde HAProxy.

A. Configure los nombres de host y prepare el sistema base

Inicie sesión en todos los servidores de bases de datos con su cuenta ssh:

ssh [email protected]
ssh [email protected].133
ssh [email protected]

Cambie al usuario raíz con el comando sudo:

sudo su

Edite el archivo de hosts en cada servidor MariaDB y agregue todas las direcciones IP del servidor y los nombres de host de los otros nodos:

vi /etc/hosts

Vea mi configuración de /etc/hosts a continuación:

192.168.1.132   mariadb1
192.168.1.133   mariadb2
192.168.1.134   mariadb3

Guarde el archivo y salga.

Luego, deshabilite SELinux en cada servidor porque causa problemas con MariaDB Galera. Deshabilite SELinux con este comando sed:

sed -i -e 's/SELINUX=permissive/SELINUX=disabled/g' /etc/sysconfig/selinux

sed (editor de flujo):reemplace "SELINUX=permisivo" con "SELINUX=deshabilitado" en el archivo /etc/sysconfig/selinux.

B. Instalar el servidor MariaDB Galera

En este paso, instalaremos MariaDB Galera 10.0 que está disponible en el repositorio de MariaDB.

Cree un nuevo archivo .repo en el directorio yum.repos.d con el comando vi:

vi /etc/yum.repos.d/mariadb.repo

Pegue los detalles del repositorio MariaDB Galera a continuación y guárdelo:

# MariaDB 10.0 CentOS repository list - created 2015-07-09 14:56 UTC
# http://mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.0/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

Ahora instale MariaDB Galera Server and Client, y algunos otros paquetes necesarios para este tutorial:

yum -y install MariaDB-Galera-server MariaDB-client galera rsync xinetd percona-toolkit precona-xtrabackup xinetd wget

Espera a que finalice el proceso de instalación.

C. Configurar cortafuegos

Activaremos el firewall predeterminado de CentOS 7 llamado Firewalld. Lo encenderemos y abriremos los puertos TCP que utilizan los servicios que instalaremos.

3306 =Usado para conexiones de cliente MySQL/MariaDB.
4567 =Tráfico de replicación de Galera Cluster.
873 =Puertos Rsync.
4444 =Para todos los demás State Snapshot Transfer (SST).
9200 =xinetd - verificación de clúster.

Encienda el firewalld con este comando systemctl:

systemctl start firewalld

Ahora abra los puertos con el firewall-cmd:

firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --permanent --add-port=4567/tcp
firewall-cmd --permanent --add-port=873/tcp
firewall-cmd --permanent --add-port=4444/tcp
firewall-cmd --permanent --add-port=9200/tcp

y recargar firewalld:

firewall-cmd --reload

D. Configurar el clúster Galera de MariaDB

Vaya al directorio /etc/my.cnf.d/ y edite el archivo server.conf con vi:

cd /etc/my.cnf.d/
vi server.conf

Descomente y agregue algunas líneas de configuración, puede ver los detalles a continuación:

wsrep_provider=/usr/lib64/galera/libgalera_smm.so   # Path to wsrep provider library
wsrep_cluster_address="gcomm://192.168.1.132,192.168.1.133,192.168.1.134"   # Group Node, add all MardiaDB Server IP
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0

# Add some configuration below
# Cluster Name
wsrep_cluster_name="mariadb_cluster"

# Add Server IP - on mariadb2 = 192.168.1.133 - on mariadb3 = 192.168.1.134
wsrep_node_address="192.168.1.132"

# Replication Provider with rsync
wsrep_sst_method=rsync

Guarde el archivo y salga.

En el servidor mariadb1, iniciemos el clúster con el siguiente comando:

/etc/rc.d/init.d/mysql bootstrap

resultado:

Bootstrapping the cluster.. Starting MySQL.. SUCCESS!

En el servidor mariadb2 y mariadb3, inicie MariaDB normalmente:

/etc/init.d/mysql start

arranque mariadb1.

Inicio de mariadb2 y mariadb3.

MariaDB se ha iniciado en todos los nodos, ahora configure la contraseña raíz para MariaDB en todos los servidores con el siguiente comando:

/usr/bin/mysql_secure_installation

E. Configurar Clustercheck

Clustercheck es un script bash útil para hacer que un proxy (por ejemplo, HAProxy) sea capaz de monitorear el servidor MariaDB.

Vaya al directorio /tmp y descargue el script con wget:

cd /tmp
wget https://raw.githubusercontent.com/olafz/percona-clustercheck/master/clustercheck

Ahora haga que el script sea ejecutable cambiando el permiso y muévalo al directorio /usr/bin/:

chmod +x clustercheck
mv clustercheck /usr/bin/

A continuación, cree un script xinetd para el clusterchek con el comando vi en el directorio "/etc/xinet.d/":

vi /etc/xinetd.d/mysqlchk

Pegue la configuración a continuación:

# default: on
# description: mysqlchk
service mysqlchk
{
        disable = no
        flags = REUSE
        socket_type = stream
        port = 9200             # This port used by xinetd for clustercheck
        wait = no
        user = nobody
        server = /usr/bin/clustercheck
        log_on_failure += USERID
        only_from = 0.0.0.0/0
        per_source = UNLIMITED
}

Guardar y salir.

Añade clustercheck a la lista de servicios:

vi /etc/services

Vaya a la línea 10101, comente los servicios que usan el puerto 9200 y agregue una nueva línea para mysqlchk/clustercheck.

mysqlchk        9200/tcp                # mysqlchk

#wap-wsp         9200/tcp                # WAP connectionless session service
#wap-wsp         9200/udp                # WAP connectionless session service

Guarde el archivo y salga.

Luego inicie el servicio xinetd:

systemctl start xinetd

Para realizar el clustercheck, debe crear un nuevo usuario en MySQL. Inicie sesión en el shell de MariaDB y cree un nuevo usuario con el nombre "clustercheckuser" y la contraseña "clustercheckpassword!".

mysql -u root -p
GRANT PROCESS ON *.* TO 'clustercheckuser'@'localhost' IDENTIFIED BY 'clustercheckpassword!' ;
exit;

En esta etapa, todos los servicios de MariaDB están sincronizados.

Comprobación de clustercheck:

/usr/bin/clustercheck

Asegúrate de que el código de resultados sea 200.

Paso 2:instalar y configurar HAProxy

Inicie sesión en el servidor HAProxy:

ssh [email protected]

Conviértase en usuario raíz y agregue la IP del servidor MariaDB y el nombre de host al archivo "/etc/hosts":

sudo su
vi /etc/hosts

HAProxy está disponible en el repositorio base de CentOS, ejecute este comando yum para instalarlo:

yum -y install haproxy

Luego configure el registro para HAProxy editando el archivo de configuración rsyslog:

vi /etc/rsyslog.conf

Descomente el puerto UDP:

# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 51

Guarde el archivo y salga del editor.

Agregue la configuración de HAProxy en el directorio rsyslog.d:

vi /etc/rsyslog.d/haproxy.conf

Pegue la configuración a continuación:

local2.=info     /var/log/haproxy-access.log
local2.notice    /var/log/haproxy-info.log

Guarde el archivo y reinicie rsyslog:

systemctl restart rsyslog

A continuación, cree un nuevo archivo de configuración de HAProxy.

Vaya al directorio /etc/haproxy y haga una copia de seguridad del archivo de configuración dafult haproxy.

cd /etc/haproxy/
mv haproxy.cfg haproxy.cfg.orig

Crear nuevo archivo de configuración de haproxy:

vi /etc/haproxy/haproxy.cfg

Y pegue la configuración de HAProxy a continuación:

global
        log 127.0.0.1   local2
        maxconn 1024
        user haproxy
        group haproxy
        daemon
        stats socket /var/run/haproxy.sock mode 600 level admin         # Make sock file for haproxy

defaults
        log     global
        mode    http
        option  tcplog
        option  dontlognull
        retries 3
        option  redispatch
        maxconn 1024
        timeout connect 5000ms
        timeout client 50000ms
        timeout server 50000ms

listen mariadb_cluster 0.0.0.0:3030
## MariaDB balance leastconn - the cluster listening on port 3030.
        mode tcp
        balance leastconn
        option httpchk
        server mariadb1 192.168.1.132:3306 check port 9200
        server mariadb2 192.168.1.133:3306 check port 9200
        server mariadb3 192.168.1.134:3306 check port 9200 backup       # Make mariadb3 as backup - automatic replication data

listen stats 0.0.0.0:9000
## HAProxy stats web gui running on port 9000 - username and password: howtoforge.
        mode http
        stats enable
        stats uri /stats
        stats realm HAProxy\ Statistics
        stats auth howtoforge:howtoforge
        stats admin if TRUE

Puerto 3030 es el puerto MariaDB con balanceo de carga, podemos acceder a las bases de datos en todos los servidores MariaDB con IP del balanceador de carga y ese puerto.

Puerto 9000 es el puerto para web-gui, permite monitorear HAProxy desde el navegador.

Ahora inicie firewalld, abra los puertos 9000 y 3030 y luego vuelva a cargarlo:

systemctl start firewalld
firewall-cmd --permanent --add-port=9000/tcp
firewall-cmd --permanent --add-port=3030/tcp
firewall-cmd --reload

Inicie HAProxy con el comando systemctl:

systemctl start haproxy

Paso 3:prueba de HAProxy y MariaDB

A. Pruebas de replicación

Inicie sesión en el servidor MariaDB, acceda al shell de MySQL y cree una nueva base de datos desde mariadb1, luego desde mariadb2 y finalmente desde mariadb3.

mysql -u root -p
create database this_mariadb1;  # Run this on mariadb1 server
create database this_mariadb2;  # Run this on mariadb2 server
create database this_mariadb3;  # Run this on mariadb3 server

Consulta las bases de datos:

B. Acceda al servidor MariaDB a través de HAProxy

Ahora accedemos al clúster del servidor MariaDB y a las bases de datos a través de la IP HAProxy en el puerto 3030.

Antes de realizar esta prueba, habilite el acceso remoto al servidor MariaDB creando un nuevo usuario raíz con el host "%".

Inicie sesión en el shell de MariaDB y cree un nuevo usuario "root" con la contraseña "aqwe123":

mysql -u root -p
GRANT ALL PRIVILEGES ON *.* TO [email protected]'%' IDENTIFIED BY "aqwe123";

A continuación, acceda a la tabla de la base de datos 'mysql.user' a través del servidor HAProxy:

mysql -u root -p -h 192.168.1.135 -P 3030 -e "select Host, User, Password from mysql.user"

Puede ver los usuarios del servidor de la base de datos accediendo a la IP del equilibrador de carga en el puerto 3030. Puede acceder a las bases de datos en los nodos MySQL accediendo a la IP de HAProxy en el puerto 3030.

Otra prueba del servidor:el algoritmo de mínima conexión:

C. Inicie sesión en HAProxy Web-Gui

Puede acceder al servidor de supervisión de HAProxy en el puerto 9000, con el nombre de usuario y la contraseña "howtoforge" para mostrar la interfaz de usuario web de HAProxy:

http://192.168.1.135:9000/estadísticas

HAProxy se instaló correctamente y puede ver que los servidores MariaDB están monitoreados.

Conclusión

MariaDB Galera Cluster es un clúster multimaestro síncrono que proporciona equilibrio de carga para bases de datos MySQL. Esta es una buena solución para construir un poderoso sistema de base de datos para su sitio. MariaDB Galera Cluster es compatible con los motores de almacenamiento xtradb e innodb, proporciona replicación automática y permite la unión automática de nuevos nodos. Podemos usar HAProxy frente al clúster de la base de datos como balanceador de carga. El equilibrador de carga ayuda a distribuir las solicitudes entrantes a todas las bases de datos. Usamos el script bash clustercheck para realizar el monitoreo de la base de datos desde HAProxy. MariaDB Galera Cluster y HAProxy es una de las mejores soluciones para construir un sistema de base de datos de alta disponibilidad.


Cent OS
  1. Cómo instalar MariaDB en CentOS 7

  2. Cómo instalar MariaDB en CentOS 8

  3. Cómo configurar MariaDB Galera Cluster en Ubuntu 20.04

  4. Cómo configurar el balanceador de carga HAProxy

  5. Cómo configurar el servidor VNC para nuevos usuarios en CentOS/RHEL 5

Cómo instalar MariaDB en CentOS 7

Cómo instalar ProjectPier en CentOS 7

Cómo instalar HAProxy en CentOS 8

Cómo configurar HAProxy como Load Balancer para Nginx en CentOS 8

Cómo configurar HAProxy como Load Balancer para Nginx en CentOS 7

Cómo configurar HAProxy en CentOS 8