Esta entrada es una guía para desplegar un clúster de MariaDB en CentOS 7, aunque es aplicable para cualquier otra distribución (Debian, Ubuntu, Suse…).
Añadir el repositorio de MariaDB
El primer paso es agregar el repositorio de la versión de MariaDB y para la distribución donde se hará el despliegue, en este caso de MariaDB 10.1 para CentOS 7.
En todos los del cluster, iniciar MariaDB y crear el usuario que se usará para la sincronización:
1
2
3
4
5
systemctl start mariadb
mysql_secure_installation
mysql -uroot -p -e "CREATE USER sst_user@'%' IDENTIFIED BY 'password-here';"
mysql -uroot -p -e "GRANT ALL PRIVILEGES ON *.* TO sst_user@'%';"
mysql -uroot -p -e "FLUSH PRIVILEGES;"
Configurar los nodos del clúster MariaDB
Para levantar un cluster MariaDB basado el Galera es necesario configurar los siguientes parámetros en /etc/my.cnf.d/server.cnf.
wsrep_on, determina si la replicación está activa o no.
wsrep_provider, especifica la localización de la biblioteca wsrep.
wsrep_cluster_name, especifica el nombre del clúster. Sin este parámetro es posible levantar el clúster, pero no es recomendable; además en caso de querer añadir árbitros (Galera Arbitrator) es indispensable.
wsrep_cluster_address, especifica los nodos del clúster de acuerdo al formato gcomm:<ip>,<ip>,<ip>. Si se especifica vacío, gcom://, el nodo creará un nuevo clúster, por este motivo no es buena idea dejarlo vacío en los archivos de configuración de MariaDB de lo contrario se creará un nuevo clúster con cada reinicio.
wsrep_node_address, indica la IP del nodo.
wsrep_node_name, indica el nombre del nodo.
wsrep_sst_auth, indica el usuario y contraseña que se usará para la sincronización entre los nodos del clúster. Debe especificarse como usuario:contraseña.
wsrep_sst_method, indica el método usado para la transferencia de estado, `state snapshot transfer (sst), los valores posibles son rsync (por defecto), mysqldump, xtrabackup, xtrabackup-v2. Actualmente ninguna versión de xtrabackup soporta Global Transaction ID (GTID).
wsrep_retry_autocommit, número de reintentos de commit, debido a conflictos dentro del cluster, antes de volver un error al cliente. El valor por defecto es 1.
innodb_autoinc_lock_mode, modo de bloqueo usado para generar los valores de auto-incremento. En el caso de tratarse de un cluster Galera debe configurarse en 2.
default_storage_engine, motor de de la base de datos por defecto.
binlog_format, determina el tipo de replicación. Lo normal es replicación basada en filas (row).
Crear el clúster MariaDB
El último paso es crear el clúster y añadir los nodos. Es importante entender en que consistente crear el clúster. Cuando no existe nigún nodo activo, se dice que el clúster ha sido destruido, al no existir el clúster ningún nodo puede vincularse a él.
En este estado, el primer paso es crear el clúster para ello es necesario iniciar MariaDB con el parámetro --wsrep-new-cluster; esto hará que se inicie MariaDB y cree el clúster. Posteriormente tan solo es necesario iniciar el demonio MariaDB en el resto de nodos de forma normal.
Es importante tener en cuenta varias cosas:
Cada nodo que se inicie con el parámetro --wsrep-new-cluster, creará un clúster independiente; por este motivo solo un nodo debería iniciarse con el parámetro --wsrep-new-cluster.
El nodo que se inicia con el parámetro --wsrep-new-cluster, será el nodo principal lo que implica que cualquier nodo que se una al clúster se sincronizará con él y en caso de discrepancia prevalecerán los datos del nodo principal. Esto solo ocurre cuando el nodo se una al clúster, una vez el nodo es miembro del clúster las discrepancias se solventan mediante votaciones de los nodos (quorum), por este motivo es importante tener un número impar de nodos o en su defecto tener un árbitro (Galera Arbitrator) para evitar situaciones de votaciones divididas (split-brain).
En caso de que se destruya el clúster (se desconectan todos los nodos), es importante que el nodo que se inicie con el parámetro --wsrep-new-cluster sea el último nodo que se apago, es decir, el nodo más actualizado. Si crea el clúster con un nodo al azar, se perderán datos.
Ejemplo de clúster de tres nodos
Configuración de los nodos
A continuación un ejemplo para configurar un clúster de MariaDB con tres nodos:
MariaDB-01 con IP 192.168.100.104
MariaDB-02 con IP 192.168.1.104
MariaDB-03 con IP 192.168.50.104
La configuración del primer nodo, MariaDB-01, sería:
Antes de poder iniciar un clúster MariaDB basado en Galera, es necesario que un nodo cree el clúster, para cual solo es necesario iniciar el demonio MariaDB con el parámetro --wsrep-new-cluster.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[root@MariaDB ~]# service mysql start --wsrep-new-cluster