Middle+
Qual método de garantia de alta disponibilidade do PostgreSQL você escolheria?
sobes.tech IA
Resposta da IA
A escolha do método de alta disponibilidade para PostgreSQL depende dos requisitos específicos de disponibilidade, orçamento e tolerância à perda de dados (RPO/RTO). As abordagens principais:
-
Replicação (Replication):
- Vantagens: Relativamente fácil de configurar, bom desempenho de leitura com réplicas.
- Desvantagens: Requer failover manual ou automatizado, o nó mestre é um ponto único de falha na escrita.
- Tipos: Replicação em streaming (síncrona/assíncrona), Replicação lógica.
-
Clusters (Clustering):
- Vantagens: Failover automático, alta disponibilidade.
- Desvantagens: Complexidade na configuração e gestão, requer software adicional (Patroni, Repmgr, Corosync/Pacemaker).
- Exemplos: Patroni + DCS (etcd, ZooKeeper, Consul), Repmgr.
-
Bases de dados distribuídas (Distributed Databases):
- Vantagens: Alta disponibilidade, escalabilidade horizontal.
- Desvantagens: Complexidade arquitetónica, requer alterações no desenvolvimento de aplicações (sharding, transações).
- Exemplos: CitusData (extensão para PostgreSQL).
Abordagem recomendada:
Para a maioria dos casos padrão, escolheria Replicação em streaming juntamente com um gestor de cluster como Patroni.
- Replicação em streaming (assíncrona ou síncrona dependendo do RPO): Proporciona cópias atualizadas dos dados nas réplicas.
- Patroni: Automatiza o processo de failover e switchover, detecta falhas no nó mestre e promove uma réplica a mestre. Utiliza armazenamento distribuído (por exemplo,
etcd) para coordenação e armazenamento do estado do cluster.
Exemplo de arquitetura:
- 1 nó mestre PostgreSQL
- N réplicas PostgreSQL (mínimo 1 para alta disponibilidade)
- Cluster
etcd(mínimo 3 nós para quórum) - Processos Patroni em todos os nós PostgreSQL
- Load Balancer (HAProxy, Nginx) para distribuir o tráfego de leitura às réplicas e direcionar as escritas ao mestre atual.
Vantagens desta abordagem:
- Failover automático, minimizando o RTO.
- Manutenção da consistência dos dados (depende do tipo de replicação).
- Escalabilidade simples adicionando réplicas.
- Capacidade de ler dados das réplicas, reduzindo a carga no mestre.
Também deve considerar:
- Cópias de segurança (Backups): Não substituem a alta disponibilidade, mas são críticas para recuperação após erros lógicos ou desastres. Usar
pg_basebackupouwal-g. - Monitoramento: Essencial para detectar problemas a tempo (Prometheus + Grafana, Zabbix).
- Testes de failover: Testar regularmente o procedimento para garantir seu funcionamento.
A configuração específica (número de réplicas, replicação síncrona/assíncrona) é determinada pelos requisitos de negócio em disponibilidade e perda de dados aceitável.