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
- Entender e documentar melhor a preferência de nós
- 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
- 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
- Repassar a DEV os comandos para operações da Interface WEB
- 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