Alta Disponibilidade
Alta disponibilidade é a capacidade de um sistema, componente ou aplicação de continuar operacional após a ocorrência de falhas em um ou mais de seus componentes. O objetivo é garantir operação contínua e ininterrupta por um período extenso, minimizando o tempo de inatividade e garantindo a confiabilidade do serviço.
O PostgreSYS é projetado para oferecer robustez e resiliência, garantindo que os serviços de banco de dados permaneçam acessíveis mesmo diante de falhas de hardware ou software. Na plataforma, contamos com um conjunto de componentes integrados que fornecem 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 banco de dados master (líder) e réplicas (síncronas ou assíncronas).
![Ambiente de Alta Disponibilidade](../_images/pgsys-arquitetura-ha.png)
Patroni
O Patroni, Agente de Alta Disponibilidade da Plataforma PostgreSYS, desempenha um papel crucial para a continuidade dos serviços de banco de dados, especialmente em ambientes de missão crítica.
Um dos mais populares gerenciadores de alta disponibilidade da comunidade PostgreSQL, o Patroni é um projeto open source que oferece um conjunto de funcionalidades para automação e orquestração de clusters de banco de dados. 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 detectar falhas em masters e promover réplicas.
-
Consenso Distribuído: Suporta diversos backends para consenso e armazenamento de configurações do cluster de forma distribuída e confiável, como etcd, Consul e ZooKeeper.
-
API-first Design: Oferece uma API REST para gerenciamento e consulta do estado do cluster, facilitando a integração com ferramentas de monitoramento, balanceamento de carga e automação.
Em um Ambiente de Alta Disponibilidade, o Patroni é responsável por monitorar constantemente a saúde das instâncias PostgreSQL, utilizando um Distributed Configuration Store (DCS) para 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, 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 banco de dados do Ambiente de Alta Disponibilidade.
![Agente de _HA_](../_images/pgsys-gerenciador-de-ha.png)
Além do gerenciamento de failover, Patroni permite operações como switchovers planejados e ajustes dinâmicos de configuração, oferecendo uma solução completa para a manutenção de clusters PostgreSQL em alta disponibilidade.
Logicamente, em Ambiente de Alta Disponibilidade é necessário instalar o Agente de Alta Disponibilidade em todas as máquinas que possuem uma instância de banco de dados PostgreSQL.
etcd
O etcd, Repositório de Configurações Distribuído, ou Distributed Configuration Store (DCS), do PostgreSYS, possibilita que os Agentes de Alta Disponibilidade compartilhem informações de configuração e estado de maneira confiável e consistente, crucial para manter a integridade e a disponibilidade das instâncias.
Projeto open source iniciado pela CoreOS, o etcd oferece um modelo de armazenamento chave-valor confiável, projetado especificamente para sistemas distribuídos críticos. Através do algoritmo de consenso Raft, este componente garante consistência e disponibilidade dos dados, mesmo em face de 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 operacional, 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 gravação 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 criptografada 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 em um 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.
![Cluster etcd](../_images/pgsys-etcd-exemplo.png)
Para ambientes de missão crítica, recomenda-se a configuração de um cluster etcd com um número ímpar de membros (3, 5, 7, etc.), garantindo 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 um intermediário entre as aplicações clientes e o banco de dados, reconhecendo e direcionando conexões para a instância master, considerando a saúde e a carga de cada servidor.
Projeto open source amplamente reconhecido por sua eficiência em balanceamento de carga TCP/HTTP, atua como um proxy reverso de alto desempenho para diversas aplicações. Destaca-se por:
-
Flexibilidade: Suporta diversos algoritmos de balanceamento de carga, incluindo round robin, least connections e source hashing.
-
Segurança: Implementa medidas robustas de segurança, como isolamento de processo, redução de privilégios e filtragem de tráfego, para proteger contra ataques.
-
Desempenho: Projetado para alta performance, capaz de lidar com milhares de conexões simultâneas com baixa latência.
-
Monitoramento e Logging: Fornece logs detalhados e métricas em tempo real para monitoramento e análise de desempenho.
![Ambiente de Alta Disponibilidade com HAPRoxy](../_images/pgsys-arquitetura-haproxy.png)
A arquitetura do HAProxy é otimizada para processamento rápido e eficiente de conexões de rede. Opera em um 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 entre vários núcleos de CPU, aumentando a capacidade de processamento e a 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 alterações no estado dos servidores de back-end, ajustando a distribuição do tráfego conforme necessário.