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.