Crear un cluster con MariaDB Galera Cluster

Hace ya un tiempo que hablamos de la instalación y configuración de la base de datos libre MariaDB. En dicho artículo un usuario me preguntó si había pensado realizar un artículo de MariaDB funcionando en cluster. Pues bien, aquí lo tenéis. Hablamos de MariaDB Galera Cluster

cluster-photo-nial-bradshaw

Cluster de base de datos con MariaDB Galera Cluster

Ha sido algo laborioso y he tenido que mirar bastante documentación. Al final ha valido la pena el trabajo. Como resultado he podido montar el cluster que ha funcionado a la primera.

He creado un cluster con dos servidores virtuales a modo de nodos, los dos funcionando como maestros. Se trata de dos sistemas Debian 7, con las características:

  • Nombres de host: vDebian7MariaDB y vDebian7MariaDB1
  • Direcciones IP: 192.168.3.170 y 192.168.3.171
  • Sistema operativo: GNU Linux Debian 7
  • Memoria de cada máquina virtual: 512 MB
  • Disco duro: 8 GB por host

Instalación del software necesario

He instado Galera Cluster, software diseñado para trabajar con MariaDB en entornos GNU Linux.

Comenzamos instalando los paquetes necesarios:

  1. apt-get install python-software-properties

Añadimos los llaves a nuestro llaver para utilizar los repositorios:

  1. apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db

Indicamos los repositorios a utilizar:

  1. add-apt-repository 'deb http://mirror.klaus-uwe.me/mariadb/repo/10.0/debian wheezy main'

Recordad que también se pueden añadir directamente en el fichero /etc/apt/sourcest.list

Ya podemos actualizar:

  1. apt-get -y update

Ahora instalaremos el paquete principal mariadb-galera-server

  1. apt-get install mariadb-galera-server

Nos preguntará la contraseña del administrador de la base de datos.

Otro paquete imprescindible para el uso y sincronización de las bases de datos del cluster es rsync:

  1. apt-get -y install rsync

Debemos repetir estas instalaciones en todos los nodos del cluster, que en nuestro caso son dos.

mariadb-seal-shaded-browntext-alt

Configurar MariaDB y Galera

Todos los nodos tienen un archivo de configuración en común, que tiene que estar en cada uno de los hosts, ubicado en /etc/mysql/conf.d, para crearlo yo he utilizado el comando nano:

  1. nano /etc/mysql/conf.d/cluster.cnf

Los parámetros que debemos añadir al fichero son los siguientes:

  1. [mysqld]
  2. query_cache_size=0
  3. binlog_format=ROW
  4. default-storage-engine=innodb
  5. innodb_autoinc_lock_mode=2
  6. query_cache_type=0
  7. bind-address=0.0.0.0
  8.  
  9. #Galera Provider Configuration
  10. wsrep_provider=/usr/lib/galera/libgalera_smm.so
  11. #wsrep_provider_options="gcache.size=32G"
  12.  
  13. #Galera Cluster Configuration
  14. wsrep_cluster_name="test_cluster"
  15. wsrep_cluster_address="gcomm://first_ip,second_ip,third_ip"
  16.  
  17. #Galera Synchronization Congifuration
  18. wsrep_sst_method=rsync
  19. #wsrep_sst_auth=user:pass
  20.  
  21. #Galera Node Configuration
  22. wsrep_node_address="this_node_ip"
  23. wsrep_node_name="this_node_name"

Ahora modificaremos los parámetros, para adaptarlos al entorno de nuestro artículo. Donde indica «#Galera Cluster Configuration«, añadiré las IP de mi entorno, para que quede la línea de la siguiente manera:

  1. wsrep_cluster_address="gcomm://192.168.3.170,192.168.3.171"

En la parte final, adaptaremos las dos últimas líneas a nuestras necesidades:

  1. # Galera Node Configuration
  2. wsrep_node_address="192.168.3.170"
  3. wsrep_node_name="vDebian7MariaDB"

Una vez hechos los cambios podemos guardar el fichero. Dicho fichero tienen que estar en la misma ubicación en cada uno de los nodos, adaptando en todos los casos la dos últimas líneas del fichero.

Para no tener que escribirlo todo de nuevo yo he utilizado el comando scp:

  1. scp /etc/mysql/conf.d/cluster.cnf root@192.168.171:/etc/mysql/conf.d

Recuerda, una vez copiado debemos modificar las dos últimas líneas del fichero con los datos del nodo correspondiente.

Usuario de mantenimiento de Debian y MariaDB

MariaDB y Debian utilizan un usuario de mantenimiento, que se encarga de las tareas de rutina. Dicho usuario se crea de manera aleatoria. Sus datos se especifican en un fichero de configuración ubicado en /etc/mysql/debian.cnf, es importante que el fichero del primer nodo sea copiado al resto de nodos. El resto de servidores también tendrán el suyo propio, que ha de ser borrado y substituido per el del primer nodo.

Puesta en marcha y pruebas de funcionamiento

Para poner el cluster en marcha debemos parar el servicio de base de datos en todos los nodos:

  1. service mysql stop

En la imagen veremos el resultado:

MariaDB-Galera-Cluster-01Entonces, una vez hecho, desde el primero nodo, ejecutaremos la siguiente orden:

  1. service mysql start --wsrep-new-cluster

De ésta manera creamos el cluster. Y cuando iniciemos el servicio en el nodo se conectará con almenos otro nodo disponible.

Ya podemos iniciar el servicio en todos los nodos:

  1. service mysql start

Con el resultado:

MariaDB-Galera-Cluster-02Para realizar una prueba, y así ver que todo funciona bien, sólo tenemos que crear una base de datos en cualquier de los nodos, y ver si en el resto de nodos también está creada y ya podemos darle a la bola.

Para el artículo he utilizado las siguientes fuentes:

Página oficial de MariaDB Galera (en inglés)

Guía de Digitalocean (en inglés)

Los derechos de la imagen son Creative Commons, que podéis consultar aquí.

See you soon!!!

7 Respuestas

  1. Iván Barra dice:

    Gracias por compartir amigo, de verdad un artículo muy interesante, voy a realizar un laboratorio (cuando tenga un rato) pero en CentOS, que es mi Server Distro de cabecera, claramente no hay mucha diferencia, solo en la instalación.

    Saludos y gracias.

    • davidochobits dice:

      Hola Iván,

      Lo he probado en Debian, que usa paquetes DEB, no sé si será similar en CentOS, que funciona con paquetes RPM, aunque no creo que haya mucha diferencia, quizás alguna librería.

      Ya contarás…

      Gracias por pasarte 🙂

  2. Hola,
    Antes de nada, muchas gracias por el aporte.
    No he logrado averiguar si es posible especificar una única base de datos para la replicación con Galera Cluster. ¿Es obligatorio hacer la replicación de todas las bases de datos que tenemos en la máquina?
    Gracias.

  3. Emiliano dice:

    Hola! Primero que nada, te pido disculpas por responder luego de tanto tiempo que creaste el post! Pero me parece genial, muy concreto y didáctico.
    Tengo una duda solamente, espero que puedas ayudarme… Hasta la creación del clúster y réplica de información me funciona genial… Solo tengo que resolver el tema de la famosa «alta disponibilidad», existe forma de establecer una IP o nombre al clúster de modo que desde las aplicaciones que consumen las bases de datos siempre tengan respuesta independientemente si hay algún nodo caído?
    Intentaré ser mas explicito en mi consulta:
    IP Nodo clúster MARIADBSRV01: 192.168.0.40
    IP Nodo clúster MARIADBSRV02: 192.168.0.60
    IP VIP CLUSTER MARIA DB: 192.168.0.10

    ¿Existe forma de configurar la IP «192.168.0.10» en los clientes?

    Muchas gracias!!!!

Deja un comentario

This site uses Akismet to reduce spam. Learn how your comment data is processed.