Banco de Dados · 9 min read · Dec 07, 2025

Como Configurar Alta Disponibilidade do MariaDB com Heartbeat e DRBD no Ubuntu 16.04 LTS

Heartbeat e DRBD são usados para uma solução de cluster para qualquer aplicação usando dois servidores. Ambos os servidores funcionam em modo ativo e passivo, um servidor funcionará ao mesmo tempo e o outro servidor como servidor de backup. DRBD (Distributed Replicated Block Device) é um serviço de nível de kernel que sincroniza dados entre dois servidores em tempo real. Heartbeat é um programa de código aberto que permite que um servidor Linux primário e um de backup determinem se o outro está “vivo” e, se o primário não estiver, transfira recursos para o backup. Ele também gerenciará a alta disponibilidade de IP e outros serviços em seus servidores.

Neste tutorial, aprenderemos como alcançar alta disponibilidade do MariaDB usando Heartbeat e DRBD no servidor Ubuntu 16.04.

Requisitos

  • Dois nós com o servidor Ubuntu 16.04 instalado.
  • Duas placas de rede instaladas em cada nó.
  • Disco rígido adicional não particionado instalado em cada nó.
  • Usuário não root com privilégios sudo configurado em cada nó.

Começando

Antes de começar, você precisará configurar o endereço IP em cada nó. Use o seguinte endereço IP em cada nó:

Node1 :

172.16.0.1 na eth0 e 192.168.0.101 na eth1

Node2 :

172.16.0.2 na eth0 e 192.168.0.102 na eth1

O IP 192.168.0.103 será o IP de alta disponibilidade.

Em seguida, você também precisará configurar o nome do host e a resolução do nome do host em cada nó. Assim, cada nó pode se comunicar entre si. No primeiro nó, abra o arquivo /etc/hosts e o arquivo /etc/hostname:

sudo nano /etc/hosts

Adicione as seguintes linhas no final do arquivo:

172.16.0.1  Node1
172.16.0.2  Node2
sudo nano /etc/hostname

Altere o arquivo conforme mostrado abaixo:

Node1

Salve e feche o arquivo quando terminar.

No segundo nó, abra o arquivo /etc/hosts e o arquivo /etc/hostname:

sudo nano /etc/hosts

Adicione as seguintes linhas no final do arquivo:

172.16.0.1  Node1
172.16.0.2  Node2
sudo nano /etc/hostname

Altere o arquivo conforme mostrado abaixo:

Node2

Salve e feche o arquivo quando terminar.

Em seguida, atualize cada nó com a versão mais recente com o seguinte comando:

sudo apt-get update -y  
sudo apt-get upgrade -y

Uma vez que seu sistema esteja atualizado, reinicie o sistema para aplicar essas mudanças.

Instalar DRBD e Heartbeat

Em seguida, você precisará instalar o DRBD e o Heartbeat em ambos os nós. Por padrão, ambos estão disponíveis no repositório padrão do Ubuntu 16.04. Você pode instalá-los executando o seguinte comando em ambos os nós:

sudo apt-get install drbd8-utils heartbeat -y

Em seguida, inicie o serviço DRBD e Heartbeat e habilite-os para iniciar na inicialização:

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

Configurar DRBD e Heartbeat

Em seguida, você precisará configurar o dispositivo DRBD em cada nó. Crie uma única partição no segundo disco não particionado /dev/sdb em cada nó.

Você pode fazer isso executando o seguinte comando em cada nó:

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

Em seguida, você precisará configurar o DRBD em ambos os nós. Você pode fazer isso criando o arquivo /etc/drbd.d/r0.res em cada nó.

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

Adicione as seguintes linhas:

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;
}
}

Salve e feche o arquivo quando terminar, em seguida, abra outro arquivo de configuração em cada nó:

sudo nano /etc/ha.d/ha.cf

Adicione as seguintes linhas:

# 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

Salve e feche o arquivo.

Em seguida, abra o arquivo de recursos /etc/ha.d/haresources em cada nó:

sudo nano /etc/ha.d/haresources

Adicione as seguintes linhas:

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

Aqui, Node1 é o nome do host do seu nó ativo principal, 192.168.0.103 é o endereço IP flutuante, /var/lib/mysql é um ponto de montagem e /dev/drbd0 é o dispositivo DRBD.

Em seguida, você precisará definir e armazenar chaves de autorização idênticas em ambos os nós. Você pode fazer isso no arquivo /etc/ha.d/authkeys em cada nó:

sudo nano /etc/ha.d/authkeys

Adicione as seguintes linhas:

auth1
1 sha1 sua-senha-segura

Aqui, sua-senha-segura é sua senha segura. Use a mesma senha em ambos os nós.

Em seguida, crie e inicie o DRBD executando o seguinte comando no 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/mysql

Uma vez que o disco DRBD é criado no Node1, crie o disco DRBD no Node2 com o seguinte comando:

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

Agora, você pode verificar se o disco DRBD está conectado e sincronizando corretamente executando o seguinte comando:

sudo cat /proc/drbd

Se tudo estiver bem, você deve ver a seguinte saída:

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

Em seguida, inicie o heartbeat em ambos os nós para habilitar a parte de failover da sua configuração.

sudo systemctl start heartbeat

Em seguida, verifique a partição DRBD montada com o seguinte comando no Node1:

sudo mount | grep drbd

Você deve ver a seguinte saída:

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

Em seguida, verifique se o IP flutuante está vinculado apenas ao Node1 com o seguinte comando:

sudo ip addr show | grep 192.168.0.103

Você deve ver a seguinte saída:

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

Instalar e Configurar o MariaDB

Uma vez que tudo esteja configurado corretamente em ambos os nós, é hora de instalar o servidor MariaDB em ambos os nós.

Execute o seguinte comando em ambos os nós para instalar o servidor MariaDB:

sudo apt-get install mariadb-server -y

Em seguida, você precisará desabilitar o serviço MariaDB em ambos os nós:

sudo systemctl disable mysql

Aqui, usaremos o Node1 como primário e os bancos de dados no Node2 devem ser criados e populados através da sincronização com o Node1. Portanto, você precisará parar o serviço MariaDB e remover o conteúdo dentro de /var/lib/mysql no Node2. Você pode fazer isso com o seguinte comando:

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

Em seguida, você precisará copiar o arquivo de configuração de manutenção do MySQL do Node1 para o Node2. Você pode fazer isso executando o seguinte comando:

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

Em seguida, você precisará criar um usuário root para gerenciamento remoto e acesso aos bancos de dados na instância MySQL altamente disponível.

Você pode fazer isso executando o seguinte comando no Node1:

mysql -u root -p

Digite sua senha root, em seguida, crie um usuário root com o seguinte comando:

MariaDB [(none)]> CREATE USER 'root'@'192.168.0.%' IDENTIFIED BY 'senha';  
MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.0..%' WITH GRANT OPTION;  
MariaDB [(none)]> FLUSH PRIVILEGES;  
MariaDB [(none)]> QUIT;

Em seguida, defina o endereço de ligação para o MySQL em ambos os nós com o seguinte comando:

sudo sed -i 's/127.0.0.1/0.0.0.0/g' /etc/mysql/mariadb.conf.d/*.cnf

Iniciar Heartbeat para o Serviço MariaDB

Em seguida, você precisará adicionar o serviço MariaDB nas suas instâncias de heartbeat em ambos os nós. Você pode fazer isso editando o arquivo /etc/ha.d/haresources:

sudo nano /etc/ha.d/haresources

Modifique as seguintes linhas:

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

Salve e feche o arquivo, quando terminar.

Uma vez que o heartbeat esteja configurado, você precisará reiniciá-lo em ambos os nós.

Primeiro, reinicie o heartbeat no Node1:

sudo systemctl restart heartbeat

Em seguida, aguarde 50 segundos e reinicie o serviço heartbeat no Node2:

sudo systemctl restart heartbeat

Testar Heartbeat e DRBD

Agora, tudo está configurado corretamente, é hora de realizar uma série de testes para verificar se o heartbeat realmente acionará uma transferência do servidor ativo para o servidor passivo quando o servidor ativo falhar de alguma forma.

Primeiro, verifique se o Node1 é o nó primário do drbd com o seguinte comando no Node1:

sudo cat /proc/drbd

Você deve ver a seguinte saída:

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

Em seguida, verificaremos se o disco DRBD está montado com o seguinte comando:

sudo mount | grep drbd
/dev/drbd0 on /var/lib/mysql type ext4 (rw,noatime,data=ordered)

Em seguida, verifique o serviço MariaDB com o seguinte comando:

sudo systemctl status mysql

Em seguida, acesse o servidor MariaDB a partir da máquina remota usando o IP flutuante e crie um banco de dados de teste:

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

Em seguida, reinicie o heartbeat no Node1:

sudo systemctl restart heartbeat

Agora, o heartbeat interpretará essa reinicialização como uma falha do MariaDB no Node1 e deverá acionar o failover para tornar o Node2 o servidor primário.

Você pode verificar que o DRBD agora está tratando o Node1 como o servidor secundário com o seguinte comando no Node1:

sudo cat /proc/drbd

Você deve ver a seguinte saída:

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

Agora, verifique se o Node2 é o nó primário do drbd executando o seguinte comando no Node2:

sudo cat /proc/drbd

Você deve ver a seguinte saída:

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

Em seguida, verifique se o MariaDB está em execução no Node2:

sudo systemctl status mysql

Agora, conecte-se ao servidor MariaDB usando o IP flutuante no Node2 a partir do usuário remoto.

mysql -h 192.168.0.103 -u root -p

Em seguida, visualize o banco de dados de teste que criamos anteriormente enquanto o Node1 era o servidor primário.

MariaDB [(none)]> show databases;

Você deve ver a seguinte saída:

 +--------------------+
| Database           |
+--------------------+
| test               |
| information_schema |
| lost+found         |
| mysql              |
| performance_schema  |
+--------------------+
5 rows in set (0.04 sec)
Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.