05.11.2025

O que é o cluster Patroni e como funciona?

Patroni é um sistema de gerenciamento de cluster de alta disponibilidade para PostgreSQL, desenvolvido para automatizar o failover, a replicação e a manutenção da consistência entre os nós do banco de dados.
Inicialmente criado pela empresa Zalando, o Patroni é hoje uma das soluções mais populares para a construção de clusters PostgreSQL tolerantes a falhas.

O Patroni fornece comutação automática de papéis (primary/replica), monitora a integridade dos nós e mantém o cluster PostgreSQL operacional sem necessidade de intervenção manual do administrador.

Como é estruturado um cluster Patroni

O cluster Patroni é composto por vários componentes que interagem entre si:

Cada nó no cluster possui seu próprio daemon Patroni, que:

  1. Monitora o estado do PostgreSQL.
  2. Consulta o DCS para saber quem é o líder atual (primary).
  3. Pode assumir o papel de primary se o servidor principal ficar indisponível.

Princípio de funcionamento do Patroni

O funcionamento do Patroni baseia-se no conceito de eleição de líder (leader election) via DCS.

  1. Um dos nós recebe a “liderança” – torna-se o primary.
  2. Os outros nós sincronizam seus dados com o primary por meio da replicação interna do PostgreSQL.
  3. Se o líder falhar (por exemplo, o servidor ficar inacessível ou o banco não responder), o Patroni executa um failover automático:
    • Um novo líder é escolhido entre as réplicas disponíveis.
    • O cluster atualiza as informações no DCS.
    • Os aplicativos redirecionam as requisições para o novo primary (via HAProxy, PgBouncer ou outro software intermediário).

Assim, o Patroni garante tempo mínimo de inatividade e alta disponibilidade do banco de dados.

Recursos e vantagens do Patroni

Exemplo de topologia do Patroni

Um esquema simples de cluster Patroni pode ser assim:

+------------------+
| HAProxy |
| (balancer) |
+--------+---------+
|
+---------+---------+
| |
+------+-----+ +-------+------+
| PostgreSQL | | PostgreSQL |
| (Primary) | | (Replica) |
+------+-----+ +-------+------+
| |
+----+----+ +----+----+
| Patroni | | Patroni |
+----+----+ +----+----+
| |
+---------+---------+
|
+------+------+
| Etcd / |
| Consul |
+-------------+

Instalação e configuração do Patroni

O Patroni pode ser instalado via gerenciador de pacotes ou a partir do código-fonte:

pip install patroni[etcd]

Exemplo mínimo de configuração (/etc/patroni.yml):

scope: postgres name: node1

restapi:
listen: 0.0.0.0:8008
connect_address: 192.168.1.10:8008

etcd:
host: 192.168.1.100:2379

postgresql:
listen: 0.0.0.0:5432
connect_address: 192.168.1.10:5432
data_dir: /var/lib/postgresql/data
authentication:
replication:
username: repl
password: repl_pass
superuser:
username: postgres
password: admin_pass
parameters:
max_connections: 100
shared_buffers: 256MB

Após configurar todos os nós e iniciar o Patroni, o processo de coordenação e replicação ocorrerá automaticamente.

Conclusão: dicas práticas

O Patroni não é apenas uma camada sobre o PostgreSQL — é um sistema completo de gerenciamento do ciclo de vida de um cluster. Ele combina replicação, failover automático e configuração dinâmica, tornando-se essencial em ambientes de produção onde o tempo de inatividade é inaceitável.

Tecnicamente, o Patroni atua como um “coordenador” entre os nós do PostgreSQL, sincronizando o estado via armazenamento distribuído (Etcd, Consul ou ZooKeeper). Isso permite:

Para maior resiliência em produção, recomenda-se:

  1. Implantar pelo menos três nós PostgreSQL e três nós DCS (por exemplo, Etcd);
  2. Configurar HAProxy ou PgBouncer para rotear conexões de clientes;
  3. Realizar testes regulares de failover e backups dos arquivos WAL;
  4. Monitorar via Prometheus Exporter, incluído no Patroni.

O Patroni funciona muito bem com ferramentas como pgBackRest, Grafana, Ansible e Kubernetes, formando uma base confiável para infraestruturas modernas em nuvem.

FAQ