INSTALANDO E CONFIGURANDO DRBD – DEBIAN

ENTENDA O DRBD

DRBD significa Distributed Replicated Block Device, e ele serve exatamente para isso, fazer replicação de partições via rede, também chamado as vezes de RAID de rede, é bastante usado em ambiente de cluster como por exemplo dois nodes replicando uma ou mais partições.

Basicamente o DRBD funciona da seguinte forma, ele cria um dispositivo virtual que será conectados entre os nodes do cluster como uma partição replicando os dados, esse dispositivo precisa ser formatado com um sistema de arquivo, o tipo desse sistema de arquivo pode ser qualquer um, porém, pode ser aconselhado algum especifico dependendo do modo do recurso.

O recurso é definido nos arquivos de extensão .res, possuem basicamente a informação do dispositivo que serão sincronizado, seu nome, os nós que trabalharão juntos, entre outras informações.

Esses recurso podem trabalhar no modo primário único e modo primário duplo. No modo primário único, se tivermos dois nós, um deles será o primário e outro secundário(os dados/informações na partição são sempre sincronizadas entre o nó primário e secundário mas o recurso fica disponível apenas para o primário, este modo é o padrão do DRBD). No modo primário duplo os dois nós serão como primário.

Duas coisas precisam ser esclarecidas, que confunde muitas vezes:

  • No modo primário único você não conseguirá montar a partição do DRBD nos dois nós simultaneamente, irá dar erro no secundário(pois o recurso só fica disponível para o primário nó).
  • No modo primário único caso você tenha montado a partição no primário e este nó fique indisponível a partição não irá aparecer montada “automágicamente” no secundário, para que isso acontece neste modo, você precisa usar uma ferramente a parte como por exemplo heartbeat.

Entenda melhor o funcionamento do DRBD aqui ou aqui.

CENÁRIO

  • Nodes: Debian 10
  • DRBD 9.5
  • KVM para os Nodes

Temos um nó chamado NODE1 que será o primário, ele possui o IP na LAN 192.168.77.10, e também o IP 192.168.33.1 na interface que como podem perceber está exclusivamente conectada no outro host. Outra informação relevante para esse nó é que a partição que será usada para replicar é a /dev/vdb1, a virtual que será montada em cima dela e assim visualizada nos dois nós será /dev/drbd0.

Temos o nó chamado NODE2, que será o secundário, IP na LAN 192.168.77.12, também com IP 192.168.33.2 no interface exclusiva. Possui também o mesmo nome de dispositivo local chamado /dev/vdb1, por coincidência, poderia nesse caso ser nome diferente, o que não poderia ser nomes diferentes é a partição virual que no caso obviamente é a mesma chamada /dev/drbd0 porque de fato é a mesma.

INSTALAÇÃO

apt install drbd-utils

ENTENDA OS ARQUIVOS DE CONFIGURAÇÃO

Com a versão do DRBD 9.5 e Debian 10, tive os seguintes arquivos como padrão de instalação:

ARQUIVO /etc/drbd.conf

Abaixo o conteúdo padrão:

include "drbd.d/global_common.conf";                                                                    
include "drbd.d/*.res";

Essas linhas abaixo fazem a seguinte referencia:

  • primeira linha: informa que deve ser incluído nesse arquivo drbd.conf o arquivo /etc/drbd.d/global_common.conf, nele teremos as entradas que farão ajustes globais no drbd como startup, disk dos nodes, network, modo de replicação entre outros.
  • segunda linha: informa que deve ser incluídos todos os arquivo da pasta /etc/drbd.d que terminem com .res, esses arquivos se referem a recursos e por padrão não existirá nenhum mas será preciso criar para que o DRBD funcione.

ARQUIVO /etc/drbd.d/global_common.conf

Como disse acima, ele contém as entradas padrões do DRBD, ele substitui que existam no arquivo /etc/drbd.conf. Agora entenda, o arquivo drbd.conf é o padrão, então você pode colocar tudo que tiver em global_common.conf e arquivos que terminem com a extensão .res diretamente nele, mas é mais organizado que seja dividido como é o seu padrão mesmo.

ARQUIVOS EXTENSÃO .RES

Esses arquivos ainda não existem, mas deverão ser criados futuramente, eles são referentes aos recursos.

CONFIGURANDO O DRBD

STEP 1: PARTIÇÕES

Primeiramente você precisa deixar já separada a partição nos nodes que serão sincronizadas. Não deve conter filesystem.

STEP 2: INTERFACE DE REDE DEDICADA (OPCIONAL)

Além da interface de rede dos nodes que se tem para o gateway da rede, é recomendado que se tenha uma interface de rede física dedicada somente para a comunicação entre os nodes. No meu cenário é a rede de faixa 192.168.33.0/30

STEP 3: FILE HOSTS

Ajuste os arquivos /etc/hosts de cada node do cluster para que se comuniquem adequadamente.

Exemplo abaixo no meu arquivo /etc/hosts do node1:

127.0.0.1     localhost
192.168.10.1  node1
192.168.10.2  node2 

Ajuste no node 2 com os devidos IPs, realize teste de ping para validar se está resolvendo.

STEP 4: FILE GLOBAL_COMMON.CONF

No arquivo de configuração global_common.conf existem as seguintes sessões:

global{   }
common {
  handler{   }
  startup{  }
  options{  }
  disk{  }
  net{  }
}

Dentro de cada {}, temos várias opções possíveis, obrigatoriamente não precisei setar nenhuma, porém adicione algumas delas seguem a seguir.

Adicionei no campo net{} as linhas abaixo, elas habilitam uma chave/senha de comunicação entre os nodes.

net {
  cram-hmac-alg sha1;
  shared-scret "senha";
}

Quando o DRBD é iniciado (geralmente no momento da inicialização), ele tenta se conectar ao outro lado. Se o outro lado está morto, não queremos que fique para sempre tentando se comunicar, portanto definimos também as seguintes opções no campo startup {}:

startup {
  wfc-timeout 30;
  degr-wfc-timeout 15;
}
  • wfc-timeout” define quantos segundos ele espera pelo outro lado em uma inicialização “normal”.
  • “degr-wfc-timeout” é quanto tempo o DRBD aguarda se ele era o único nó em funcionamento anteriormente (ou seja, o cluster está “degradado”).

STEP 5: CONFIGURANDO RECURSOS

Para criar nosso recurso, crie o arquivo /etc/drbd.d/r0.res e adicione os campos abaixo. Lembre-se de criar este arquivo de maneira igual em todos os nós do cluster.

resource r0 {
  volume 0 {
    device    /dev/drbd0;
    disk      /dev/vdb1;
    meta-disk internal;
  }
  on node1 {
    address   10.1.1.31:7789;
  }
  on node2 {
    address   10.1.1.32:7789;
  }
}

Explicando:

  • resource r0 {}: iniciamos a declaração do recurso, chamando ele de r0, este nome é importante, mas não é obrigado usar essa nomenclatura;
  • volume0 {}: primeiro volume criado referenciando drbd0, como só temos esse volume nem precisa dessa chave volume{}, os parâmetros dentro dele poderiam estar fora, no caso apenas dentro de r0 {}
  • device /dev/drbd0: nome do dispositivo de bloco virtual que será criado pelo DRBD;
  • disk /dev/vdb1: partição real dentro do SO que será usado associado ao dispositivo virtual do DRBD chamado drbd0 explicado acima;
  • on node1 {} : node1 é o hostname do node1, este nome depende de cada cenário, e on declaro o nó;
  • address IP:PORT: endereço que o nó irá escutar para saber se algum nó está disponível ou offline, o IP do nó no seu cenário e a porta é 7789 no meu caso. O DRBD usa duas conexões TCP para cada recurso configurado, duas portas a partir da 7788. Para a funcionalidade DRBD adequada, é necessário que essas conexões sejam permitidas pela sua configuração de firewall. Se estiver usando alguma distro que sa SeLinux verifique para liberar nele também.
  • on node 2 {}: como segundo nó declarado, será tratado como secundário pelo recurso;

STEP 6: INICIANDO DRBD 8

iniciamos os metadados:

drbdadm create-md <resource>

Iniciamos o recursoe volumes:

drbdadm up <resource>

Monitorando como o comando abaixo:

watch cat /proc/drbd

Até agora, o DRBD alocou com êxito os recursos de disco e de rede e está pronto para operação. O que ainda não sabemos é qual dos nós deve ser usado como a fonte da sincronização inicial do dispositivo.

Como o comando abaixo definimos quem será o primary no recurso, faça isso no node que já estiver com dados ou não:

drbdadm primary --force <resource>

STEP 6: INICIANDO DRBD 9

Primeiramente paramos o serviço caso esteja rodando, seguida com o comando “drbdadm create-md” criamos os metadados do recurso(isso é necessário quando se inicia o recurso pela primeira vez). Depois anexamos o recurso chamado r0 (lembrando que pode ser no seu cenário outro nome, este nome foi configura em r0.res)

systemctl stop drbd
drbdadm create-md r0
drbdadm attach r0

Iniciamos o serviço:

systemctl start drbd

Em seguida no nó primário executamos esse comando abaixo, para defini-lo como primário:

drbdadm --- --overwrite-data-of-peer primary all

Feito isso, agora deve estar tudo pronto, o dispositivo /dev/drbd0 é uma unidade zerada, precisa agora definir um filesystem,

STEP 7: DEFININDO SYSTEMFILE

Abaixo configuramos como ext4 e podemos em seguida montar onde preferir com o comando mount.

mkfs.ext4 /dev/drbd0
mkdir /pasta
mount /dev/drbd0 /pasta

VALIDANDO STATUS

Verifique em cada nó executando o comando abaixo para saber como está a sincronização. Você pode omitir o nome do recurso (abaixo como r0) ou digitar all, para que o comando mostre todos os recursos.

drbdadm status r0
  • r0 role: Primary -> ela diz que o está nó está como primary para o recurso chamado r0;
  • disk: UpToDate -> diz que o disco está com o status UpToDate, ou seja, atualizado e normal;
  • replication: Established peer-disk:UpToDate -> aqui diz que a comunicação com o secundário está normal e que seu disco também está sincronizado.

Você pode ver apenas o status dos discos com o comando abaixo:

drbdadm dstate <recurso>
UpToDate/UpToDate

As saídas desse comando podem ser:

DUnknown Este estado é usado para o disco ponto a ponto se nenhuma conexão de rede estiver disponível. 
Consistent Dados consistentes de um nó sem conexão. Quando a conexão é estabelecida, é decidido se os dados estão atualizados ou desatualizados.
UpToDate Estado consistente e atualizado dos dados. Este é o estado normal.

Outros estados do disco podem ser visto na documentação e aqui.

TROUBLESHOOTING

Caso tenho uma falha de sincronismo, ou o comado “drbdadm status” não esteja mostrando as linhas do peer secundário ou primário, tente isso abaixo.

No nó primário:

drbdadm connect all

No nó secundário:

drbdadm disconnect all
drbdadm --- --discard-my-data connect all

SIMULANDO FALHA

Para testar a sincronização para o secundário, se tiver apenas com drbd você precisa fazer os passos abaixo, basicamente desmontar a unidade do primário e rebaixá-lo para secundário, em seguida subir o secundário como primário e depois montar a unidade e checar os arquivos.

No servidor principal, desmonte e rebaixe:

umount /pasta
drbdadm secondary r0

No secundário, torne-o primário depois monte:

sudo drbdadm primary r0
sudo mount /dev/drbd0 /srv

FONTES

Install and configure DRBD on Debian 10

https://www.linbit.com/drbd-user-guide/users-guide-9-0/#s-drbdadm-status

https://help.ubuntu.com/lts/serverguide/drbd.html

http://www.bfnetworks.com.br/wp-admin/post.php?post=1310&action=edit

Marcado com , ,