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 2: Preparando os nós
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.
Precisaremos desabilitar o SELINUX:
# vi /etc/selinux/config
Mude somente a seguinte linha (mantendo todo o resto intacto):
# vi /etc/sysconfig/network
node1:
node2:
Configurando as interfaces de rede:
node1:
Interface LAN:
# vi /etc/sysconfig/network-scripts/ifcfg-eth0
A interface Cross-Over/DRBD:
# vi /etc/sysconfig/network-scripts/ifcfg-eth1
node2:
Interface LAN:
# vi /etc/sysconfig/network-scripts/ifcfg-eth0
A interface Cross-Over/DRBD:
# vi /etc/sysconfig/network-scripts/ifcfg-eth1
Configuração DNS:
Será necessário setar os servidores DNS nos nós:
# vi /etc/resolv.conf
Configurando o /etc/hosts (mesma configuração em ambos os nós):
# vi /etc/hosts
Obs.: Você provavelmente vai querer inserir outras linhas neste arquivo. O importante para nós é que o início seja exatamente assim.
Pingando node2 (pela interface LAN).
# ping -c 2 node2
Pingando node2 (pela interface cross-over).
# ping -c 2 172.16.0.2
node2:
Pingando node1 (pela interface LAN).
# ping -c 2 node1
Pingando node1 (pela interface cross-over).
# ping -c 2 172.16.0.1
# vi /etc/inittab
Mude somente esta linha (deixando o resto intacto):
Eu gosto também de remover alguns serviços que não serão utilizados, deixando somente os que precisaremos:
# chkconfig --list | grep 3:sim
Precisamos rebootar os servidores para aplicar as configurações.
Desabilitando o SELINUX
Precisaremos desabilitar o SELINUX:
# vi /etc/selinux/config
Mude somente a seguinte linha (mantendo todo o resto intacto):
SELINUX=disabled
Configurando o hostname
Temos que mudar o hostname e o gateway dos nós:# vi /etc/sysconfig/network
node1:
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=node1.clusterbr.int
GATEWAY=10.0.0.9
NETWORKING_IPV6=no
HOSTNAME=node1.clusterbr.int
GATEWAY=10.0.0.9
node2:
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=node2.clusterbr.int
GATEWAY=10.0.0.9
NETWORKING_IPV6=no
HOSTNAME=node2.clusterbr.int
GATEWAY=10.0.0.9
Configurando as interfaces de rede:
node1:
Interface LAN:
# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
IPADDR=10.0.0.191
NETMASK=255.255.255.0
ONBOOT=yes
HWADDR=a6:1e:3d:67:66:78
BOOTPROTO=static
IPADDR=10.0.0.191
NETMASK=255.255.255.0
ONBOOT=yes
HWADDR=a6:1e:3d:67:66:78
A interface Cross-Over/DRBD:
# vi /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
BOOTPROTO=static
IPADDR=172.16.0.1
NETMASK=255.255.255.0
ONBOOT=yes
HWADDR=ee:ef:ff:9a:9a:57
BOOTPROTO=static
IPADDR=172.16.0.1
NETMASK=255.255.255.0
ONBOOT=yes
HWADDR=ee:ef:ff:9a:9a:57
node2:
Interface LAN:
# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
IPADDR=10.0.0.192
NETMASK=255.255.255.0
ONBOOT=yes
HWADDR=52:52:a1:1a:62:32
BOOTPROTO=static
IPADDR=10.0.0.192
NETMASK=255.255.255.0
ONBOOT=yes
HWADDR=52:52:a1:1a:62:32
A interface Cross-Over/DRBD:
# vi /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
BOOTPROTO=static
IPADDR=172.16.0.2
NETMASK=255.255.255.0
ONBOOT=yes
HWADDR=1a:18:b2:50:96:1e
BOOTPROTO=static
IPADDR=172.16.0.2
NETMASK=255.255.255.0
ONBOOT=yes
HWADDR=1a:18:b2:50:96:1e
Configuração DNS:
Será necessário setar os servidores DNS nos nós:
# vi /etc/resolv.conf
search clusterbr.int
nameserver 10.0.0.9
nameserver 10.0.0.9
Configurando o /etc/hosts (mesma configuração em ambos os nós):
# vi /etc/hosts
127.0.0.1 localhost.localdomain localhost 10.0.0.191 node1.clusterbr.int node1 10.0.0.192 node2.clusterbr.int node2 10.0.0.190 dbip.clusterbr.int node2
Obs.: Você provavelmente vai querer inserir outras linhas neste arquivo. O importante para nós é que o início seja exatamente assim.
Checando conectividade de rede
node1:Pingando node2 (pela interface LAN).
# ping -c 2 node2
PING node2 (10.0.0.192) 56(84) bytes of data.
64 bytes from node2 (10.0.0.192): icmp_seq=1 ttl=64 time=0.089 ms
64 bytes from node2 (10.0.0.192): icmp_seq=2 ttl=64 time=0.082 ms
--- node2 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.082/0.085/0.089/0.009 ms
Pingando node2 (pela interface cross-over).
# ping -c 2 172.16.0.2
PING 172.16.0.2 (172.16.0.2) 56(84) bytes of data.
64 bytes from 172.16.0.2: icmp_seq=1 ttl=64 time=0.083 ms
64 bytes from 172.16.0.2: icmp_seq=2 ttl=64 time=0.083 ms
--- 172.16.0.2 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.083/0.083/0.083/0.000 ms
node2:
Pingando node1 (pela interface LAN).
# ping -c 2 node1
PING node1 (10.0.0.191) 56(84) bytes of data.
64 bytes from node1 (10.0.0.191): icmp_seq=1 ttl=64 time=0.068 ms
64 bytes from node1 (10.0.0.191): icmp_seq=2 ttl=64 time=0.063 ms
--- node1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.063/0.065/0.068/0.008 ms
Pingando node1 (pela interface cross-over).
# ping -c 2 172.16.0.1
PING 172.16.0.1 (172.16.0.1) 56(84) bytes of data.
64 bytes from 172.16.0.1: icmp_seq=1 ttl=64 time=1.36 ms
64 bytes from 172.16.0.1: icmp_seq=2 ttl=64 time=0.075 ms
--- 172.16.0.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 0.075/0.722/1.369/0.647 ms
Configurando opções de inicialização
Eu gosto de setar o runlevel 3:# vi /etc/inittab
Mude somente esta linha (deixando o resto intacto):
id:3:initdefault:
Eu gosto também de remover alguns serviços que não serão utilizados, deixando somente os que precisaremos:
# chkconfig --list | grep 3:sim
acpid 0:não 1:não 2:sim 3:sim 4:sim 5:sim 6:não anacron 0:não 1:não 2:sim 3:sim 4:sim 5:sim 6:não apmd 0:não 1:não 2:sim 3:sim 4:sim 5:sim 6:não atd 0:não 1:não 2:não 3:sim 4:sim 5:sim 6:não cpuspeed 0:não 1:sim 2:sim 3:sim 4:sim 5:sim 6:não crond 0:não 1:não 2:sim 3:sim 4:sim 5:sim 6:não irqbalance 0:não 1:não 2:sim 3:sim 4:sim 5:sim 6:não kudzu 0:não 1:não 2:não 3:sim 4:sim 5:sim 6:não network 0:não 1:não 2:sim 3:sim 4:sim 5:sim 6:não rawdevices 0:não 1:não 2:não 3:sim 4:sim 5:sim 6:não sshd 0:não 1:não 2:sim 3:sim 4:sim 5:sim 6:não syslog 0:não 1:não 2:sim 3:sim 4:sim 5:sim 6:nãoObs.: Os serviços que serão gerenciados pelo Pacemaker, neste artigo são Postgresql e DRBD, devem ficar desabilitados na inicialização automática, porque o próprio pacemaker deverá iniciar ou parar estes serviços nos nós.
Precisamos rebootar os servidores para aplicar as configurações.
10!
;-))