Base de datos · 8 min read · Dec 07, 2025
Cómo configurar la alta disponibilidad de MariaDB con Heartbeat y DRBD en Ubuntu 16.04 LTS
Heartbeat y DRBD se utilizan para una solución de clúster para cualquier aplicación que use dos servidores. Ambos servidores funcionan en modo activo y pasivo, un servidor funcionará al mismo tiempo y el otro servidor como servidor de respaldo. DRBD (Distributed Replicated Block Device) es un servicio a nivel de kernel que sincroniza datos entre dos servidores en tiempo real. Heartbeat es un programa de código abierto que permite a un servidor Linux primario y a un servidor de respaldo determinar si el otro está “vivo” y, si el primario no lo está, transferir recursos al respaldo. También gestionará la IP de alta disponibilidad y otros servicios en sus servidores.
En este tutorial, aprenderemos cómo lograr la alta disponibilidad de MariaDB utilizando Heartbeat y DRBD en el servidor Ubuntu 16.04.
Requisitos
- Dos nodos con Ubuntu 16.04 instalado.
- Dos tarjetas de red instaladas en cada nodo.
- Disco duro adicional no particionado instalado en cada nodo.
- Usuario no root con privilegios sudo configurado en cada nodo.
Comenzando
Antes de comenzar, necesitará configurar la dirección IP en cada nodo. Use la siguiente dirección IP en cada nodo:
Nodo1 :
172.16.0.1 en eth0 y 192.168.0.101 en eth1
Nodo2 :
172.16.0.2 en eth0 y 192.168.0.102 en eth1
La IP 192.168.0.103 será la IP de alta disponibilidad.
A continuación, también necesitará configurar el nombre de host y la resolución de nombres en cada nodo. Así cada nodo podrá comunicarse entre sí. En el primer nodo, abra el archivo /etc/hosts y el archivo /etc/hostname:
sudo nano /etc/hostsAgregue las siguientes líneas al final del archivo:
172.16.0.1 Node1
172.16.0.2 Node2
sudo nano /etc/hostnameCambie el archivo como se muestra a continuación:
Node1
Guarde y cierre el archivo cuando haya terminado.
En el segundo nodo, abra el archivo /etc/hosts y el archivo /etc/hostname:
sudo nano /etc/hostsAgregue las siguientes líneas al final del archivo:
172.16.0.1 Node1
172.16.0.2 Node2
sudo nano /etc/hostnameCambie el archivo como se muestra a continuación:
Node2
Guarde y cierre el archivo cuando haya terminado.
A continuación, actualice cada nodo con la última versión con el siguiente comando:
sudo apt-get update -y
sudo apt-get upgrade -yUna vez que su sistema esté actualizado, reinicie el sistema para aplicar estos cambios.
Instalar DRBD y Heartbeat
A continuación, necesitará instalar DRBD y Heartbeat en ambos nodos. Por defecto, ambos están disponibles en el repositorio predeterminado de Ubuntu 16.04. Puede instalarlos simplemente ejecutando el siguiente comando en ambos nodos:
sudo apt-get install drbd8-utils heartbeat -yA continuación, inicie el servicio DRBD y Heartbeat y habilítelos para que se inicien en el arranque:
sudo systemctl start drbd
sudo systemctl start heartbeat
systemctl enable drbd
systemctl enable heartbeatConfigurar DRBD y Heartbeat
A continuación, necesitará configurar el dispositivo DRBD en cada nodo. Cree una única partición en el segundo disco no particionado /dev/sdb en cada nodo.
Puede hacer esto simplemente ejecutando el siguiente comando en cada nodo:
sudo echo -e 'n\np\n1\n\n\nw' | fdisk /dev/sdbA continuación, necesitará configurar DRBD en ambos nodos. Puede hacer esto creando el archivo /etc/drbd.d/r0.res en cada nodo.
sudo nano /etc/drbd.d/r0.resAgregue las siguientes líneas:
global {
usage-count no;
}
resource r0 {
protocol C;
startup {
degr-wfc-timeout 60;
}
disk {
}
syncer {
rate 100M;
}
net {
cram-hmac-alg sha1;
shared-secret "aBcDeF";
}
on Node1 {
device /dev/drbd0;
disk /dev/sdb1;
address 172.16.0.1:7789;
meta-disk internal;
}
on Node2 {
device /dev/drbd0;
disk /dev/sdb1;
address 172.16.0.2:7789;
meta-disk internal;
}
}Guarde y cierre el archivo cuando haya terminado, luego abra otro archivo de configuración en cada nodo:
sudo nano /etc/ha.d/ha.cfAgregue las siguientes líneas:
# Intervalo de verificación
keepalive 1
# Tiempo antes de que el servidor se declare muerto
deadtime 10
# Retraso de espera secundario al arrancar
initdead 60
# Auto-failback
auto_failback off
# Interfaz de Heartbeat
bcast eth1
# Nodos a monitorear
node Node1
node Node2
Guarde y cierre el archivo.
A continuación, abra el archivo de recursos /etc/ha.d/haresources en cada nodo:
sudo nano /etc/ha.d/haresourcesAgregue las siguientes líneas:
Node1 192.168.0.103/24 drbddisk::r0 Filesystem::/dev/drbd0::/var/lib/mysql::ext4::noatime
Aquí, Node1 es el nombre de host de su nodo activo principal, 192.168.0.103 es la dirección IP flotante, /var/lib/mysql es un punto de montaje y /dev/drbd0 es el dispositivo DRBD.
A continuación, necesitará definir y almacenar claves de autorización idénticas en ambos nodos. Puede hacer esto en el archivo /etc/ha.d/authkeys en cada nodo:
sudo nano /etc/ha.d/authkeysAgregue las siguientes líneas:
auth1
1 sha1 su-contraseña-segura
Aquí, su-contraseña-segura es su contraseña segura. Use la misma contraseña en ambos nodos.
A continuación, cree e inicie DRBD ejecutando el siguiente comando en Node1:
sudo drbdadm create-md r0
sudo systemctl restart drbd
sudo drbdadm outdate r0
sudo drbdadm -- --overwrite-data-of-peer primary all
sudo drbdadm primary r0
sudo mkfs.ext4 /dev/drbd0
sudo chmod 600 /etc/ha.d/authkeys
sudo mkdir /var/lib/mysqlUna vez que el disco DRBD esté creado en Node1, cree el disco DRBD en Node2 con el siguiente comando:
sudo drbdadm create-md r0
sudo systemctl restart drbd
sudo chmod 600 /etc/ha.d/authkeys
sudo mkdir /var/lib/mysqlAhora, puede verificar que el disco DRBD está conectado y se está sincronizando correctamente ejecutando el siguiente comando:
sudo cat /proc/drbdSi todo está bien, debería ver la siguiente salida:
version: 8.4.5 (api:1/proto:86-101)
srcversion: F446E16BFEBS8B115AJB14H
0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r-----
ns:210413 nr:0 dw:126413 dr:815311 al:35 bm:0 lo:0 pe:11 ua:0 ap:0 ep:1 wo:f oos:16233752
[>....................] sync'ed: 3.3% (14752/14350)M
finish: 0:12:23 speed: 12,156 (16,932) K/sec
A continuación, inicie heartbeat en ambos nodos para habilitar la parte de failover de su configuración.
sudo systemctl start heartbeatA continuación, verifique la partición DRBD montada con el siguiente comando en Node1:
sudo mount | grep drbdDebería ver la siguiente salida:
/dev/drbd0 on /var/lib/mysql type ext4 (rw,noatime,data=ordered)A continuación, verifique que la IP flotante solo esté vinculada a Node1 con el siguiente comando:
sudo ip addr show | grep 192.168.0.103Debería ver la siguiente salida:
inet 192.168.0.103/24 brd 192.168.0.255 scope global secondary eth1:0Instalar y configurar MariaDB
Una vez que todo esté configurado correctamente en ambos nodos, es hora de instalar el servidor MariaDB en ambos nodos.
Ejecute el siguiente comando en ambos nodos para instalar el servidor MariaDB:
sudo apt-get install mariadb-server -yA continuación, necesitará deshabilitar el servicio de MariaDB en ambos nodos:
sudo systemctl disable mysqlAquí, utilizaremos Node1 como primario y las bases de datos en Node2 deben ser creadas y pobladas a través de la sincronización con Node1. Así que necesitará detener el servicio de MariaDB y eliminar el contenido dentro de /var/lib/mysql en Node2. Puede hacer esto con el siguiente comando:
sudo systemctl stop mysql
sudo rm -rf /var/lib/mysql/*A continuación, necesitará copiar el archivo de configuración de mantenimiento de MySQL de Node1 a Node2. Puede hacer esto ejecutando el siguiente comando:
sudo scp /etc/mysql/debian.cnf [email protected]:/etc/mysql/debian.cnfA continuación, necesitará crear un usuario root para la gestión remota y el acceso a las bases de datos en la instancia de MySQL altamente disponible.
Puede hacer esto ejecutando el siguiente comando en Node1:
mysql -u root -pIngrese su contraseña de root, luego cree un usuario root con el siguiente comando:
MariaDB [(none)]> CREATE USER 'root'@'192.168.0.%' IDENTIFIED BY 'contraseña';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.0..%' WITH GRANT OPTION;
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> QUIT;A continuación, establezca la dirección de enlace para MySQL en ambos nodos con el siguiente comando:
sudo sed -i 's/127.0.0.1/0.0.0.0/g' /etc/mysql/mariadb.conf.d/*.cnfIniciar Heartbeat para el servicio de MariaDB
A continuación, necesitará agregar el servicio de MariaDB en sus instancias de heartbeat en ambos nodos. Puede hacer esto editando el archivo /etc/ha.d/haresources:
sudo nano /etc/ha.d/haresourcesModifique las siguientes líneas:
Node1 192.168.0.103/24 drbddisk::r0 Filesystem::/dev/drbd0::/var/lib/mysql::ext4::noatime mysqlGuarde y cierre el archivo cuando haya terminado.
Una vez que el heartbeat esté configurado, necesitará reiniciarlo en ambos nodos.
Primero, reinicie heartbeat en Node1:
sudo systemctl restart heartbeatA continuación, espere 50 segundos, luego reinicie el servicio de heartbeat en Node2:
sudo systemctl restart heartbeatProbar Heartbeat y DRBD
Ahora, todo está configurado correctamente, es hora de realizar una serie de pruebas para verificar que heartbeat realmente activará una transferencia del servidor activo al servidor pasivo cuando el servidor activo falle de alguna manera.
Primero, verifique que Node1 sea el nodo primario de drbd con el siguiente comando en Node1:
sudo cat /proc/drbdDebería ver la siguiente salida:
version: 8.4.5 (api:1/proto:86-101)
srcversion: F446E16BFEBS8B115AJB14H
O cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
ns:22764644 nr:256 dw:529232 dr:22248299 al:111 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0A continuación, verificaremos que el disco DRBD esté montado con el siguiente comando:
sudo mount | grep drbd/dev/drbd0 on /var/lib/mysql type ext4 (rw,noatime,data=ordered)A continuación, verifique el servicio de MariaDB con el siguiente comando:
sudo systemctl status mysqlA continuación, acceda al servidor MariaDB desde la máquina remota utilizando la IP flotante y cree una base de datos de prueba:
mysql -h 192.168.0.103 -u root -pMariaDB [(none)]> create database test;
MariaDB [(none)]> quitA continuación, reinicie heartbeat en Node1:
sudo systemctl restart heartbeatAhora, heartbeat interpretará este reinicio como una falla de MariaDB en Node1 y debería activar el failover para hacer de Node2 el servidor primario.
Puede verificar que DRBD ahora está tratando a Node1 como el servidor secundario con el siguiente comando en Node1:
sudo cat /proc/drbdDebería ver la siguiente salida:
version: 8.4.5 (api:1/proto:86-101)
srcversion: F446E16BFEBS8B115AJB14H
0: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r-----
ns:22764856 nr:388 dw:529576 dr:22248303 al:112 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0Ahora, verifique que Node2 sea el nodo primario de drbd ejecutando el siguiente comando en Node2:
sudo cat /proc/drbdDebería ver la siguiente salida:
version: 8.4.5 (api:1/proto:86-101)
srcversion: F446E16BFEBS8B115AJB14H
0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
ns:412 nr:20880892 dw:20881304 dr:11463 al:7 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0A continuación, verifique que MariaDB esté ejecutándose en Node2:
sudo systemctl status mysqlAhora, conéctese al servidor MariaDB utilizando la IP flotante en Node2 desde un usuario remoto.
mysql -h 192.168.0.103 -u root -pA continuación, vea la base de datos de prueba que creamos anteriormente mientras Node1 era el servidor primario.
MariaDB [(none)]> show databases;Debería ver la siguiente salida:
+--------------------+
| Database |
+--------------------+
| test |
| information_schema |
| lost+found |
| mysql |
| performance_schema |
+--------------------+
5 rows in set (0.04 sec)Recibe nuevas publicaciones en tu bandeja de entrada.
No spam. Cancela la suscripción en cualquier momento.