Cuando tenemos un entorno en HA puede darse el caso de que hay alguna caída del nodo o de la red y se produzca una desincronización, entrando el nodo secundario (slave) a funcionar como principal (master) para sustituirlo. Esto se conoce como “Nodo roto” y para solucionarlo habría que seguir el siguiente proceso:
A modo de resumen lo que haremos será mover un copia de respaldo (backup) de la base de datos principal al secundario, una vez consigamos recuperarlo y resincronizarlo mediante percona, pacemaker y corosync. Suponiendo el nombre de los nodos nodo1 y nodo2 y siendo el nodo2 el que se ha caído:
- Ponemos el nodo2 en espera o standby mediante los siguientes comandos:
node2# pcs node standby node2
- Hacemos una copia de seguridad del directorio de datos de Percona del nodo2 por si acaso aunque no la utilizaremos:
node2# systemctl stop mysqld node2# [ -e /var/lib/mysql.bak ] && rm -rf /var/lib/mysql.bak node2# mv /var/lib/mysql /var/lib/mysql.bak
- Hacemos una copia de seguridad de la base de datos del nodo maestro (node1 en este ejemplo) y actualizamos el nombre del nodo principal, y el nombre y la posición del archivo de log principal en el cluster (en este ejemplo node1,
mysql-bin.000001
y785
):
node1# [ -e /root/pandoradb.bak ] && rm -rf /root/pandoradb.bak node1# innobackupex --no-timestamp /root/pandoradb.bak/ node1# innobackupex --apply-log /root/pandoradb.bak/ node1# binlog_info=$(cat /root/pandoradb.bak/xtrabackup_binlog_info) node1# crm_attribute --type crm_config --name pandoradb_REPL_INFO -s mysql_replication -v "node1|$(echo $binlog_info | awk '{print $1}')|$(echo $binlog_info | awk '{print $2}')"
- Cargamos la base de datos del nodo1 hacia el nodo2:
node1# rsync -avpP -e ssh /root/pandoradb.bak/ node2:/var/lib/mysql/
node2# chown -R mysql:mysql /var/lib/mysql node2# chcon -R system_u:object_r:mysqld_db_t:s0 /var/lib/mysql
- Desactivamos el modo standby del node2 y limpiamos los errores:
node2# pcs node unstandby node2 node2# pcs resource cleanup --node node2
- Comprobamos el estado de la replicación de la base de datos:
node2# mysql -uroot -ppandora mysql> SHOW SLAVE STATUS \G
- Conviene asegurarse de que Slave_IO_Running y Slave_SQL_Running muestran
Yes
en la última salida.