Pular para o conteúdo principal

Alta Disponibilidade

A alta disponibilidade é a capacidade dum sistema, componente ou aplicação continuar operacional após a falha de um ou mais dos seus componentes. O objetivo é assegurar uma operação contínua e ininterrupta por um período extenso, minimizando o tempo de inatividade e garantindo a fiabilidade do serviço.

O PostgreSYS é projetado para oferecer robustez e resiliência, garantindo que os serviços de base de dados permaneçam acessíveis mesmo perante falhas de hardware ou software. Na plataforma, contamos com um conjunto de componentes integrados que proporcionam failover automático, proxy reverso, gestão eficiente de réplicas, entre outras funcionalidades.

Através do PgSmart é possível definir Ambientes de Alta Disponibilidade, os quais representam ambientes formados por uma instância de base de dados master (líder) e réplicas (síncronas ou assíncronas).

Figura 1 - Ambiente de Alta Disponibilidade
Figura 1 - Ambiente de Alta Disponibilidade

Patroni

O Patroni, Agente de Alta Disponibilidade da Plataforma PostgreSYS, desempenha um papel crucial na continuidade dos serviços de base de dados, especialmente em ambientes de missão crítica.

Um dos gestores de alta disponibilidade mais populares na comunidade PostgreSQL, o Patroni é um projeto open source que oferece um conjunto de funcionalidades para a automação e orquestração de clusters de base de dados. As suas principais características incluem:

  • Detecção e Recuperação Automática de Falhas: Automatiza o processo de failover, minimizando o tempo de inatividade ao detetar falhas em Masters e promover réplicas.
  • Consenso Distribuído: Suporta diversos backends para consenso e armazenamento distribuído e fiável de configurações do cluster, como etcd, Consul e ZooKeeper.
  • Design API-first: Fornece uma API REST para a gestão e consulta do estado do cluster, facilitando a integração com ferramentas de monitorização, balanceamento de carga e automação.

Num Ambiente de Alta Disponibilidade, o Patroni monitoriza continuamente a saúde das instâncias PostgreSQL, utilizando um Distributed Configuration Store (DCS) para a eleição de líderes e armazenamento de informações de estado. Em caso de falha na instância master, o Patroni identifica a réplica mais adequada para promoção com base em critérios como atraso de replicação e saúde do nó. Após a promoção, o Patroni atualiza o DCS e reconfigura as réplicas restantes para seguir o novo primário.

O fluxo abaixo ilustra possíveis ações do Agente na ocorrência de uma falha nas instâncias de Base de Dados do Ambiente de Alta Disponibilidade.

Figura 2 - Exemplo de fluxo de decisão do Agente de Alta Disponibilidade
Figura 2 - Exemplo de fluxo de decisão do Agente de Alta Disponibilidade

Além da gestão de failover, o Patroni permite switchovers planeados e ajustes dinâmicos de configuração, oferecendo uma solução completa para a manutenção de clusters PostgreSQL em alta disponibilidade.

Naturalmente, num Ambiente de Alta Disponibilidade, é necessário instalar o Agente de Alta Disponibilidade em todas as máquinas que alojam uma instância da base de dados PostgreSQL.

etcd

O etcd, Repositório de Configurações Distribuído (DCS) do PostgreSYS, possibilita que os Agentes de Alta Disponibilidade partilhem informações de configuração e estado de maneira fiável e coeso, crucial para manter a integridade e a disponibilidade das instâncias.

Num projeto open source iniciado pela CoreOS, o etcd oferece um modelo de armazenamento chave-valor fiável, depalavra-passedo especificamente para sistemas distribuídos críticos. Através do algoritmo de consenso Raft, este componente garante a consistência e disponibilidade dos dados, mesmo perante falhas parciais da rede ou dos componentes do sistema.

Para critério de curiosidade, a ideia do nome etcd vem da combinação do nome do diretório "/etc" do Sistema Operativo, onde são armazenadas configurações e metadados, com a letra "d" que significa "distributed" (distribuído).

Entre suas características robustas, destacam-se:

  • Consistência e Tolerância a Falhas: Utiliza o algoritmo Raft para gerenciar a replicação e a consistência dos dados, garantindo que todas as instâncias do cluster concordem com o estado atual do sistema.

  • Interface de Usuário Simples: Interage com sistemas através de API HTTP/HTTPS, permitindo operações de leitura e ~escrita de valores de maneira programática e acessível.

  • Observabilidade: Suporta mecanismos de watch, permitindo que aplicações e serviços reajam dinamicamente a mudanças na configuração ou no estado.

  • Segurança: Oferece mecanismos para autenticação de clientes e autorização de acesso a chaves, além de suportar comunicação cifrada via TLS.

  • Desempenho e Escalabilidade: Projetado para ser rápido e lidar com cargas de dados consideráveis, mantendo tempos de resposta baixos.

O etcd é projetado para alta disponibilidade e tolerância a falhas, operando tipicamente num cluster de múltiplos membros que replicam dados entre si. Cada membro do cluster etcd participa do consenso Raft, garantindo que cada alteração de estado seja acordada pela maioria dos nós antes de ser 'commitada'.

Figura 3 - Cluster etcd
Figura 3 - Cluster etcd

Para ambientes de missão crítica, recomenda-se a configuração dum cluster etcd com um número ímpar de membros (3, 5, 7, etc.), assegurando que o sistema possa tolerar falhas de até (n-1)/2 membros sem comprometer a disponibilidade ou a consistência dos dados.

HAProxy

O HAProxy, serviço de Proxy de Alta Disponibilidade do PostgreSYS, atua como intermédio entre as aplicações cliente e a base de dados, direcionando conexões para a instância mestre, considerando a saúde e a carga de cada servidor.

Projeto open source amplamente reconhecido pela sua eficácia em balanceamento de carga TCP/HTTP, funciona como um proxy reverso de alto desempenho para várias aplicações. Destaca-se por:

  • Flexibilidade: Suporta vários algoritmos de balanceamento de carga, incluindo round robin, least connections e source hashing.
  • Segurança: Implementa medidas de segurança robustas, como isolamento de processo, redução de privilégios e filtragem de tráfego, para proteger contra ataques.
  • Desempenho: Projetado para alto desempenho, capaz de gerenciar milhares de conexões simultâneas com baixa latência.
  • Monitorização e Registo: Fornece logs detalhados e métricas em tempo real para monitorização e análise de desempenho.
Figura 4 - Ambiente de Alta Disponibilidade com HAPRoxy
Figura 4 - Ambiente de Alta Disponibilidade com HAPRoxy

A arquitetura do HAProxy é otimizada para processamento rápido e eficiente de conexões de rede. Opera num modelo baseado em eventos, capaz de processar múltiplas conexões em paralelo, aproveitando ao máximo os recursos de hardware disponíveis.

  • Processamento Multithread: Distribui a carga de trabalho por vários núcleos da CPU, aumentando a capacidade de processamento e eficiência.
  • Isolamento e Segurança: Utiliza técnicas de isolamento, como chroot jail e sandboxing, para melhorar a segurança operacional.
  • Balanceamento Dinâmico: Adapta-se dinamicamente às