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.