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 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:
apt-get install python-software-properties
Añadimos los llaves a nuestro llaver para utilizar los repositorios:
apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db
Indicamos los repositorios a utilizar:
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:
apt-get -y update
Ahora instalaremos el paquete principal mariadb-galera-server
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:
apt-get -y install rsync
Debemos repetir estas instalaciones en todos los nodos del cluster, que en nuestro caso son dos.
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:
nano /etc/mysql/conf.d/cluster.cnf
Los parámetros que debemos añadir al fichero son los siguientes:
[mysqld]
query_cache_size=0
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
query_cache_type=0
bind-address=0.0.0.0
#Galera Provider Configuration
wsrep_provider=/usr/lib/galera/libgalera_smm.so
#wsrep_provider_options="gcache.size=32G"
#Galera Cluster Configuration
wsrep_cluster_name="test_cluster"
wsrep_cluster_address="gcomm://first_ip,second_ip,third_ip"
#Galera Synchronization Congifuration
wsrep_sst_method=rsync
#wsrep_sst_auth=user:pass
#Galera Node Configuration
wsrep_node_address="this_node_ip"
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:
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:
# Galera Node Configuration
wsrep_node_address="192.168.3.170"
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:
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:
service mysql stop
En la imagen veremos el resultado:
Entonces, una vez hecho, desde el primero nodo, ejecutaremos la siguiente orden:
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:
service mysql start
Con el resultado:
Para 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!!!