GNU/Linux >> Tutoriales Linux >  >> Ubuntu

Cómo configurar la alta disponibilidad de MariaDB con Heartbeat y DRBD en Ubuntu 16.04 LTS

Tanto Heartbeat como DRBD se utilizan para una solución de clúster para cualquier aplicación que utilice dos servidores. Ambos servidores funcionan en modo activo y pasivo, un servidor funcionará al mismo tiempo y otro servidor como servidor de respaldo. DRBD (dispositivo de bloque replicado distribuido) 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 que un servidor Linux principal y uno de respaldo determinen si el otro está "vivo" y, si el principal no lo está, permite la conmutación por error de los recursos al respaldo. También gestionará la alta disponibilidad de IP y otros servicios en sus servidores.

En este tutorial, aprenderemos cómo lograr una alta disponibilidad de MariaDB utilizando Heartbeat y DRBD en el servidor Ubuntu 16.04.

Requisitos

  • Dos nodos con servidor Ubuntu 16.04 instalado.
  • Dos tarjetas de red instaladas en cada nodo.
  • Disco duro adicional sin particiones instalado en cada nodo.
  • Usuario no root con configuración de privilegios sudo en cada nodo.

Cómo empezar

Antes de comenzar, deberá configurar la dirección IP en cada nodo. Utilice 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 deberá configurar el nombre de host y la resolución del nombre de host en cada nodo. Entonces cada nodo puede comunicarse entre sí. En el primer nodo, abra el archivo /etc/hosts y el archivo /etc/hostname:

sudo nano /etc/hosts

Agregue las siguientes líneas al final del archivo:

172.16.0.1  Node1
172.16.0.2  Node2
sudo nano /etc/hostname

Cambie 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/hosts

Agregue las siguientes líneas al final del archivo:

172.16.0.1  Node1
172.16.0.2  Node2
sudo nano /etc/hostname

Cambie 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 -y

Una vez que su sistema esté actualizado, reinícielo para aplicar estos cambios.

Instalar DRBD y Heartbeat

A continuación, deberá instalar DRBD y Heartbeat en ambos nodos. De forma predeterminada, 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 -y

A continuación, inicie el servicio DRBD y Heartbeat y habilítelos para que se inicien en el momento del arranque:

sudo systemctl start drbd
sudo systemctl start heartbeat
systemctl enable drbd
systemctl enable heartbeat

Configurar DRBD y Heartbeat

A continuación, deberá configurar el dispositivo DRBD en cada nodo. Cree una única partición en la segunda unidad sin particiones /dev/sdb en cada nodo.

Puede hacerlo simplemente ejecutando el siguiente comando en cada nodo:

sudo echo -e 'n\np\n1\n\n\nw' | fdisk /dev/sdb

A continuación, deberá configurar DRBD en ambos nodos. Puede hacerlo creando el archivo /etc/drbd.d/r0.res en cada nodo.

sudo nano /etc/drbd.d/r0.res

Agregue 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.cf

Agregue las siguientes líneas:

# Check Interval
keepalive 1
# Time before server declared dead
deadtime 10
# Secondary wait delay at boot
initdead 60
# Auto-failback
auto_failback off
# Heartbeat Interface
bcast eth1
# Nodes to monitor
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/haresources

Agregue 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 de coma flotante, /var/lib/mysql es un punto de montaje y /dev/drbd0 es un dispositivo DRBD.

A continuación, deberá definir y almacenar claves de autorización idénticas en ambos nodos. Puede hacerlo mediante el archivo /etc/ha.d/authkeys en cada nodo:

sudo nano /etc/ha.d/authkeys

Agregue las siguientes líneas:

auth1
1 sha1 your-secure-password

Aquí, su contraseña segura es su contraseña segura. Utilice la misma contraseña en ambos nodos.

A continuación, cree e inicie DRBD ejecutando el siguiente comando en el Nodo1:

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/mysql

Una vez que se crea el disco DRBD en el Nodo1, cree el disco DRBD en el Nodo2 con el siguiente comando:

sudo drbdadm create-md r0
sudo systemctl restart drbd
sudo chmod 600 /etc/ha.d/authkeys
sudo mkdir /var/lib/mysql

Ahora, puede verificar que el disco DRBD esté conectado y sincronizado correctamente ejecutando el siguiente comando:

sudo cat /proc/drbd

Si todo está bien, debería ver el siguiente resultado:

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 conmutación por error de su configuración.

sudo systemctl start heartbeat

A continuación, verifique la partición DRBD montada con el siguiente comando en el Nodo1:

sudo mount | grep drbd

Debería ver el siguiente resultado:

/dev/drbd0 on /var/lib/mysql type ext4 (rw,noatime,data=ordered)

A continuación, verifique que la IP flotante solo esté vinculada al Nodo1 con el siguiente comando:

sudo ip addr show | grep 192.168.0.103

Debería ver el siguiente resultado:

inet 192.168.0.103/24 brd 192.168.0.255 scope global secondary eth1:0

Instalar 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 -y

A continuación, deberá deshabilitar el servicio MariaDB en ambos nodos:

sudo systemctl disable mysql

Aquí, usaremos el Nodo1 como principal y las bases de datos en el Nodo2 deben crearse y completarse a través de la sincronización con el Nodo1. Por lo tanto, deberá detener el servicio MariaDB y eliminar el contenido dentro de /var/lib/mysql en Node2. Puedes hacer esto con el siguiente comando:

sudo systemctl stop mysql
sudo rm -rf /var/lib/mysql/*

A continuación, deberá copiar el archivo de configuración de mantenimiento de MySQL del Nodo1 al Nodo2. Puede hacerlo ejecutando el siguiente comando:

sudo scp /etc/mysql/debian.cnf [email protected]:/etc/mysql/debian.cnf

A continuación, deberá crear un usuario raíz para la administración remota y el acceso a las bases de datos en la instancia de MySQL de alta disponibilidad.

Puede hacerlo ejecutando el siguiente comando en el Nodo1:

mysql -u root -p

Ingrese su contraseña raíz, luego cree un usuario raíz con el siguiente comando:

MariaDB [(none)]> CREATE USER 'root'@'192.168.0.%' IDENTIFIED BY 'password';
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/*.cnf

Iniciar Heartbeat para el servicio MariaDB

A continuación, deberá agregar el servicio MariaDB en sus instancias de latido en ambos nodos. Puede hacerlo editando el archivo /etc/ha.d/haresources:

sudo nano /etc/ha.d/haresources

Modifique las siguientes líneas:

Node1 192.168.0.103/24 drbddisk::r0 Filesystem::/dev/drbd0::/var/lib/mysql::ext4::noatime mysql

Guarde y cierre el archivo cuando haya terminado.

Una vez configurado el latido, deberá reiniciarlo en ambos nodos.

Primero, reinicie heartbea en Node1:

sudo systemctl restart heartbeat

A continuación, espere 50 segundos y reinicie el servicio de latidos en el nodo 2:

sudo systemctl restart heartbeat

Prueba Heartbeat y DRBD

Ahora que todo está configurado correctamente, es el momento de realizar una serie de pruebas para verificar que Heartbeat activará una transferencia del servidor activo al servidor pasivo cuando el servidor activo falle de alguna manera.

Primero, verifique que el Nodo1 sea el nodo drbd principal con el siguiente comando en el Nodo1:

sudo cat /proc/drbd

Debería ver el siguiente resultado:

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:0

A 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 MariaDB con el siguiente comando:

sudo systemctl status mysql

A continuación, acceda al servidor MariaDB desde la máquina remota usando una IP flotante y cree una base de datos de prueba:

mysql -h 192.168.0.103 -u root -p
MariaDB [(none)]> create database test;
MariaDB [(none)]> quit

A continuación, reinicie Heartbeat en Node1:

sudo systemctl restart heartbeat

Ahora, Heartbeat interpretará este reinicio como una falla de MariaDB en el Nodo 1 y debería activar la conmutación por error para convertir al Nodo 2 en el servidor principal.

Puede verificar que DRBD ahora está tratando al Nodo1 como el servidor secundario con el siguiente comando en el Nodo1:

sudo cat /proc/drbd

Debería ver el siguiente resultado:

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:0

Ahora, verifique que Node2 sea el nodo drbd principal ejecutando el siguiente comando en Node2:

sudo cat /proc/drbd

Debería ver el siguiente resultado:

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:0

A continuación, compruebe que MariaDB se esté ejecutando en el Nodo2:

sudo systemctl status mysql

Ahora, conéctese al servidor MariaDB usando una IP flotante en Node2 desde un usuario remoto.

mysql -h 192.168.0.103 -u root -p

A continuación, vea la base de datos de prueba que creamos anteriormente mientras el Nodo1 era el servidor principal.

MariaDB [(none)]> show databases;

Debería ver el siguiente resultado:

 +--------------------+
| Database |
+--------------------+
| test |
| information_schema |
| lost+found |
| mysql |
| performance_schema |
+--------------------+
5 rows in set (0.04 sec)

Ubuntu
  1. Cómo instalar MariaDB en Ubuntu 20.04 LTS

  2. Cómo configurar el servidor y el cliente Kerberos en Ubuntu 18.04 LTS

  3. Cómo instalar Seafile con Nginx en Ubuntu 20.04 LTS

  4. Cómo configurar la alta disponibilidad de Nginx con Pacemaker, Corosync y Crmsh en Ubuntu 16.04

  5. Cómo instalar Wordpress con Nginx, MariaDB y HHVM en Ubuntu 16.04 LTS

Cómo configurar y usar Google Drive en Ubuntu 22.04 LTS

Cómo instalar Lighttpd con PHP y MariaDB en Ubuntu 15.04

Cómo instalar Lighttpd con PHP y MariaDB en Ubuntu 16.04 LTS

Cómo instalar Lighttpd con MariaDB y PHP en Ubuntu 18.04 LTS

Cómo instalar Lighttpd, PHP y MariaDB en Ubuntu 20.04 LTS

Cómo configurar el servidor y el cliente NTP en Ubuntu 20.04 LTS