Nesse artigo vamos configurar um cluster de alta disponibilidade utilizando o Pacemaker utilizando dois nodes. O cluster configurado com o Pacemaker compreende vários componentes, segue abaixo um breve descrição de cada um:

Cluster Information Base (CIB): daemon responsável pelas informações do cluster, usa XML internamente para sincronizar e distribuir as configurações e o status do DC entre todos os nodes. (DC – Designated Co-ordinator é o node eleito pelo Pacemaker para guardar e distribuir as informações via CIB)

Cluster Resource Management Daemon (CRMd): as ações quem tem relação com os recursos do cluster no Pacemaker são gerenciadas pelo CRMd, que podem ser consultados por clientes, movidos, instanciados e alterados quando necessário. Cada node do cluster também inclui um daemon local (LRMd) para gerenciar os recursos, e atua como um interface entre o CRMd e os recursos. LRMd envia os comandos do CRMd para os agentes locais.

Shoot the Other Node in the Head (STONITH): atua como um recurso no Pacemaker que processa as requisições de fence, O fence força o shutdown do node e o remove do cluster, garantindo a integridade dos dados em caso de falha de um dos nodes. STONITH é configurado no CID e pode ser monitorado como um recurso do cluster.

Para o funcionamento do cluster precisamos configurar os dois nodes com ip fixo e um FQDN para cada um dos servidores (um nome que responda pelo IP).

Configure o /etc/hosts com as seguintes entradas (substitua pelo IPs e nomes que do seu ambiente):

# vim /etc/hosts
172.16.82.181 node1 node1.asilva.eti.br
172.16.82.182 node2 node2.asilva.eti.br

Configure a rede utilizando o nmcli:

# nmcli connection edit "Wired connection 1"

===| nmcli interactive connection editor |===

Editing existing '802-3-ethernet' connection: 'Wired connection 1'

Type 'help' or '?' for available commands.
Type 'describe [.]' for detailed property description.

You may edit the following settings: connection, 802-3-ethernet (ethernet), 802-1x, ipv4, ipv6, dcb
nmcli>

Acesse a configuração do ipv4:

nmcli> goto ipv4
You may edit the following properties: method, dns, dns-search, addresses, address-labels, routes, ignore-auto-routes, ignore-auto-dns, dhcp-client-id, dhcp-send-hostname, dhcp-hostname, never-default, may-fail

Configure para manual (IP fixo):

nmcli ipv4> set method manual

Configure o endereço IP, netmask e o gateway:

nmcli ipv4> set addresses 172.16.82.181/24 172.16.82.2

Configure o DNS:

nmcli ipv4> set dns 172.16.82.2

Verifique se as configurações estão corretas:

nmcli ipv4> print
['ipv4' setting values]
ipv4.method: manual
ipv4.dns: 172.16.82.2
ipv4.dns-search:
ipv4.addresses: { ip = 172.16.82.181/24, gw = 172.16.82.2 }
ipv4.routes:
ipv4.ignore-auto-routes: no
ipv4.ignore-auto-dns: no
ipv4.dhcp-client-id: --
ipv4.dhcp-send-hostname: yes
ipv4.dhcp-hostname: --
ipv4.never-default: no
ipv4.may-fail: yes

Salve e saia:

nmcli ipv4> save
nmcli ipv4> quit

Reinicie a conexão para que a configuração seja aplicada:

# nmcli c down "Wired connection 1"
# nmcli c up "Wired connection 1"

Verifique se foi aplicado corretamente

# nmcli -f active connection show "Wired connection 1"
GENERAL.NAME: Wired connection 1
GENERAL.UUID: 4029e108-a2a8-4eb9-8d91-d8fc07b5b5d3
GENERAL.DEVICES: eno16777736
GENERAL.STATE: activated
GENERAL.DEFAULT: yes
GENERAL.DEFAULT6: no
GENERAL.VPN: no
GENERAL.ZONE: --
GENERAL.DBUS-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2
GENERAL.CON-PATH: /org/freedesktop/NetworkManager/Settings/0
GENERAL.SPEC-OBJECT: --
GENERAL.MASTER-PATH: --
IP4.ADDRESS[1]: ip = 172.16.82.181/24, gw = 172.16.82.2
IP4.DNS[1]: 172.16.82.2
IP6.ADDRESS[1]: ip = fe80::20c:29ff:feaf:e575/64, gw = ::

Instale os pacotes:

[root@node1 ~]# yum install pcs fence-agents-all

Habilite o firewall para permitir as conexões do cluster:

# firewall-cmd --permanent --add-service=high-availability
# firewall-cmd --add-service=high-availability

Configure a senha do usuário hacluster, que será usado pelo cluster:

# passwd hacluster
Changing password for user hacluster.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

Inicie o daemon do Pacemacker (pcsd) e configure para iniciar no boot:

# systemctl start pcsd.service
# systemctl enable pcsd.service

NOTA: antes de continuar, repita toda a configuração feita até aqui no outro node, mudando somente o IP, no meu caso vou configurar o node2.asilva.eti.br com o IP 172.16.82.182.

Autentique o usuário hacluster do pcs apontando os nodes que fazem parte do cluster, nesse caso node1.asilva.eti.br, node2.asilva.eti.br

# pcs cluster auth node1.asilva.eti.br node2.asilva.eti.br
Username: hacluster
Password:
node1.asilva.eti.br: Authorized
node2.asilva.eti.br: Authorized

Execute o comando abaixo no node1 para criar o cluster “teste_cluster” com os node1.asilva.eti.br e node2.asilva.eti.br. A opção —start vai iniciar o serviço no dois nodes.

# pcs cluster setup --start --name teste_cluster node1.asilva.eti.br node2.asilva.eti.br
Shutting down pacemaker/corosync services...
Redirecting to /bin/systemctl stop pacemaker.service
Redirecting to /bin/systemctl stop corosync.service
Killing any remaining services...
Removing all cluster configuration files...
node1.asilva.eti.br: Succeeded
node1.asilva.eti.br: Starting Cluster...
node2.asilva.eti.br: Succeeded
node2.asilva.eti.br: Starting Cluster...

Configure o serviço para iniciar nos nodes quando o servidor é reiniciado.

# pcs cluster enable --all
node1.asilva.eti.br: Cluster Enabled
node2.asilva.eti.br: Cluster Enabled

Execute o comando abaixo para ver o status do cluster.

# pcs cluster status
Cluster Status:
Last updated: Mon Jul 28 20:01:40 2014
Last change: Tue Jul 29 07:10:34 2014 via crmd on node2.asilva.eti.br
Stack: corosync
Current DC: node2.asilva.eti.br (2) - partition with quorum
Version: 1.1.10-32.el7_0-368c726
2 Nodes configured
0 Resources configured

PCSD Status:
node1.asilva.eti.br: Online
node2.asilva.eti.br: Online

Agora temos a infra-estrutura básica do cluster funcionando, os dois nodes fazem parte do cluster “teste_cluster”. Agora o último elemento que tem grande importância para manter a integridade do cluster, o dispositivo de fence.

Para listar quais os agentes de fence que são aceitos pelo Pacemaker no CentOS 7, execute o comando abaixo:

# pcs stonith list
fence_apc - Fence agent for APC over telnet/ssh
fence_apc_snmp - Fence agent for APC over SNMP
fence_bladecenter - Fence agent for IBM BladeCenter
fence_brocade - Fence agent for HP Brocade over telnet/ssh
fence_cisco_mds - Fence agent for Cisco MDS
fence_cisco_ucs - Fence agent for Cisco UCS
fence_drac5 - Fence agent for Dell DRAC CMC/5
fence_eaton_snmp - Fence agent for Eaton over SNMP
fence_eps - Fence agent for ePowerSwitch
fence_hpblade - Fence agent for HP BladeSystem
fence_ibmblade - Fence agent for IBM BladeCenter over SNMP
fence_idrac - Fence agent for IPMI over LAN
fence_ifmib - Fence agent for IF MIB
fence_ilo - Fence agent for HP iLO
fence_ilo2 - Fence agent for HP iLO
fence_ilo3 - Fence agent for IPMI over LAN
fence_ilo4 - Fence agent for IPMI over LAN
fence_ilo_mp - Fence agent for HP iLO MP
fence_imm - Fence agent for IPMI over LAN
fence_intelmodular - Fence agent for Intel Modular
fence_ipdu - Fence agent for iPDU over SNMP
fence_ipmilan - Fence agent for IPMI over LAN
fence_kdump - Fence agent for use with kdump
fence_rhevm - Fence agent for RHEV-M REST API
fence_rsb - I/O Fencing agent for Fujitsu-Siemens RSB
fence_scsi - fence agent for SCSI-3 persistent reservations
fence_virt - Fence agent for virtual machines
fence_vmware_soap - Fence agent for VMWare over SOAP API
fence_wti - Fence agent for WTI
fence_xvm - Fence agent for virtual machines

Para obter informação detalhada sobre o agente de fence, use a opção “describe”.

# pcs stonith describe fence_drac5
Stonith options for: fence_drac5
ipaddr (required): IP Address or Hostname
login (required): Login Name
passwd: Login password or passphrase
cmd_prompt: Force Python regex for command prompt
secure: SSH connection
...

No meu cluster irei utilizar o fence “storage-based”.

# pcs stonith create my_fence_scsi fence_scsi devices=/dev/sde meta provides=unfencing

Para ver os detalhes da configuração do fence:

# pcs stonith show --full
Resource: my_fence_scsi (class=stonith type=fence_scsi)
Attributes: devices=/dev/sde
Meta Attrs: provides=unfencing
Operations: monitor interval=60s (my_fence_scsi-monitor-interval-60s)

O fence como recurso na saída do “pcs status”.

# pcs status
Cluster name: my_cluster
Last updated: Mon Jul 28 21:18:19 2014
Last change: Tue Jul 29 07:45:07 2014 via cibadmin on node1.asilva.eti.br
Stack: corosync
Current DC: node2.asilva.eti.br (2) - partition with quorum
Version: 1.1.10-32.el7_0-368c726
2 Nodes configured
1 Resources configured

Online: [ node1.asilva.eti.br node2.asilva.eti.br ]

Full list of resources:

my_fence_scsi (stonith:fence_scsi): Started node1.asilva.eti.br

PCSD Status:
node1.asilva.eti.br: Online
node2.asilva.eti.br: Online

Daemon Status:
corosync: active/enabled
pacemaker: active/enabled
pcsd: active/enabled

No próximo artigo vou configurar o serviço httpd para ser gerenciado pelo cluster e demonstrar alguns comandos de gerenciamento.

Alberto Silva

Alberto Silva

Data Center System Engineer at Amazon Web Services (AWS)
Especialista de Infraestrutura TI há mais de 10 anos. Atualmente atua como Data Center System Engineer na empresa Amazon Web Services. Atua também como Consultor freelancer na área de Infraestrutura de TI, Segurança da Informação e Redes.
Alberto Silva

Latest posts by Alberto Silva (see all)

4 comments

  1. Boa tarde, estou montando o cluster de servidor de maquinas virtuais para quando um cair na rede o outro assuma como se fosse um espelho um do outro. Um espelho do outro e caso ele desligue o outro assuma. Poderia me ajudar a resolver isso?

    Desde já grato Lucas.

    1. Olá Luca,

      Primeiramente obrigado por visitar o blog. Para ajudar preciso de mais detalhes, você vai colocar a VMs como recurso do Cluster HA ou as VMs serão os nodes do cluster? e qual o ambiente que está configurando, hypervisor, S.O., etc…?
      Segue documentação do Red Hat Enterprise Linux 6 de como trabalhar (como recurso) com VMs dentro do Cluster https://access.redhat.com/documentation/pt-BR/Red_Hat_Enterprise_Linux/6/html/Cluster_Administration/s1-vm-considerations-CA.html.

      Abs.,
      Alberto Silva

Leave a Reply