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.
Nós usamos dois nós, um ativo (que atende as requisições de usuários e aplicações) e outro nó em modo passivo. Se o nó ativo para, o passivo assume sua posição (tornando-se o nó ativo).
Distribuição Linux
Estamos usando o CentOS 5.5 (64 bits), embora não testado, este artigo deverá funcionar no Fedora, e com certeza no RedHat Enterprise
Linux). A instalação do CentOS é bastante simples e clássica: selecione os pacotes base (e outras coisas que você goste/precisa).
Um ponto importante na instalação é que utilizaremos o DRBD para replicação dos dados entre os nós. O DRBD requisita um disco ou uma partição exclusiva para esta ação de replicação, portanto se você não possui um disco específico para o DRBD, lembre de deixar uma partição exclusiva para o DRBD na instalação do CentOS.
Topologia e hardware de rede
Nós usamos duas interfaces Gigabit por nó: a primeira interface (eth0) conecta o nó à rede local (LAN); a segunda interface (eth1) está conectando os dois nós, através de um cabo cross-over. A conexão cross-over aumenta a confiabilidade e performance do sistema, já que a conexão entre os nós não dependerá, por exemplo, de um switch externo que pode falhar.
Neste artigo, usamos dois nós físicos: node1.clusterbr.int e node2.clusterbr.int:
- node1.clusterbr.int: Usa IP 10.0.0.191 (LAN) e IP 172.16.0.1 (cross-over)
- node2.clusterbr.int: Usa IP 10.0.0.192 (LAN) e IP 172.16.0.2 (cross-over)
- dbip.clusterbr.int: Este é o IP do Cluster, 10.0.0.190. Este é o IP que deverá ser utilizado para acesso ao banco de dados PostgreSQL.
Discos
Em nosso exemplo, cada um dos nós possui 2 discos físicos:
- /dev/sda: para o SO
- /dev/sdb: para o DRBD
Como foi dito anteriormente, você pode usar somente um disco, se deixar uma partição exclusiva para o DRBD.
PostgreSQL
A versão do PostgreSQL usada neste artigo é a 8.4, mas isto não importa efetivamente, porque o DRBD irá replicar tudo o que estiver no seu dispositivo. Portanto escolha a versão que for melhor para o seu cenário.
[1] Comentário enviado por
removido em 06/12/2010 - 01:15h:
Olha o título, olha o título do trabalho!...
10!
;-))
[2] Comentário enviado por
mvquintella em 13/12/2010 - 18:54h:
Olá.
Estou tentando esse procedimento mas estou empacando num ponto:
# mount -t ext3 /dev/drbd0 /var/lib/pgsql
Quando eu monto a pasta conforme o tutorial, (no meu caso como uso debian, o caminho que monto é /usr/local/pgsql) todas as pastas que estao dentro do pgsql somem (incluvise a pasa bin onde está localizado o initdb). Estou fazendo algo errado será??
Abs
[3] Comentário enviado por
rafatmb em 14/12/2010 - 10:04h:
Olá mvquintella,
Esta pasta /var/lib/pgsql no redhat (e afins) possui por exemplo a pasta data, onde o postgres armazena os dados da base.
Não tenho certeza qual é a pasta no debian. De qualquer modo, na primeira vez que você montar, você terá que usar o initdb para iniciarlizar os dados do postgres e popular a base.
Você chegou a esse ponto?
Abraço.
[4] Comentário enviado por
mvquintella em 15/12/2010 - 10:19h:
Olá!
No debian o caminho da pasta data fica no caminho: /usr/local/pgsql/data
No caso eu devo fazer a montagem assim certo?
# mount -t ext3 /dev/drbd0 /usr/local/pgsql
Só que quando eu faço esse procedimento, todos os arquivos que estão dentro de /usr/local/pgsql somem... Inclusive a pasta data.
Eu devo rodar o initdb antes de fazer a montagem então?
Talvez eu esteja fazendo alguma cabaçada, gostaria de tentar entender onde hehe
Obrigado!
[5] Comentário enviado por
mvquintella em 15/12/2010 - 10:49h:
Cara, obrigado pela ajuda. Provavelmente era alguma besteira que eu estava fazendo!
Recomecei do zero e consegui passar desse ponto. Conto com sua ajuda se eu travar em outro ponto heeein heheheh
Abs!
[6] Comentário enviado por
rafaelbiagi em 05/03/2011 - 16:05h:
Amigo, otimo artigo, bem explicado.
mas eu não sei o que acontece, segui certinho as configurações, um servidor pinga o outro mas esta apresentando o seguinte status no 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
1: cs:WFConnection ro:Primary/Unknown ds:UpToDate/Outdated C r----
ns:0 nr:0 dw:20 dr:545 al:2 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:1675592472
Alguem saberia me dizer pq da esse WFConnection, no
http://www.drbd.org/users-guide-emb/ch-admin.html ele só fala o que significa, mas não ajuda a resolver o problema.
Obrigado
Rafael Biagi
[7] Comentário enviado por
leandrojpg em 28/11/2011 - 16:50h:
boa tarde estou tentando fazer meu drbd com io pacemaker mas ao rodar o comando:
crm_mon -l, aprensenta a mensagem Failed actions:
DRBD_monitor_0 (node=node1, call=7, rc=6, status=complete): not configured
drbd_monitor_0 (node=node1, call=5, rc=6, status=complete): not configured
DADOS-MOUNT_start_0 (node=node1, call=15, rc=5, status=complete): not installed
postgres_fs_start_0 (node=node1, call=25, rc=1, status=complete): unknown error
drbd_r0_monitor_0 (node=node1, call=6, rc=6, status=complete): not configured
SRV-MOUNT_start_0 (node=node1, call=14, rc=5, status=complete): not installed
r0_fs_start_0 (node=node1, call=28, rc=1, status=complete): unknown error
DRBD_monitor_0 (node=node2, call=7, rc=6, status=complete): not configured
drbd_monitor_0 (node=node2, call=5, rc=6, status=complete): not configured
DADOS-MOUNT_start_0 (node=node2, call=12, rc=5, status=complete): not installed
postgres_fs_start_0 (node=node2, call=23, rc=1, status=complete): unknown error
drbd_r0_monitor_0 (node=node2, call=6, rc=6, status=complete): not configured
SRV-MOUNT_start_0 (node=node2, call=11, rc=5, status=complete): not installed
r0_fs_start_0 (node=node2, call=26, rc=1, status=complete): unknown error