Despliegue de un clúster de MariaDB-Galera para alta disponibilidad en OpenStack Mitaka

MariaDB Galera Cluster es una solución de replicación sincrónica que asegura alta disponibilidad para bases de datos en entornos críticos como OpenStack Mitaka. A continuación, se detalla su implementación paso a paso.

Características principales

Este clúster ofrece replicación de datos en teimpo real entre todos los nodos, permitiendo operaciones de lectura y escritura en cualquier punto. Cada nodo contiene una copia completa de la base de datos, lo que elimina retardos de sincronización y proporciona tolerancia a fallos. Sin embargo, la adición de nuevos nodos puede bloquear tablas durante la sincronización, y la falta de estabilidad en la red puede causar problemas de consistencia. Solo es compatible con los motores de almacenamiento InnoDB y XtraDB.

Flujo de trabajo

Durante una transacción, los cambios se agrupan en un write-set antes de ser confirmados. Este conjunto se envía a los demás nodos para una verificación basada en claves primarias. Si la verificación es exitosa, la transacción se aplica en todos los nodos; de lo contrario, se descarta.

Proceso de instalación

Realice los siguientes comandos en los tres nodos del clúster:

# instalar paquetes necesarios
sudo yum install MariaDB-Galera-server MariaDB-client galera -y

Después de la instalación, inicie y asegure la base de datos:

# iniciar el servicio
sudo systemctl start mariadb

# ejecutar el script de seguridad
sudo mysql_secure_installation

Cree un usuario para la autenticación del clúster:

# acceder a la base de datos
mysql -u root -p

# en el prompt de MariaDB
GRANT ALL PRIVILEGES ON *.* TO 'cluster_admin'@'%' IDENTIFIED BY 'contraseña_segura' WITH GRANT OPTION;
FLUSH PRIVILEGES;
EXIT;

Detenga el servicio en todos los nodos:

sudo systemctl stop mariadb

Configuración del clúster

Edite el archivo de configuración en cada nodo con los parámetros correspondientes. A continuación, un ejemplo para el primer nodo (nodo-db1 con IP 10.0.0.1):

[mariadb]
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_cluster_address=gcomm://10.0.0.2,10.0.0.3
wsrep_cluster_name='cluster_os'
wsrep_node_address='10.0.0.1'
wsrep_node_name='nodo-db1'
wsrep_sst_method=rsync
wsrep_sst_auth=cluster_admin:contraseña_segura

Para el segundo nodo (nodo-db2 con IP 10.0.0.2):

[mariadb]
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_cluster_address=gcomm://10.0.0.1,10.0.0.3
wsrep_cluster_name='cluster_os'
wsrep_node_address='10.0.0.2'
wsrep_node_name='nodo-db2'
wsrep_sst_method=rsync
wsrep_sst_auth=cluster_admin:contraseña_segura

Para el tercer nodo (nodo-db3 con IP 10.0.0.3):

[mariadb]
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_cluster_address=gcomm://10.0.0.1,10.0.0.2
wsrep_cluster_name='cluster_os'
wsrep_node_address='10.0.0.3'
wsrep_node_name='nodo-db3'
wsrep_sst_method=rsync
wsrep_sst_auth=cluster_admin:contraseña_segura

Inicio del clúster

El primer nodo debe iniciarse en modo bootstrap para establecer el clúster:

# en nodo-db1
sudo galera_new_cluster

# en nodo-db2 y nodo-db3
sudo systemctl start mariadb

Verificación del clúster

Conéctese a cualquier nodo y ejecute comandos para verificar el estado:

# acceder a la base de datos
mysql -u root -p

# comprobar el tamaño del clúster
SHOW STATUS LIKE 'wsrep_cluster_size';

# revisar el estado global
SHOW GLOBAL STATUS LIKE 'ws%';

Los valores esperados incluyen: wsrep_cluster_status en Primary, wsrep_ready en ON, y wsrep_cluster_size en 3, indicando un clúster funcional con tres nodos.

Prueba de replicación

Cree una base de datos de prueba y verifique su existencia en otros nodos para confirmar la replicación sincrónica.

# en un nodo
CREATE DATABASE test_db;

# en otro nodo
SHOW DATABASES;

Configuración adicional

Después de configurar el clúster, ajuste los parámetros de rendimiento en el archivo server.cnf. Por ejemplo, para el nodo con IP 10.0.0.1:

[mariadb-10.0]
port = 3306
bind_address = 10.0.0.1
tmpdir = /tmp
skip-external-locking
skip-name-resolve
max_connections = 3600
innodb_flush_log_at_trx_commit = 2
innodb_log_file_size = 100M
innodb_log_files_in_group = 5
thread_concurrency = 24
innodb_thread_concurrency = 24
innodb_commit_concurrency = 24
character-set-server = utf8
collation-server = utf8_general_ci
event_scheduler = ON
max_allowed_packet = 20M

Repita esta configuración en los demás nodos, ajustendo bind_address a sus IPs respectivas.

Nota importante: Si todos los nodos se detienen, reinicie primero el último que se apagó, ya que contendrá los datos más recientes y permitirá una recuperación limpia del clúster.

Etiquetas: OpenStack Mitaka MariaDB Galera Alta Disponibilidad

Publicado el 6-6 21:01