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.

[ Hits: 117.135 ]

Por: Rafael Marangoni em 02/12/2010


Configurando o Corosync



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.

Executar comandos abaixo somente no servidor node1.

Executar:

# export ais_port=4000
# export ais_mcast=226.94.1.1
# export ais_addr=`ip address show eth0 | grep "inet " | tail -n 1 | awk '{print $4}' | sed s/255/0/`


Conferir dados:

# env | grep ais_

IMPORTANTE: A variável ais_addr deverá conter o endereço da rede em que o cluster ouvirá, em nosso caso 10.0.0.0.

Configurar arquivo de configuração:

# cp /etc/corosync/corosync.conf.example /etc/corosync/corosync.conf
# sed -i.gres "s/.*mcastaddr:.*/mcastaddr:\ $ais_mcast/g" /etc/corosync/corosync.conf
# sed -i.gres "s/.*mcastport:.*/mcastport:\ $ais_port/g" /etc/corosync/corosync.conf
# sed -i.gres "s/.*bindnetaddr:.*/bindnetaddr:\ $ais_addr/g" /etc/corosync/corosync.conf


Executar as seguintes linhas:

# cat <<-END >>/etc/corosync/corosync.conf
# aisexec {
# user: root
# group: root
# }
# END


# cat <<-END >>/etc/corosync/corosync.conf
# service {
# name: pacemaker
# ver: 0
# }
# END


Checar se o arquivo de configuração está ok.

Servidor node1:

# cat /etc/corosync/corosync.conf

# Please read the corosync.conf.5 manual page
compatibility: whitetank

totem {
version: 2
secauth: off
threads: 0
interface {
ringnumber: 0
bindnetaddr: 10.0.0.0
mcastaddr: 226.94.1.1
mcastport: 4000
}
}

logging {
fileline: off
to_stderr: yes
to_logfile: yes
to_syslog: yes
logfile: /tmp/corosync.log
debug: off
timestamp: on
logger_subsys {
subsys: AMF
debug: off
}
}

amf {
mode: disabled
}
aisexec {
user: root
group: root
}
service {
# Load the Pacemaker Cluster Resource Manager
name: pacemaker
ver: 0
}

Transferir do servidor node1 servidor node2:

# scp /etc/corosync/* node2:/etc/corosync/

Criar diretório de log em ambos os servidores:

# mkdir /var/log/cluster/

Iniciar serviço no servidor node1:

# /etc/init.d/corosync start

Checar se está ok o serviço:

# grep -e "Corosync Cluster Engine" -e "configuration file" /var/log/messages
Apr 7 12:37:21 node1 corosync[23533]: [MAIN ] Corosync Cluster Engine ('1.2.0'): started and ready to provide service.
Apr 7 12:37:21 node1 corosync[23533]: [MAIN ] Successfully read main configuration file '/etc/corosync/corosync.conf'.


Checar se subiu na placa certa:

# grep TOTEM /var/log/messages
Apr 7 12:37:21 node1 corosync[23533]: [TOTEM ] Initializing transport (UDP/IP).
Apr 7 12:37:21 node1 corosync[23533]: [TOTEM ] Initializing transmit/receive security: libtomcrypt SOBER128/SHA1HMAC (mode 0).
Apr 7 12:37:21 node1 corosync[23533]: [TOTEM ] The network interface [10.0.0.191] is now up.
Apr 7 12:37:21 node1 corosync[23533]: [TOTEM ] A processor joined or left the membership and a new membership was formed.


Checar se pacemaker subiu:

# grep pcmk_startup /var/log/messages
Apr 7 12:37:21 node1 corosync[23533]: [pcmk ] info: pcmk_startup: CRM: Initialized
Apr 7 12:37:21 node1 corosync[23533]: [pcmk ] Logging: Initialized pcmk_startup
Apr 7 12:37:21 node1 corosync[23533]: [pcmk ] info: pcmk_startup: Maximum core file size is: 4294967295
Apr 7 12:37:21 node1 corosync[23533]: [pcmk ] info: pcmk_startup: Service: 9
Apr 7 12:37:21 node1 corosync[23533]: [pcmk ] info: pcmk_startup: Local hostname: node1


Checar se o processo do pacemaker subiu:

# ps axf

(deverá conter algo do tipo)

23533 ?        Ssl    0:00 corosync
23539 ?        SLs    0:00  \_ /usr/lib/heartbeat/stonithd
23540 ?        S      0:00  \_ /usr/lib/heartbeat/cib
23541 ?        S      0:00  \_ /usr/lib/heartbeat/lrmd
23542 ?        S      0:00  \_ /usr/lib/heartbeat/attrd
23543 ?        S      0:00  \_ /usr/lib/heartbeat/pengine
23544 ?        S      0:00  \_ /usr/lib/heartbeat/crmd

Se estiver tudo ok nestas mensagens, podemos iniciar o serviço no servidor node 2.

# /etc/init.d/corosync start

Em ambos os servidores, executar o comando abaixo para para checar status do cluster:

# crm_mon -1
============
Last updated: Fri Oct 29 17:44:36 2010
Stack: openais
Current DC: node1.clusterbr.int - partition with quorum
Version: 1.0.9-89bd754939df5150de7cd76835f98fe90851b677
2 Nodes configured, 2 expected votes
0 Resources configured.
============

Online: [ node1.clusterbr.int node2.clusterbr.int ]


Ativando serviço na inicialização

Em ambos os servidores:

# chkconfig --level 35 corosync on

Obs.: No cluster, os serviços publicados como recursos, não devem ser iniciados automaticamente no SO. Portanto, neste caso somente ativamos o corosync na inicialização, os serviços postgresql e drbd ficam parados, sendo iniciados pelo próprio corosync.

Página anterior     Próxima página

Páginas do artigo
   1. Notas Preliminares
   2. Preparando os nós
   3. Instalando pré-requisitos
   4. Configurando o DRBD
   5. Configurando o PostgreSQL
   6. Configurando o Corosync
   7. Configurando o Pacemaker
   8. Criando página para exibir status via web
   9. Instalando PhppgAdmin para gerenciar o PostgreSQL
   10. Acessando via rede e monitorando o cluster
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

PostgreSQL 9.4 - Replicação com slots

Encoding do Postgres (latin1) e encoding do SO (Debian/Ubuntu)

PostgreSQL: SGBDOR

Programando PostgreSQL + PHP

Unificando bases de dados com Schemas

  
Comentários
[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

[8] Comentário enviado por sbambam em 13/06/2012 - 22:48h

Prezados,

Gostaria de uma ajuda...

Ao executar o passo "yum install -y pacemaker corosync drbd83 kmod-drbd83 heartbeat" em pré-requisitos me deparo com as informaçoes abaixo. Eu acredito que não devo continuar sem esses pacotes...alguem pode dar uma luz...

[root@node1 ~]# yum install -y pacemaker corosync drbd83 kmod-drbd83 heartbeat
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
* base: centos.redeminastelecom.com.br
* epel: mirror.cogentco.com
* extras: centos.redeminastelecom.com.br
* updates: centos-mirror.hostdime.com.br
Setting up Install Process
Package pacemaker-1.1.6-3.el6.x86_64 already installed and latest version
Package corosync-1.4.1-4.el6_2.2.x86_64 already installed and latest version
No package drbd83 available.
No package kmod-drbd83 available.
Package heartbeat-3.0.4-1.el6.x86_64 already installed and latest version
Nothing to do
[root@node1 ~]#

[9] Comentário enviado por felipeogutierrez em 15/12/2012 - 22:26h


[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


Cara, voce tem que que dar um disconnect, detach e depois um connect. Se nao for com o connect tenta o discard-my-data
Falou
Felipe

[10] Comentário enviado por paulosantos41 em 12/09/2015 - 23:38h


Boa noite a todos,
eu estava fazendo esta configuração de cluster, e tudo funciona normalmente até o passo de criar o banco pgbench no node 1, mas quando vou checar se o banco pode ser acessado pelo node 2, o postgresql informa que não existe role para o usuário admpgsql. Alguém poderia me ajudar?

Estou utilizando o debian wheezy para fazer as configurações e estou seguindo todos os passos do artigo.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts