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/hostsAdicione as seguintes linhas no final do arquivo:
172.16.0.1 Node1
172.16.0.2 Node2
sudo nano /etc/hostnameAltere 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/hostsAdicione as seguintes linhas no final do arquivo:
172.16.0.1 Node1
172.16.0.2 Node2
sudo nano /etc/hostnameAltere 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 -yUma 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 -yEm 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 heartbeatConfigurar 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/sdbEm 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.resAdicione 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.cfAdicione 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/haresourcesAdicione 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/authkeysAdicione 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/mysqlUma 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/mysqlAgora, você pode verificar se o disco DRBD está conectado e sincronizando corretamente executando o seguinte comando:
sudo cat /proc/drbdSe 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 heartbeatEm seguida, verifique a partição DRBD montada com o seguinte comando no Node1:
sudo mount | grep drbdVocê 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.103Você deve ver a seguinte saída:
inet 192.168.0.103/24 brd 192.168.0.255 scope global secondary eth1:0Instalar 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 -yEm seguida, você precisará desabilitar o serviço MariaDB em ambos os nós:
sudo systemctl disable mysqlAqui, 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.cnfEm 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 -pDigite 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/*.cnfIniciar 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/haresourcesModifique 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 heartbeatEm seguida, aguarde 50 segundos e reinicie o serviço heartbeat no Node2:
sudo systemctl restart heartbeatTestar 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/drbdVocê 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:0Em 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 mysqlEm 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 -pMariaDB [(none)]> create database test;
MariaDB [(none)]> quitEm seguida, reinicie o heartbeat no Node1:
sudo systemctl restart heartbeatAgora, 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/drbdVocê 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:0Agora, verifique se o Node2 é o nó primário do drbd executando o seguinte comando no Node2:
sudo cat /proc/drbdVocê 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:0Em seguida, verifique se o MariaDB está em execução no Node2:
sudo systemctl status mysqlAgora, 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 -pEm 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)Receba novas postagens na sua caixa de entrada
Sem spam. Cancele a assinatura a qualquer momento.