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 6: 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
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
Checar se subiu na placa certa:
# grep TOTEM /var/log/messages
Checar se pacemaker subiu:
# grep pcmk_startup /var/log/messages
Checar se o processo do pacemaker subiu:
# ps axf
(deverá conter algo do tipo)
# /etc/init.d/corosync start
Em ambos os servidores, executar o comando abaixo para para checar status do cluster:
# crm_mon -1
# 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.
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
}
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/crmdSe 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.
10!
;-))