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!!!