DRBD: Configurando DRBD Multimaster no CentOS

Para este artigo, vamos levar em conta que você tem uma instalação limpa do CentOS 5.5.

Ambiente

Máquina Master

  • SO: CentOS 5.5
  • Eth0: 172.16.0.1 (HA)
  • Eth1: 192.168.0.1 (Lan)
  • SDA: Insalação do SO
  • SDB: Unica partição a ser usada pelo DRBD

Máquina Slave

  • SO: CentOS 5.5
  • Eth0: 172.16.0.2 (HA)
  • Eth1: 192.168.0.2 (Lan)
  • SDA: Insalação do SO
  • SDB: Unica partição a ser usada pelo DRBD

Desabilitando o SELINUX

Nessa etapa, vamos desabilitar o selinux para evitar que ele venha nos atrapalhar.

[root@centos1 ~]# vi /etc/selinux/config

SELINUX=disabled [root@centos2 ~]# vi /etc/selinux/config

SELINUX=disabled Configuração da Rede

É recomendado que para utilização do DRBD você possua uma estrutura de rede física separada da rede de produção da empresa, ou seja, é importante possuir uma rede isolada para a replicação.

Também não é recomendado que você utilize o sistema de replicação através de roteadores.

Para configurar a rede, veja exemplo mostrado a seguir:

[root@centos1 ~]# vi /etc/resolv.conf

nameserver 192.168.0.254

[root@centos1 ~]# vi /etc/sysconfig/network

NETWORKING=yes NETWORKING_IPV6=no HOSTNAME=centos1 GATEWAY=192.168.0.254

[root@centos1 ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0 BOOTPROTO=static ONBOOT=yes ADDRESS=172.16.0.1 NETMASK=255.255.255.252 NETWORK=172.16.0.0 BROADCAST=172.16.0.3

[root@centos1 ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth1

DEVICE=eth1 BOOTPROTO=static ONBOOT=yes ADDRESS=192.168.0.1 NETMASK=255.255.255.0 NETWORK=192.168.0.0 BROADCAST=192.168.0.255

[root@centos2 ~]# vi /etc/resolv.conf

nameserver 192.168.0.254

[root@centos2 ~]# vi /etc/sysconfig/network

NETWORKING=yes NETWORKING_IPV6=no HOSTNAME=centos2 GATEWAY=192.168.0.254

[root@centos2 ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0 BOOTPROTO=static ONBOOT=yes ADDRESS=172.16.0.2 NETMASK=255.255.255.252 NETWORK=172.16.0.0 BROADCAST=172.16.0.3

[root@centos2 ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth1

DEVICE=eth1 BOOTPROTO=static ONBOOT=yes ADDRESS=192.168.0.2 NETMASK=255.255.255.0 NETWORK=192.168.0.0 BROADCAST=192.168.0.255

Não podemos esquecer de configurar o /etc/hosts para que as máquinas possam se achar por nome.

[root@centos1 ~]# vi /etc/hosts

172.30.0.1 centos1 172.30.0.2 centos2 192.168.0.1 centos1.dominio.local centos1 192.168.0.2 centos2.dominio.local centos2

[root@centos2 ~]# vi /etc/hosts

172.30.0.2 centos2 172.30.0.1 centos1 192.168.0.2 centos2.dominio.local centos2 192.168.0.1 centos1.dominio.local centos1

Preparando as partições

Precisamos também preparar os HDs e criar as partições para receber o DRBD de forma correta. Vamos usar o fdisk para isso.

[root@centos1 ~]# fdisk /dev/sdb

Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 1 First cylinder (1-130, default 1): Using default value 1 Last cylinder or +size or +sizeM or +sizeK (1-130, default 130): Using default value 130

Command (m for help): w The partition table has been altered!

Calling ioctl() to re-read partition table. Syncing disks.

[root@centos2 ~]# fdisk /dev/sdb

Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 1 First cylinder (1-130, default 1): Using default value 1 Last cylinder or +size or +sizeM or +sizeK (1-130, default 130): Using default value 130

Command (m for help): w The partition table has been altered!

Calling ioctl() to re-read partition table. Syncing disks.

Limpando todo e qualquer dado que exista no disco

Nesta etapa, vamos zerar todos os dados que possam existir dentro dos HDs que estamos usando.

[root@centos1 ~]# dd if=/dev/zero of=/dev/sdb1 bs=1M count=128 [root@centos2 ~]# dd if=/dev/zero of=/dev/sdb1 bs=1M count=128

Instalando e configurando o DRBD

Chegou a hora de montar a estrutura do DRBD. Vamos começar instalando os pacotes necessários.

[root@centos1 ~]# yum -y install drbd83 kmod-drbd83 [root@centos2 ~]# yum -y install drbd83 kmod-drbd83

Em seguida, vamos configurar o arquivo de configuração do DRBD. Veja um modelo a seguir:

[root@centos1 ~]# vi /etc/drbd.conf

global {

usage-count yes;

}

common {

syncer {
  rate 100M;
  al-extents 257;
}

}

resource resource-name {

protocol C;

handlers {
}
startup {
  wfc-timeout  15;
  degr-wfc-timeout 20;    # 2 minutes.
  become-primary-on both;
}
disk {
  on-io-error   detach;
}
net {
  sndbuf-size 512k;
  timeout       60;    #  6 seconds  (unit = 0.1 seconds)
  connect-int   10;    # 10 seconds  (unit = 1 second)
  ping-int      10;    # 10 seconds  (unit = 1 second)
  ping-timeout   5;    # 500 ms (unit = 0.1 seconds)
  max-buffers 2048;
  allow-two-primaries;
  after-sb-0pri discard-zero-changes;
  after-sb-0pri discard-least-changes;
  after-sb-1pri discard-secondary;
  after-sb-2pri disconnect;
}
syncer {
  rate 100M;
  al-extents 257;
}
on centos1 {
  device     /dev/drbd0;
  disk       /dev/sdb1;
  address    172.30.0.1:7788;
  meta-disk  internal;
}
on centos2 {
  device    /dev/drbd0;
  disk      /dev/sdb1;
  address   172.30.0.2:7788;
  meta-disk internal;
}

}

Em seguida, vamos copiar o arquivo recem criado para o centos2 pois o arquivo é idêntico para ambas máquinas.

[root@centos1 ~]# scp /etc/drbd.conf centos2:/etc/

root@centos2's password: * drbd.conf 100% 1699 1.7KB/s 00:00

Em seguida, vamos criar o metadata do resource para DRBD.

[root@centos1 ~]# drbdadm create-md resource-name [root@centos2 ~]# drbdadm create-md resource-name

O pŕoximo passo, é anexar o dispositivo ao metadata criado. Poderá ocorrer erro na hora de anexar. Caso aconteça, desanexe e anexe novamente.

[root@centos1 ~]# drbdadm detach resource-name [root@centos2 ~]# drbdadm detach resource-name [root@centos1 ~]# drbdadm attach resource-name [root@centos2 ~]# drbdadm attach resource-name

O próximo comando, vai iniciar a sincronização do dispositivo.

[root@centos1 ~]# drbdadm syncer resource-name [root@centos2 ~]# drbdadm syncer resource-name

E por fim, vamos conectar os nodes. Caso o sistema apresente erro de conexão, desconecte e conecte novamente.

[root@centos1 ~]# drbdadm disonnect resource-name [root@centos2 ~]# drbdadm disconnect resource-name [root@centos1 ~]# drbdadm connect resource-name [root@centos2 ~]# drbdadm connect resource-name

Observe o arquivo /proc/drbd para ver o progresso de sincronização dos dados do DRBD

[root@centos1 ~]# cat /proc/drbd

version: 8.3.0 (api:88/proto:86-89) GIT-hash: 9ba8b93e24d842f0dd3fb1f9b90e8348ddb95829 build by buildsystem@linbit, 2008-12-18 16:02:26 1: cs:Connected ro:Secondary/Secondary ds:UpToDate/UpToDate C r— ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:200768 [root@centos2 ~]# cat /proc/drbd

version: 8.3.0 (api:88/proto:86-89) GIT-hash: 9ba8b93e24d842f0dd3fb1f9b90e8348ddb95829 build by buildsystem@linbit, 2008-12-18 16:02:26 1: cs:Connected ro:Secondary/Secondary ds:UpToDate/UpToDate C r— ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:200768 Ambos os discos em ambos servidores agora estão alocados. Hora de iniciar o serviço DRBD.

[root@centos1 ~]# service drbd restart [root@centos2 ~]# service drbd restart

Note no /proc/drbd que ambos os servidores estão em modo Secondary. Para transformá-los em multimaster, execute o comando a seguir:

[root@centos1 ~]# drbdsetup /dev/drbd0 primary -o [root@centos2 ~]# drbdsetup /dev/drbd0 primary -o

Feito isso, observe no /proc/drbd que agora ambos estão em modo master.

[root@centos1 ~]# cat /proc/drbd

version: 8.3.0 (api:88/proto:86-89) GIT-hash: 9ba8b93e24d842f0dd3fb1f9b90e8348ddb95829 build by buildsystem@linbit, 2008-12-18 16:02:26 1: cs:Connected ro:Primary/Primary ds:UpToDate/UpToDate C r— ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:200768 [root@centos2 ~]# cat /proc/drbd

version: 8.3.0 (api:88/proto:86-89) GIT-hash: 9ba8b93e24d842f0dd3fb1f9b90e8348ddb95829 build by buildsystem@linbit, 2008-12-18 16:02:26 1: cs:Connected ro:Primary/Primary ds:UpToDate/UpToDate C r— ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:200768 Não podemos esquecer de habilitar o DRBD para ser iniciado no boot da máquina.

[root@centos1 ~]# chkconfig –level 35 drbd on [root@centos2 ~]# chkconfig –level 35 drbd on

Neste ponto, finalizamos a configuração do DRBD. Aguarde a sincronização dos HDs finalizar e continue a configuração, agora realizando a etapa do GFS.

Instalando e configurando o cluster de filesystem com GFS

Primeiramente vamos instalar o grupo de pacotes para Cluster existente no CentOS.

[root@centos1 ~]# yum -y groupinstall “Cluster Storage” “Clustering” [root@centos2 ~]# yum -y groupinstall “Cluster Storage” “Clustering”

Precisamos criar o arquivo /etc/cluster/cluster.conf que terá a configuração de Cluster do GFS responsável pelo gerenciamento dos locks dos arquivos.

[root@centos1 ~]# vi /etc/cluster/cluster.conf

<?xml version=“1.0”?> <cluster name=“resource-name” config_version=“1”>

<cman two_node="1" expected_votes="1"/>
<clusternodes>
  <clusternode name="centos1" votes="1" nodeid="1">
    <fence>
      <method name="single">
        <device name="manual" ipaddr="172.30.0.1"/>
      </method>
    </fence>
  </clusternode>
  <clusternode name="centos2" votes="1" nodeid="2">
    <fence>
      <method name="single">
        <device name="manual" ipaddr="172.30.0.2"/>
      </method>
    </fence>
  </clusternode>
</clusternodes>
<fence_daemon clean_start="1" post_fail_delay="0" post_join_delay="3"/>
<fencedevices>
  <fencedevice name="manual" agent="fence_manual"/>
</fencedevices>

</cluster>

Como arquivo pronto, vamos copiá-lo para o centos2 pois o arquivo é idêntico para ambas máquinas.

[root@centos1 ~]# scp /etc/cluster/cluster.conf centos2:/etc/cluster/

root@centos2's password: * cluster.conf 100% 1529 1.6KB/s 00:00

Em seguida, vamos iniciar os serviços cman.

[root@centos1 ~]# /etc/init.d/cman start

Starting cluster: Loading modules… done Mounting configfs… done Starting ccsd… done Starting cman… done Starting daemons… done Starting fencing… done

                                            [  OK  ]

[root@centos2 ~]# /etc/init.d/cman start

Starting cluster: Loading modules… done Mounting configfs… done Starting ccsd… done Starting cman… done Starting daemons… done Starting fencing… done

                                            [  OK  ]

Em seguida, vamos iniciar outros serviços.

[root@centos1 ~]# /etc/init.d/clvmd start [root@centos1 ~]# /etc/init.d/gfs start [root@centos1 ~]# /etc/init.d/gfs2 start [root@centos2 ~]# /etc/init.d/clvmd start [root@centos2 ~]# /etc/init.d/gfs start [root@centos2 ~]# /etc/init.d/gfs2 start

No próximo passo, vamos configurar esses serviços para serem iniciados no boot do sistema.

[root@centos1 ~]# chkconfig –level 35 cman on [root@centos1 ~]# chkconfig –level 35 clvmd on [root@centos1 ~]# chkconfig –level 35 gfs on [root@centos1 ~]# chkconfig –level 35 gfs2 on [root@centos2 ~]# chkconfig –level 35 cman on [root@centos2 ~]# chkconfig –level 35 clvmd on [root@centos2 ~]# chkconfig –level 35 gfs on [root@centos2 ~]# chkconfig –level 35 gfs2 on

Em seguida, vamos formatar a unidade do DRBD com o GFS. Execute essa etapa apenas em um servidor.

[root@centos1 ~]# gfs_mkfs -p lock_dlm -t resource-name:gfs -j 2 /dev/drbd0

Agora, vamos criar um ponto de montagem e montar o device DRBD para ver se ja podemos utilizá-lo como área de armazenamento. Faça isso nas duas máquinas para ter certeza que esta OK em ambas.

[root@centos1 ~]# mkdir /srv/cluster [root@centos1 ~]# mount -t gfs /dev/drbd0 /srv/cluster [root@centos2 ~]# mkdir /srv/cluster [root@centos2 ~]# mount -t gfs /dev/drbd0 /srv/cluster

Se você optar por realizar um teste de escrita e leitura para ter certeza que tudo esta sincronizado e funcionando, crie um arquivo qualquer dentro do /srv/cluster de uma das máquinas e depois verifique se o arquivo se encontra na outra máquina. É interessante que você realize esse teste na outra máquina também para ter certeza que esta tudo sendo replicado de maneira correta.

Para finalizar, adicione a linha de montagem da unidade DRBD na inicialização da máquina.

[root@centos1 ~]# vi /etc/fstab

/dev/drbd0 /srv/cluster gfs defaults 0 0


Artigo baseado no manual oficial de instalação e configuração do DRBD em http://www.drbd.org/users-guide-emb/users-guide.html e no artigo pessoal do grande amigo Gilmar Cabral (gilmarjcabral[em]gmail.com), fornecido gentilmente.

linux/artigos/drbd-master-master-centos.txt · Última modificação: 13/01/2015 10:44 (edição externa)