Problemas conhecidos
Split-Brain
Este problema ocorre quando ambas as máquinas são carregadas de maneira isolada, não havendo conectividade entre os recursos. Com isso, as máquinas não conseguem conectar os devices ao recursos sincronizador.
Para solucionar esse problema é necessário limpar os dados de conexão do recurso em um dos nós.
Na máquina slave, execute:
# drbdadm secondary nome_do_recurso
# drbdadm -- --discard-my-data connect nome_do_recurso
Explicando: O primeiro comando transformará o recurso em secundário, em seguida você descarta os dados de conexão do recurso.
Na máquina master, execute:
# /etc/init.d/drbd stop
# /etc/init.d/drbd start
# drbdadm primary nome_do_recurso
ADD-ON
Para um melhor gerenciamento do sistema DRBD em relação a montagem do volume nas duas máquinas, nós criamos um script que irá gerenciar a montagem dos devices, onde o mesmo será gerenciado pelo heartbeat.
Esse script será utilizado para transformar o nodo que está em operação em primário, além de montar, no nosso exemplo, o /dev/drbd2. Quando o nodo que está em operação cair, o outro nodo assume. Nesse caso, o heartbeat utilizará esse script para transformar esse nodo em secundário no DRBD e desmontar o device. Com isso, o nodo que assumiu faz o processo inverso, transformado o DRBD em primário e montando o device.
Vamos ao script:
# vi /etc/init.d/drbd.ha
#!/bin/bash
#
DRBDADM="/sbin/drbdadm"
MODPROBE="/sbin/modprobe"
RMMOD="/sbin/rmmod"
MOUNT="/bin/mount"
UMOUNT="/bin/umount"
case "$1" in
start)
echo -n "Starting all DRBD devices: "
$DRBDADM primary all
$MOUNT /dev/drbd2 /srv
echo "Done."
;;
stop)
echo -n "Stopping all DRBD devices: "
$UMOUNT /dev/drbd2
$DRBDADM secondary all
echo "Done."
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
;;
esac
exit 0
Não esqueça de dar permissão de execução ao script:
# chmod +x /etc/init.d/drbd.ha
E de incluir a chamada do mesmo no arquivo do heartbeat.
# vi haresources
master \
IPaddr2::192.168.1.240/24/eth0/192.168.1.255 \
apache2 drbd.ha
Finalizado, reinicie o serviço heartbeat.
# /etc/init.d/heartbeat stop
# /etc/init.d/heartbeat start
NOTA: Isso poderá fazer com que a máquina slave assuma a master, pois você está paralisando o heartbeat.