MariaDB Galera Cluster - Instalación y configuración

Es este articulo veremos como instalar MariaDB Galera Cluster y configurarlo en un entorno compuesto por 3 servidores (el mínimo indispensable para que el Cluster funcione correctamente). El proyecto MariaDB nace como fork de MySQL aunque con la versión 10 (actualmente en fase Beta), partiendo de la versión 5.6 de MySQL, se han desarrollado nuevas características propias de este sistema de gestión de base de datos.

MariaDB Galera Cluster  es un cluster multi-maestro síncrono que se basa en MariaDB. Las ventajas:

  • replicación síncrona
  • Topología multi-maestro
  • Lectura y escritura en cada nodo del cluster
  • Controlo activo de los miembros del cluster. Los nodos que fallan son automáticamente  quitados de la configuración hasta que no vuelvan disponibles. Este proceso se realiza sin perdida de datos y problemas de sincronización.
  • Sencillez extrema a la hora de añadir un nuevo nodo

Limitaciones:

  • Funciona solamente con tablas InnoDB
  • EL comando DELETE no es soportado en tablas sin una clave primaria
  • Los comandos LOCK/UNLOCK tables no son suportados como la funciones GET_LOCK() y RELEASE_LOCK()

Las instalación se efectuará es tres servidores con CentOS 6.5 64bit 1GBRAM alquilados en DigitalOcean. Para la configuración del Cluster se utilizarán las IP privadas de cada servidor.

 

Server 1,2,3

IP Privada servidor 1: 10.128.23.193

IP Privada servidor 2: 10.128.238.41

IP Privada servidor 3: 10.128.237.35

yum update -y

yum install nano -y

Se configura de la zona horaria:

rm /etc/localtime

ln -s /usr/share/zoneinfo/America/Bogota /etc/localtime

El idioma (español):

nano /etc/sysconfig/i18n

se modifica esta linea:

LANG="en_US.UTF-8"

para que quede:

LANG="es_CO.iso88591"

Se guardan los cambios.

Se instala el paquete del network time protocol que se utiliza para tener actualizada la hora del servidor:

yum install ntp -y

Se configura para que arranque en automático:

chkconfig ntpd on

Se inicia:

service ntpd start

Se crea la partición de Swap ya que no viene por defecto:

dd if=/dev/zero of=/swapfile bs=1024 count=512k

mkswap /swapfile

swapon /swapfile

Se configura la partición de swap para que arranque con el sistema:

nano /etc/fstab

al final del archivo se añade la línea que sigue:

/swapfile swap swap defaults 0 0

Se guardan los cambios y secambian los permisos del archivo recién creado:

chmod 0600 /swapfile

Se configuran los repositorios de MariaDB:

nano /etc/yum.repos.d/MariaDB.repo

Se copian las siguientes líneas:

[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/5.5/centos6-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

Se guardan los cambios. Se desinstala  las librerías de MySQL:

rpm -e --nodeps mysql-libs

Se instala MariaDB:

yum install MariaDB-Galera-server MariaDB-client -y

Se inicia el servicio en los tres servidores:

service mysql start

Se vuelve el arranque automático:

chkconfig mysql on

Se pone en seguridad:

mysql_secure_installation

A lo largo del proceso se configura la contraseña del usuario root de MariaDB (la misma en los tres servidores):

Captura

Se entra en la consola de MariaDB de cada servidor:

mysql -u root -psesamo

y se permite el acceso remoto para el usuario root:

MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'sesamo' WITH GRANT OPTION;

Se sale del cliente:

MariaDB [(none)]> quit

Ahora en los tres servidores cambiamos la configuración de MariaDB:

Servidor 1:

nano /etc/my.cnf.d/server.cnf

bajo la etiqueta:

[mariadb-5.5]

ponemos:

datadir=/var/lib/mysql
query_cache_size=0
binlog_format=ROW
default_storage_engine=innodb
innodb_autoinc_lock_mode=2
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_provider_options="gcache.size=16G"
wsrep_cluster_address=gcomm://10.128.238.41,10.128.237.35
wsrep_cluster_name='voztovoice'
wsrep_node_address='10.128.23.193'
wsrep_node_name='db1'
wsrep_sst_method=mysqldump
wsrep_sst_auth=root:sesamo
log-error=/var/log/mysql.log

  • El parámetro wsrep_provider_options en este caso define es espacio del disco que será reservado al cluster una vez que se inicie. Posibles opciones.
  • El parámetro wsrep_cluster_address contiene las IP Privada de los dos demás nodos del cluster.
  • EL parámetro wsrep_cluster_name contiene el nombre que se quiere asignar al cluster.
  • El parámetro wsrep_node_address contiene la IP privada del node que se está configurando
  • El parámetro wser_sst_method define el tipo de método que se utilizará para el intercambio de los datos. Los posibles valores son:
    • mysqldump
    • rsync
    • xtrabackup

Una tabla comparativa de los tres métodos:

Captura

  • El parámetro wsrep_sst_auth contiene los datos del usuario root de MariaDB y respectiva contraseña.

Se guardan los datos, se para el servicio MariaDB y se reinicia con la opción que le permite preparar el cluster:

service mysql stop

service mysql bootstrap
Bootstrapping the clusterStarting MySQL.... SUCCESS!

Servidor 2:

nano /etc/my.cnf.d/server.cnf

bajo la etiqueta:

[mariadb-5.5]

ponemos:

datadir=/var/lib/mysql
query_cache_size=0
binlog_format=ROW
default_storage_engine=innodb
innodb_autoinc_lock_mode=2
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_provider_options="gcache.size=16G"
wsrep_cluster_address=gcomm://10.128.23.193,10.128.237.35
wsrep_cluster_name='voztovoice'
wsrep_node_address='10.128.238.41'
wsrep_node_name='db2'
wsrep_sst_method=mysqldump
wsrep_sst_auth=root:sesamo
log-error=/var/log/mysql.log

Guardamos los datos y reiniciamos el servicio:

service mysql restart

Servidor 3:

nano /etc/my.cnf.d/server.cnf

bajo la etiqueta:

[mariadb-5.5]

ponemos:

datadir=/var/lib/mysql
query_cache_size=0
binlog_format=ROW
default_storage_engine=innodb
innodb_autoinc_lock_mode=2
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_provider_options="gcache.size=16G"
wsrep_cluster_address=gcomm://10.128.23.193,10.128.238.41
wsrep_cluster_name='voztovoice'
wsrep_node_address='10.128.237.35'
wsrep_node_name='db3'
wsrep_sst_method=mysqldump
wsrep_sst_auth=root:sesamo
log-error=/var/log/mysql.log

Guardamos los datos y reiniciamos el servicio:

service mysql restart

Ahora para saber si el cluster está funcionando bien, primero podemos revisar el archivo /var/log/mysql.log, luego podemos utilizar, desde la consola de MariaDB, el siguiente comando:

MariaDB [(none)]> SHOW STATUS LIKE 'wsrep_%';

Una explicación del significado de cada valor.

Por ultimo creamos una base de datos en uno de los servidores (en este se ha utilizado una copia de la base de datos de A2Billing con el ENGINE modificado de MyISAM a InnoDB) :

MariaDB [(none)]> create database a2billing;

Se sale de la consola:

MariaDB [(none)]> quit

Se importan los datos:

mysql -u root -sesamo a2billing < a2billilng.sql

La base de datos será replicada en todos los servidores.

La comunicación entre los tres servidores MariaDB se realiza en los siguientes puertos:

  • 3306 TCP
  • 4567 TCP
  • 4444 TCP solamente en el caso que como método de replicación se utilice Rsync

¿Tienen planeado pasar a MariaDB?

¿Que opinan de esta solución?

Vota el Articulo: 

Sin votos (todavía)
Evalúa la calidad del articulo

1 comentario

Problema con el cluster MariaDB

Hola compañeros, estoy creando un cluster de MariaDB para mi proyecto final de fin de grado en tres servidores Ubuntu 14.04, una vez los configuro siguiendo los pasos que aquí aparecen, el cluster me funciona perfecto, me replica las bases de datos en los servidores, funciona con algún servidor apagado... El problema viene cuando apago todos los nodos del cluster (como en cualquier cluster, al hacer esto, todo se va al garete), pues al iniciarlos de nuevo, no hay manera de que me inicie el servicio correctamente en los servidores 2 y 3 iniciando antes el servicio en el servidor 1, incluso volviendo a crear el cluster en el.
Sabe alguien por que puede ser el fallo?
Un saludo y muchas gracias!

Suscribirse a Comentarios de "MariaDB Galera Cluster - Instalación y configuración" Suscribirse a VozToVoice - Todos los comentarios