Skip to content

Bachelor's Thesis project focusing on the quantitative analysis and implementation of a PostgreSQL HA cluster with Patroni, etcd, and Pgpool-II.

License

Notifications You must be signed in to change notification settings

richwrd/postgres-ha-cluster-lab

Repository files navigation

Cluster PostgreSQL de Alta Disponibilidade com Patroni, etcd e Pgpool-II

Projeto de Trabalho de Conclusão de Curso focado na implementação e análise de uma arquitetura de alta disponibilidade para PostgreSQL usando ferramentas open-source em um ambiente containerizado com Docker.

Banner

🚀 Sobre o Projeto

Cluster PostgreSQL de alta disponibilidade desenvolvido como TCC, implementando uma arquitetura resiliente a falhas com ferramentas open-source em ambiente containerizado.

Componentes Principais

  • PostgreSQL (3 nós) + Patroni: Replicação streaming e failover automático
  • etcd (3 nós): Coordenação distribuída e eleição de líder
  • PgPool-II: Proxy com balanceamento de carga e roteamento inteligente
  • Prometheus Exporters: Monitoramento de métricas

Funcionalidades

✅ Failover automático e recuperação rápida
✅ Balanceamento de carga para leituras
✅ Replicação streaming assíncrona
✅ Testes automatizados de resiliência (RTO/RPO)
✅ Testes de performance com pgbench

📋 Pré-requisitos

  • Arquitetura ARM64 (projeto otimizado para ARM)
  • Docker 20.10+ e Docker Compose v2.20+
  • Python 3.10+ (para testes)
  • Mínimo: 4 CPU cores, 8GB RAM, 20GB disco

Veja os detalhes completos em docs/QUICK-START.md

🛠️ Começando

# Clone e configure
git clone https://github.com/richwrd/postgres-ha-cluster-lab
cd postgres-ha-cluster-lab
cp .env.example .env

# Crie diretórios e suba o cluster
./scripts/create_data_dirs.sh
docker compose up -d

# Verifique a saúde
./scripts/health_checks/check_cluster_status.sh

📖 Guia completo: docs/QUICK-START.md

🧪 Testes

# Configurar ambiente
cd pytest
python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt

# Testes de resiliência
./scripts/test/run-crash-up.sh  # RTO
pytest tests/resilience/test_rpo_primary_failure.py -v -s  # RPO

# Testes de performance
sudo ./scripts/test/run-benchmark-baseline.sh  # Baseline
sudo ./scripts/test/run-benchmark-cluster.sh   # Cluster

📖 Documentação completa: docs/TESTES.md

📊 Estrutura do Projeto

postgres-ha-cluster-lab/
├── docker-compose*.yaml       # Configuração Docker modular
├── infra/                     # Dockerfiles e configs (Patroni, PgPool)
├── pytest/                    # Framework de testes
├── scripts/                   # Utilitários e health checks
└── docs/                      # Documentação técnica

📚 Documentação

Guias de Uso

Documentação Técnica

Framework de Testes

🎯 Casos de Uso

Exemplos práticos de uso do cluster:

  • Failover Automático: Simule falhas e observe a recuperação
  • Benchmark de Performance: Compare nó único vs. cluster
  • Análise de Resiliência: Meça RTO e RPO
  • Balanceamento de Carga: Distribua leituras entre réplicas
  • Switchover Planejado: Troca de líder sem downtime

📖 Guia completo com exemplos: docs/CASOS-DE-USO.md

🔍 Monitoramento

Exporters Prometheus disponíveis:

  • PostgreSQL: patroni-postgres-X:9187/metrics
  • Patroni API: patroni-postgres-X:8008/metrics
  • etcd: etcd-X:2379/metrics
  • PgPool: pgpool:9719/metrics

Guia completo de configuração com Prometheus e Grafana em breve.

🤝 Contribuindo

Contribuições são bem-vindas! Por favor:

  1. Fork o projeto
  2. Crie uma branch para sua feature (git checkout -b feature/AmazingFeature)
  3. Commit suas mudanças (git commit -m 'Add some AmazingFeature')
  4. Push para a branch (git push origin feature/AmazingFeature)
  5. Abra um Pull Request

🔗 Links Úteis


Se este projeto foi útil para você, considere dar uma estrela no repositório!


📝 License

This project is licensed under the MIT License - see the LICENSE file for details.

👤 Author

Eduardo Richard (richwrd)

GitHub LinkedIn Buy Me A Coffee

Built with ❤️ for the PostgreSQL community

About

Bachelor's Thesis project focusing on the quantitative analysis and implementation of a PostgreSQL HA cluster with Patroni, etcd, and Pgpool-II.

Topics

Resources

License

Stars

Watchers

Forks