Nesse post iremos falar sobre o conteúdo do resource, mas deixaremos para iniciá-lo no próximo artigo.
Não se preocupe em praticar agora; o intuito é somente vermos exemplos dos arquivos de configuração do DRBD. No próximo post veremos na prática o DRBD funcionando. Veja: DRBD: Iniciando o Resource pela Primeira Vez – Parte 007
Meu Ambiente de Laboratório
Meus servidores de testes estão assim:
SERVIDOR 01
- nome do servidor(hostname): oracle86
- IP da rede local(lan) em enp0s3: 192.168.50.3
- IP para drbd em enp0s8: 10.1.1.3
- bloco: /etc/sdb1
SERVIDOR 02
- nome do servidor(hostname): oracle86B
- IP da rede local(lan) em enp0s3: 192.168.50.4
- IP para drbd em enp0s8: 10.1.1.4
- bloco: /etc/sdb1
Será usada apenas o ip da placa de rede enp0s8.
Os discos sdb serão espelhados
Sobre o Arquivo /etc/drbd.conf
Todos os aspectos do DRBD são controlados em seu arquivo de configuração /etc/drbd.conf. Normalmente, este arquivo de configuração é apenas um esqueleto com o seguinte o simples conteúdo:
include "/etc/drbd.d/global_common.conf"; include "/etc/drbd.d/*.res";
As duas linhas acima, que estão dentro de drbd.conf, dizem para incluir o conteúdo do arquivo global_common.conf e que todo arquivo com nome terminado em .res que criarmos dentro de /etc/drbd.d/ será também embutido automaticamente.
Por convenção, /etc/drbd.d/global_common.conf contém as seções globais que afetam todo o DRBD, enquanto os arquivos .res são alterações aplicadas somente a cada resource.
Também é possível fazer tudo dentro do drbd.conf, sem que precisássemos incluir nada .res dentro de /etc/drbd.d/ e nem no global_common.conf . Fazer isso, no entanto, torna-se o arquivo drbd.conf confuso e difícil de gerenciar, com muita informação e é por isso que a abordagem de vários arquivos é a preferida.
Independentemente da abordagem empregada, você deve sempre certificar-se de que drbd.conf e quaisquer outros arquivos que ele inclua sejam exatamente idênticos em todos os nós de cluster participantes.
Vamos ver exemplos do conteúdo dos arquivos de configuração e ao final falaremos sobre cada seção.
Exemplos de Configuração
Para os fins deste tutorial, assumimos uma configuração mínima.
Configuração simples do DRBD (/etc/drbd.d/global_common.conf)
global { usage-count yes; } common { net { protocol C; } }
usage-count
Você “opta por” ser incluído nas estatísticas de uso do DRBD. É opcional.- Protocol C Os recursos são configurados para usar replicação totalmente síncrona, a menos que explicitamente especificado de outra forma.
Configuração simples de resource do DRBD (/etc/drbd.d/r0.res)
resource "r0" { device minor 1; disk "/dev/sdb1"; meta-disk internal; on "oracle86" { node-id 0; } on "oracle86B" { node-id 1; } connection { host "oracle86" address 10.1.1.3:7789; host "oracle86B" address 10.1.1.4:7789; } }
Este exemplo configura o DRBD da seguinte maneira:
- oracle86 e oracle86B Nosso cluster consiste em dois nós
- resource “r0” {…} Temos um resource chamado de r0 que usa /dev/sdb(ou disk “/dev/sdb”;) como o dispositivo de nível inferior e é configurado com metadados internos(ou meta-disk internal;).
- O resource usa a porta TCP 7789 para suas conexões de rede e vincula-se aos endereços IP 10.1.1.3 e 10.1.1.4, respectivamente.
A configuração acima cria implicitamente um volume no resource, numerado zero (0). Poderemos ver esse volume como sendo /dev/drbd0
Será esse /dev/drbd0 que colocaremos um Sistema de Arquivos que preferirmos e todo conteúdo dentro dele será espelhado(sincronizado).
Configuração de recursos DRBD de vários volumes (/etc/drbd.d/r0.res)
O resource acima usa apenas um volume. Para vários volumes em um resource, modifique a sintaxe da seguinte maneira (supondo que os mesmos dispositivos de bloco de armazenamento de nível inferior sejam usados em ambos os nós):
resource "r0" { volume 0 { device minor 1; disk "/dev/sdb1"; meta-disk internal; } volume 1 { device minor 2; disk "/dev/sdb1"; meta-disk internal; } on "oracle86" { node-id 0; } on "oracle86B" { node-id 1; volume 1 { disk "/dev/sdb1"; } } connection { host "oracle86" address 10.1.1.31:7789; host "oracle86B" address 10.1.1.32:7789; } }
A Seção Global
Existe apenas uma seção global. Normalmente esta seção está no arquivo /etc/drbd.d/global_common.conf. Se por acaso você optar em fazer toda a configuração do drbd em um único arquivo, o que não é recomendado, essa seção Global deverá está na parte de cima, logo no início. Das poucas opções disponíveis nesta seção, apenas uma é relevante para a maioria dos usuários:
- usage-count O projeto DRBD mantém estatísticas sobre o uso de várias versões do DRBD. Isso é feito entrando em contato com um servidor HTTP toda vez que uma nova versão do DRBD é instalada em um sistema. Isso pode ser desabilitado definindo “usage-count no;“. O padrão é “usage-count ask;” que irá avisá-lo toda vez que você atualizar o DRBD. As estatísticas de uso do DRBD estão, é claro, disponíveis ao público; veja: http://usage.drbd.org.
A Seção common
Esta seção fornece um método onde o que colocarmos aqui será recebido/herdado por cada resource. Normalmente é encontrado também em /etc/drbd.d/global_common.conf.
O uso de uma seção common não é estritamente necessária, mas altamente recomendada se você estiver usando mais de um recurso. Caso contrário, a configuração torna-se rapidamente complicada já que terá que colocar em cada resource a opção desejada repetidamente.
No exemplo acima, incluímos net { protocol C; } na seção common, portanto, todo resource configurado (incluindo o r0 que criamos acima) herda essa opção, a menos que tenha outra opção de protocolo configurada explicitamente. Para outros protocolos de sincronização disponíveis veja nossos artigos anteriores.
A Seção resource
Vamos postar aqui o resource que usamos acima,
Um arquivo de resource geralmente é um arquivo com qualquer nome terminado em .res, dessa forma: /etc/drbd.d/resource.res
Quando ao nome do resource, por convenção, é usado apenas letras, dígitos e o sublinhado; outros caracteres são possíveis mas não recomendados.
Cada configuração do resource também deve ter pelo menos duas subseções on host, uma para cada nó de cluster. Todas as outras definições de configuração são herdadas da seção common(se existir) ou vindas automaticamente das configurações padrão do DRBD.
Além disso, opções iguais dentro de todos os on host podem ser colocadas diretamente na seção de resource. Assim, podemos resumir e evitar repetição em nossa configuração, veja:
resource "r0" { device minor 1; meta-disk internal; disk "/dev/sdb1"; on "oracle86" { address 10.1.1.3:7789; } on "oracle86B" { address 10.1.1.4:7789; } }
Por exemplo, acima, ao invés de colocarmos disk “/dev/sdb1”; duas veze, uma em cada seção on , colocamos apenas uma vez logo no início do resource.
Conexão de Rede
Atualmente, a partir do DRBD 9, os links de rede devem ser construídos em uma “malha de rede” completa, isto é, em cada resource, cada nó deve ter uma conexão direta com todos os outros nós (excluindo a si mesmo, é claro). Para o caso simples de dois hosts, o drbdadm inserirá a conexão de rede(única) por conta própria.
Para exemplificar essa “malha de rede”: para os dois nós “tradicionais” é necessária uma conexão; para três hosts, há três pares de nós; para quatro, seis pares; 5 hosts: 10 conexões e assim por diante. Atualmente, o máximo são 16 nós, ou seja, haverá 120 pares de hosts para conectar.
Veja esse exemplo
resource r0 { device minor 1; disk "/dev/sdb1"; meta-disk internal; on oracle86 { address 10.1.1.3:7000; node-id 0; } on oracle86B { address 10.1.1.4:7000; node-id 1; } on oracle86C { address 10.1.1.5:7000; node-id 2; } connection-mesh { hosts oracle86 oracle86B oracle86C; } }
Se tiver placas de rede suficientes em seus servidores, você pode criar links cruzados diretos entre pares de servidores. Uma única placa ethernet de quatro portas permite que você tenha uma única interface de gerenciamento e conecte três outros servidores para obter uma malha completa para quatro nós de cluster.
Nesse caso, você pode especificar um endereço IP diferente para usar o link direto:
resource r0 { ... connection { host oracle86 address 10.1.2.1:7010; host oracle86B address 10.1.2.2:7001; } connection { host oracle86 address 10.1.3.1:7020; host oracle86C address 10.1.3.2:7002; } connection { host oracle86B address 10.1.4.1:7021; host oracle86C address 10.1.4.2:7012; } }
Para facilitar a manutenção e a depuração, é recomendável ter portas diferentes para cada endpoint. Isso permitirá que você associe pacotes a um endpoint com mais facilidade ao fazer um tcpdump.
Implementando Transporte
O DRBD suporta vários transportes de rede. Uma implementação de transporte pode ser configurada para cada conexão de um recurso.
EXEMPLO COM TCP
resource <resource> { net { transport "tcp"; } ... }
tcp é o transporte padrão. Cada conexão que não possui uma opção de transporte usa o transporte tcp.
O transporte tcp pode ser configurado com as opções net: sndbuf-size, rcvbuf-size, connect-int, sock-check-timeo, ping-timeo, timeout.
EXEMPLO COM RDMA
resource <resource> { net { transport "rdma"; } ... }
O transporte rdma pode ser configurado com as opções net: sndbuf-size, rcvbuf-size, max_buffers, connect-int, sock-check-timeo, ping-timeo, timeout.
O transporte rdma é um transporte de recebimento de cópia zero. Uma implicação disso é que as opções de configuração max_buffers devem ser definidas com um valor grande o suficiente para conter todo o rcvbuf-size.