HowTo: Como criar Cluster Linux - Ativo/Passivo para Postgres com DRBD, Pacemaker e Corosync
Este artigo explica como configurar (e monitorar) um Cluster Linux Ativo/Passivo para PostgreSQL, usando Pacemaker, DRBD e Corosync.
Parte 4: Configurando o DRBD
Este artigo explica como configurar (e monitorar) um Cluster PostgreSQL Ativo/Passivo, usando Pacemaker, Corosync e DRBD. Escrito por Rafael Marangoni, do time de Servidor Linux da BRLink.
Em primeiro lugar, nós precisaremos configurar o /etc/drbd.conf em ambos os nós:
# vi /etc/drbd.conf
Os principais pontos da configuração são:
Se você tiver dúvidas, procure o DRBD Users Guide: www.drbd.org/users-guide-emb/
Uma vez configurado o drbd.conf, vamos criar o metadata no recurso postgres, em ambos os nós:
# drbdadm create-md postgres
node1:
# drbdadm create-md postgres
node2:
# drbdadm create-md postgres
Conectando e inicializando o recurso, em ambos os nós:
# drbdadm up postgres
Vamos realizar a primeira sincronização entre os nós. Execute apenas no nó primário, que no nosso caso, será o node1. Então somente no node1, rodar:
# drbdadm -- --overwrite-data-of-peer primary postgres
Checando o status do DRBD:
# cat /proc/drbd
O processo de sincronização deverá levar algum tempo, dependendo do tamanho do recurso e da velocidade dos discos e da interface Cross-Over.
Depois de terminado o processo, o status deverá ser algo do tipo:
node1:
# cat /proc/drbd
node2:
# cat /proc/drbd
Para entender o significado de cada parte deste status, acesse o endereço: www.drbd.org/users-guide-emb/ch-admin.html#s-proc-drbd
Em primeiro lugar, nós precisaremos configurar o /etc/drbd.conf em ambos os nós:
# vi /etc/drbd.conf
global {
usage-count no;
}
common {
syncer { rate 100M; }
protocol C;
}
resource postgres {
startup {
wfc-timeout 0;
degr-wfc-timeout
120;
}
disk { on-io-error detach; }
on node1.clusterbr.int {
device /dev/drbd0;
disk /dev/sdb;
address 172.16.0.1:7791;
meta-disk internal;
}
on node2.clusterbr.int {
device /dev/drbd0;
disk /dev/sdb;
address 172.16.0.2:7791;
meta-disk internal;
}
}
usage-count no;
}
common {
syncer { rate 100M; }
protocol C;
}
resource postgres {
startup {
wfc-timeout 0;
degr-wfc-timeout
120;
}
disk { on-io-error detach; }
on node1.clusterbr.int {
device /dev/drbd0;
disk /dev/sdb;
address 172.16.0.1:7791;
meta-disk internal;
}
on node2.clusterbr.int {
device /dev/drbd0;
disk /dev/sdb;
address 172.16.0.2:7791;
meta-disk internal;
}
}
Os principais pontos da configuração são:
- resource: refere-se ao recurso gerenciado pelo DRBD (aqui é chamado postgres)
- disk: refere-se ao dispositivo que será usado (um disco ou partição)
- address: Endereço IP e porta usadas pelo DRBD para replicação (repare que estamos usando os endereços da interface Cross-Over)
- syncer: a taxa de transferência entre os nós (nós usamos 100M porque temos uma interface Gigabit)
Se você tiver dúvidas, procure o DRBD Users Guide: www.drbd.org/users-guide-emb/
Uma vez configurado o drbd.conf, vamos criar o metadata no recurso postgres, em ambos os nós:
# drbdadm create-md postgres
node1:
# drbdadm create-md postgres
Writing meta data...
initializing activity log
NOT initialized bitmap
New drbd meta data block successfully created.
node2:
# drbdadm create-md postgres
Writing meta data...
initializing activity log
NOT initialized bitmap
New drbd meta data block successfully created.
Conectando e inicializando o recurso, em ambos os nós:
# drbdadm up postgres
Vamos realizar a primeira sincronização entre os nós. Execute apenas no nó primário, que no nosso caso, será o node1. Então somente no node1, rodar:
# drbdadm -- --overwrite-data-of-peer primary postgres
Checando o status do DRBD:
# cat /proc/drbd
version: 8.3.8 (api:88/proto:86-94)
GIT-hash: d78846e52224fd00562f7c225bcc25b2d422321d build by mockbuild@builder10.centos.org, 2010-06-04 08:04:09
0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r----
ns:48128 nr:0 dw:0 dr:48128 al:0 bm:2 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:8340188
[>....................] sync'ed: 0.6% (8144/8188)M delay_probe: 7
finish: 0:11:29 speed: 12,032 (12,032) K/sec
O processo de sincronização deverá levar algum tempo, dependendo do tamanho do recurso e da velocidade dos discos e da interface Cross-Over.
Depois de terminado o processo, o status deverá ser algo do tipo:
node1:
# cat /proc/drbd
version: 8.3.8 (api:88/proto:86-94)
GIT-hash: d78846e52224fd00562f7c225bcc25b2d422321d build by mockbuild@builder10.centos.org, 2010-06-04 08:04:09
0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r----
ns:8388316 nr:0 dw:0 dr:8388316 al:0 bm:512 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0
node2:
# cat /proc/drbd
version: 8.3.8 (api:88/proto:86-94)
GIT-hash: d78846e52224fd00562f7c225bcc25b2d422321d build by mockbuild@builder10.centos.org, 2010-06-04 08:04:09
0: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r----
ns:0 nr:8388316 dw:8388316 dr:0 al:0 bm:512 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0
Para entender o significado de cada parte deste status, acesse o endereço: www.drbd.org/users-guide-emb/ch-admin.html#s-proc-drbd
10!
;-))