Por: @cdiego
Publicado em: 2019-04-11

Pacemaker

Pacemaker como serviço de gerenciamento do cluster

O pacemaker é o substitudo padrão do heartbeat, já desde o CentOS 7.x

Definimos que vamos utilizar o pacemaker como sistema padrão para gerenciar os cluster de FWFLEX e PABXFLEX V3.

(No V2 no CentOS 7.x tivemos de criar pacotes do heartbeat para manter compatibilidade)

Introdução

No CentOS 7.x usa por padrão as versões

  • pacemake 1.4
  • corosync 2.4

Onde

  • corosync = responsável pela comunicação
  • pacemaker = gerenciamento dos serviços
  • pcs = cli de comandos para o pacemaker

Diferentemente do heartbeat, onde as configurações eram centralizadas realizar em arquivos, no pacemaker as configurações são todas realizadas via comando: psc

Para gerenciar as duas máquinas, ele utiliza um usuário hacluster que é criado na instalação do pacote.

A sincronização de data/hora entre as máquina é essêncial para funcionamento do cluster.

Daemons que ficam e execução para funcionamento do cluster

  • systemctl status pcsd
  • systemctl status corosync

O pcsd é que vai levantar IPs diretamente, ou serviços do Linux através do systemd.

O serviço levantados pelo cluster são chamados de resources (recursos)

Conceitos para V3

Nos produtos iTFLEX V2 faziamos a sincronização completa do sistema (/) incluíndo binários e configurações

A idéia no V3 seria sincronizar apenas

  • Banco e dados da aplicação iTFLEX
  • Configurações da aplicação iTFLEX
  • Configurações aplicadas do serviço de INFRA

Ambiente do laboratório

Máquinas virtuais no ovirt

Node 1 = labfw7a

Node 2 = labfw7b

Instalação e configuração inicial

# /etc/hosts
172.28.60.211 labfw7a labfw7a.itflex.lan
172.28.60.212 labfw7b labfw7b.itflex.lan

Configuração individual em cada nó

Instalar pacotes

yum install pacemaker pcs fence-agents-all ntp

Liberar regras de firewall nos dois nós

TCP/2224, TCP/3121, TCP/21064, UDP/5405

Setar a senha do usuário hacluster

passwd hacluster

Ligar os serviços

systemctl start pcsd.service
systemctl enable pcsd.service

Autenticar nodes do cluster

pcs cluster auth labfw7a.itflex.lan labfw7b.itflex.lan -u hacluster

Vai retornar a saída

labfw7b.itflex.lan: Authorized
labfw7a.itflex.lan: Authorized

Criação do cluster

Executar a partir do primeiro nó para criar o cluster com nome: fwflex

pcs cluster setup --name fwflex labfw7a.itflex.lan labfw7b.itflex.lan

O pcs irá configurar o corosync nos dois nodes.

Verifique se a configuração foi gerada corretamente

cat /etc/corosync/corosync.conf

Ligar o cluster

Ligar imeditamente

pcs cluster start --all

Habilitar para iniciar automáticamente ao su

pcs cluster enable --all

Ajustes opções globais

Desliga stonith (fencing) stonith (fencing) = Recurso que monitora de wathdog e permite desligar a máquina física com falha via ILO, DRAC ou placa BMC (Não usamos! Normalmente usado quando duas máquinas acessam mesmo storage LUN, e precisa ter 200% de certeza que somente a máquina ativa está usando pcs property set stonith-enabled=false

Ignora quorum para eleger o nó principal (Pesquisar melhor)

pcs property set no-quorum-policy=ignore

Custo do failback / geral (Pesquisar melhor)

pcs property set default-resource-stickiness="INFINITY"

Configurar recursos no cluster

Introdução

Os recursos são os serviços que serão gerenciados pelo cluster

O pacemaker (através do daemon pcsd) monitora se os recurso estão ativos a cada X tempo, se o serviço caiu ele mesmo reinicia o serviço correspondente.

Esses recursos não podem estar sendo iniciados pelo systemd na inicialização do sistema, precisam ser iniciados obrigatóriamente por iniciativa do pscd, sendo assim para cada serviço vira um recurso do cluster

systemctl stop servico_que_vai_ser_gerenciado_pelo_pacemaker
systemctl disable servico_que_vai_ser_gerenciado_pelo_pacemaker

Os recursos tem seguite nomenclatura

classe:provider:recurso

Essa esturutra indica para o pacemaker como ele deve fazer para gerenciar o recurso específico

Exemplo: ocf:heartbeat:IPaddr2

Olha o heartbeat ai :-) são os scripts para gerenciar IP fornecidos pelo pacote resource-agents

Para fim do nosso laboratório, e aplicação no produto vamos utilizar apenas

**ocf:heartbeat:IPaddr2 **

Para gerenciar IPs virtuais direto pelo heartbeat

ocf:systemd:nome_serviço

Para gerenciar start e stop dos serviços via systemd

Criando e os recursos no cluster

Criar recurso com nome VirtualIP1 para levantar interface mgmt0:210 com IP 172.20.60.210/24

pcs resource create VirtualIP1 ocf:heartbeat:IPaddr2 \
  ip=172.20.60.210 cidr_netmask=24 nic=mgmt0 iflabel=mgmt0:210 \
  op monitor interval=30s

Criar recurso para levantar ntp pelo systemd

pcs resource create ntpd systemd:ntpd op monitor interval=30s

Nos dois exemplos a cada 30s o pacemaker verificar se o serviço está ligado, e liga novamente se for necessário

Exemplo: Se mantar o ip virtual na força, após 30s ele levanta o IP

Alterando recursos

Atualiza configuração de recurso existente

Exemplo, trocando o IP do recurso VirtualIP1

De: mgmt0:210 172.20.60.210

Para: mgmt0:211 172.20.60.211

Atenção: Vai ser aplicado na hora que executar o comanado

pcs resource update VirtualIP1 ocf:heartbeat:IPaddr2 \
  ip=172.20.60.211 cidr_netmask=24 nic=mgmt0 iflabel=mgmt0:1 \
  op monitor interval=30s

Dependência de recursos

Para os serviços andarem juntos, no mesmo nó do cluster é necessário criar dependência entre eles.

Sem essa configuração, o pacemaker pode levantar o serviço do IP virtual num nó, e o ntpd em outro nó, distribuindo os recursos do cluster entre as máquinas (de acordo com o quorum - pendente estudar melhor)

Prentendo ntpd para ficar sempre no mesmo nó que está o VirtualIPAddr

pcs constraint colocation add ntpd with VirtualIP1 INFINITY

Preferência de nós

pcs constraint location WebSite prefers pcmk-1=50
crm_simulate -sL

Status do cluster

cluster

pcs status

Recursos

pcs status resources

Corosync

pcs status corosync

Troca de nodes

Mandar o nó passivo parar

pcs cluster stop labfw7a.itflex.lan

COMANDOS ÚTEIS

Verificar comunicação

corosync-cfgtool -s

Verificar membros e quorum

corosync-cmapctl | grep members

Vistualizar configração em xml

pcs cluster cib

Verificar status da configuração

crm_verify -L -VV

Listar os tipos de padrão de resource

pcs resource standards

Listar os tipos de providers

pcs resource providers

Ver os agentes disponíveis

pcs resouce agents ocf:heartbeat

Pendente

Finalizar estudos

  1. Entender e documentar melhor a preferência de nós
  2. Definir melhor comando para repassar os serviços para outro nó sem ter de parar o cluster no nó que será desativado

Testes de comportamento

  1. Forçar erro permentente num serviço (apagar conf do ntpd) para ver o que ele vai fazer, ficar tentando levantar ou repassar para outro nó

Preparar template de cluster

Com base num cluster V2, adaptar para systemd e criar estrutura padrão de comandos para provisionar um cluster de firewall pelo pacemaker

Requisitos

  • Todos serviços prencisam andar juntos (Talve prender os serviços ao ip virtual principal do cluster)

**Automatização criação de cluster

Avaliar ansible para provisionar cluster ao invés de comandos

Ajustes para produto

  1. Repassar a DEV os comandos para operações da Interface WEB
  2. Definir o script e formato de sincronização de dados (Sugestão do clustermgr sync-config e clustermgr sync-mysql)

Referências

Guia para começar rapidamente How to configure High Availability Linux Cluster with Pacemaker in CentOS

Guia da Redhat Creating a Red Hat High-Availability Cluster with Pacemaker

Manal completo Configuration Explained Pacemaker 1.1