postgres postgresql topologia backup ha

Topologias

1 Ambiente descartável para teste e desenvolvimento

Ambiente mais simples, com o PostgreSQL primário, sem réplica, sem backup, sem proxy. É comum com ambientes de testes descartáveis ou ambientes de desenvolvedores. Impróprio para uso em produção.

Vantagens: simples; barato.

Desvantagens: falhas são fatais pela falta de backup; indisponibilidades podem ser longas pela falta de réplicas.

  ╔═══════════╗
  ║ Aplicação ║
  ╚═══════════╝
        │
        │
        ↓
  ┌──────────┐
╔═╡ Primário ╞═╗
║ └──────────┘ ║
╚══════════════╝

2 Ambiente simples

Ambiente simples, com o PostgreSQL primário, sem réplica, sem proxy, mas com backup em servidor distinto. É comum em sistemas pequenos e não-críticos.

Vantagens: simples; barato; tão confiável quanto o servidor de backup permitir.

Desvantagens: indisponibilidades podem ser longas pela falta de réplicas; desempenho depende de um único servidor.

  ╔═══════════╗
  ║ Aplicação ║
  ╚═══════════╝
        │
        │
        ↓
   ┌──────────┐
 ╔═╡ Primário ╞═╗
 ║ └──────────┘ ╟→┈┈┐
 ╚══════════════╝   ┊
         ╏          ┊
         ╏          ┊
         ╏          ↓
┏━━━━━━━━━━━━━━━━━━━┷━━━┓
┃   ┌───┐ ┌───┐ ┌───┐   ┃
┃  →└┤…├┘→└┤…├┘→└┤…├┘→  ┃
┠───↑─────↑─────↑────↑──┨
┃  ╔═══════╗ ╔═══════╗  ┃
┃  ╠══╗ ╔══╣ ╠══╗ ╔══╣  ┃
┃……╠══╝ ╚══╣…╠══╝ ╚══╣……┃
┃  ╠═════╗ ║ ╠═════╗ ║  ┃
┃  ╚═════╩═╝ ╚═════╩═╝  ┃
┃ ┌──────────────────┐  ┃
┗━┥Servidor de backup┝━━┛
  └──────────────────┘

3 Ambiente com réplica

Ambiente com o PostgreSQL primário, sem proxy, mas com backup em servidor distinto e réplica. A aplicação pode se conectar ao primário para executar transações de leitura e escrita e se conectar à réplica para executar transações de leitura, o que diminui a carga sobre o primário, que completa transações de escrita com menor pressão de recursos. A réplica também pode ser usada recuperação de desastres através da promoção manual a primário. É comum em sistemas de todos os portes.

Vantagens: Confiabilidade pelo backup em máquina distinta; disponibilidade pela réplica pronta para ser promovida se o primário sofrer uma falha; a réplica aceita parte da carga de leitura.

Desvantagens: o tempo de indisponibilidade depende do tempo do chaveamento manual (promoção do a réplica e redirecionamento da aplicação); uma réplica pode não ser suficiente para aliviar a carga sobre o primário.

             ╔═══════════╗
             ║ Aplicação ║
             ╚═══════════╝
         ┌───────┘  └─────────┐
         │                    │
         ↓                    ↓
   ┌──────────┐           ┌─────────┐
 ╔═╡ Primário ╞═╗       ╔═╡ Réplica ╞═╗
 ║ └──────────┘ ╟→┈┈┬┈┈→╢ └─────────┘ ║
 ╚══════════════╝   ┊   ╚═════════════╝
         ╏          ┊       ╏
         ╏          ┊       ╏
         ╏          ↓       ╏
      ┏━━━━━━━━━━━━━┷━━━━━━━━━┓
      ┃   ┌───┐ ┌───┐ ┌───┐   ┃
      ┃  →└┤…├┘→└┤…├┘→└┤…├┘→  ┃
      ┠───↑─────↑─────↑────↑──┨
      ┃  ╔═══════╗ ╔═══════╗  ┃
      ┃  ╠══╗ ╔══╣ ╠══╗ ╔══╣  ┃
      ┃……╠══╝ ╚══╣…╠══╝ ╚══╣……┃
      ┃  ╠═════╗ ║ ╠═════╗ ║  ┃
      ┃  ╚═════╩═╝ ╚═════╩═╝  ┃
      ┃ ┌──────────────────┐  ┃
      ┗━┥Servidor de backup┝━━┛
        └──────────────────┘
3.1 Ambiente com réplica e chaveamento automático

O tempo de indisponibilidade pode ser diminuído com chaveamento automático (failover), contanto que seja usado um algoritmo de consenso e uma quantidade ímpar de participantes. Para isso, é possível adicionar outra réplica, ou adicionar uma máquina própria como testemunha, ou mesmo atribuir o papel de testemunha ao servidor de backup.

             ╔═══════════╗
             ║ Aplicação ║
             ╚═══════════╝
         ┌───────┘  └─────────┐
         │                    │
         ↓        ╔═══╗       ↓
   ┌──────────┐   ║ W ║   ┌─────────┐
 ╔═╡ Primário ╞═╗↔╚═══╝↔╔═╡ Réplica ╞═╗
 ║ └──────────┘ ╟→┈┈┬┈┈→╢ └─────────┘ ║
 ╚══════════════╝   ┊   ╚═════════════╝
         ╏          ┊       ╏
         ╏          ┊       ╏
         ╏          ↓       ╏
      ┏━━━━━━━━━━━━━┷━━━━━━━━━┓
      ┃   ┌───┐ ┌───┐ ┌───┐   ┃
      ┃  →└┤…├┘→└┤…├┘→└┤…├┘→  ┃
      ┠───↑─────↑─────↑────↑──┨
      ┃  ╔═══════╗ ╔═══════╗  ┃
      ┃  ╠══╗ ╔══╣ ╠══╗ ╔══╣  ┃
      ┃……╠══╝ ╚══╣…╠══╝ ╚══╣……┃
      ┃  ╠═════╗ ║ ╠═════╗ ║  ┃
      ┃  ╚═════╩═╝ ╚═════╩═╝  ┃
      ┃ ┌──────────────────┐  ┃
      ┗━┥Servidor de backup┝━━┛
        └──────────────────┘
3.2 Ambiente com proxy

Adicionando um proxy, podemos evitar reconfigurar todas as instâncias de aplicação durante o chaveamento.

             ╔═══════════╗
             ║ Aplicação ║
             ╚═══════════╝
                 │  │
               ╔═══════╗
               ║ Proxy ║
               ╚═══════╝
         ┌───────┘  └─────────┐
         │                    │
         ↓                    ↓
   ┌──────────┐           ┌─────────┐
 ╔═╡ Primário ╞═╗       ╔═╡ Réplica ╞═╗
 ║ └──────────┘ ╟→┈┈┬┈┈→╢ └─────────┘ ║
 ╚══════════════╝   ┊   ╚═════════════╝
         ╏          ┊       ╏
         ╏          ┊       ╏
         ╏          ↓       ╏
      ┏━━━━━━━━━━━━━┷━━━━━━━━━┓
      ┃   ┌───┐ ┌───┐ ┌───┐   ┃
      ┃  →└┤…├┘→└┤…├┘→└┤…├┘→  ┃
      ┠───↑─────↑─────↑────↑──┨
      ┃  ╔═══════╗ ╔═══════╗  ┃
      ┃  ╠══╗ ╔══╣ ╠══╗ ╔══╣  ┃
      ┃……╠══╝ ╚══╣…╠══╝ ╚══╣……┃
      ┃  ╠═════╗ ║ ╠═════╗ ║  ┃
      ┃  ╚═════╩═╝ ╚═════╩═╝  ┃
      ┃ ┌──────────────────┐  ┃
      ┗━┥Servidor de backup┝━━┛
        └──────────────────┘

4 Ambiente com múltiplas réplicas

Ambiente com o PostgreSQL primário, com proxy, com backup em servidor distinto e múltiplas réplicas. A aplicação pode se conectar ao primário para executar transações de leitura e escrita e se conectar às réplicas para executar transações de leitura, o que diminui a carga sobre o primário, que completa transações de escrita com menor pressão de recursos. As réplicas também podem ser usadas recuperação de desastres através da promoção a primário. O failover automático é possível com uma quantidade ímpar de participantes e com a reconfiguração do proxy. É comum em sistemas com requisitos de disponibilidade estritos e de alto desempenho, tanto para cargas OLTP quanto OLAP.

Vantagens: Confiabilidade pelo backup em máquina distinta; alta disponibilidade pelas réplicas prontas para serem promovidas no evento de falha do primário; as réplicas permitem uma escalabilidade horizontal da carga de leitura.

Desvantagens: maior custo devido ao número de componentes (no mínimo 2*N+1 máquinas distintas, mais o servidor de backup); o primário pode sofrer com a replicação para os outros nós; complexidade.

             ╔═══════════╗
             ║ Aplicação ║
             ╚═══════════╝
                 │  │
               ╔═══════╗
               ║ Proxy ║
               ╚═══════╝
         ┌───────┘  └────────┬──┐
         │                   ↓  ↓
         │                ┌─────────┐
         │              ╔═╡ Réplica ╞═╗
         │          ┌┈┈→╢ └─────────┘ ║
         ↓          ┊   ╚═════════════╝
   ┌──────────┐     ┊     ┌─────────┐
 ╔═╡ Primário ╞═╗   ┊   ╔═╡ Réplica ╞═╗
 ║ └──────────┘ ╟→┈┈┼┈┈→╢ └─────────┘ ║
 ╚══════════════╝   ┊   ╚═════════════╝
         ╏          ┊       ╏
         ╏          ┊       ╏
         ╏          ↓       ╏
      ┏━━━━━━━━━━━━━┷━━━━━━━━━┓
      ┃   ┌───┐ ┌───┐ ┌───┐   ┃
      ┃  →└┤…├┘→└┤…├┘→└┤…├┘→  ┃
      ┠───↑─────↑─────↑────↑──┨
      ┃  ╔═══════╗ ╔═══════╗  ┃
      ┃  ╠══╗ ╔══╣ ╠══╗ ╔══╣  ┃
      ┃……╠══╝ ╚══╣…╠══╝ ╚══╣……┃
      ┃  ╠═════╗ ║ ╠═════╗ ║  ┃
      ┃  ╚═════╩═╝ ╚═════╩═╝  ┃
      ┃ ┌──────────────────┐  ┃
      ┗━┥Servidor de backup┝━━┛
        └──────────────────┘

5 Ambiente com replicação cascateada

Ambiente com o PostgreSQL primário, com proxy, com backup em servidor distinto e múltiplas réplicas cascateadas. A aplicação pode se conectar ao primário para executar transações de leitura e escrita e se conectar às réplicas para executar transações de leitura, o que diminui a carga sobre o primário, que completa transações de escrita com menor pressão de recursos. As réplicas também podem ser usadas recuperação de desastres através da promoção a primário. O failover automático é possível com uma quantidade ímpar de participantes e com a reconfiguração do proxy. O primário se encarrega da replicação apenas para a primeira réplica; esta é responsável por atender as outras replicações e geração de novos backups, aliviando o primário dessas funções. É comum em sistemas com requisitos de disponibilidade estritos e de alto desempenho, tanto para cargas OLTP quanto OLAP.

Vantagens: Confiabilidade pelo backup em máquina distinta; alta disponibilidade pelas réplicas prontas para serem promovidas no evento de falha do primário; as réplicas permitem uma escalabilidade horizontal da carga de leitura e pressão mínima no primário.

Desvantagens: maior custo devido ao número de componentes (no mínimo 2*N+1 máquinas distintas, mais o servidor de backup); complexidade.

            ╔═══════════╗
            ║ Aplicação ║
            ╚═══════════╝
                │  │
              ╔═══════╗
              ║ Proxy ║
              ╚═══════╝
        ┌───────┘  └───────────┬──────────────────┬─┬─┐
        │                      │                  │ │ │
        │                      │                  ↓ ↓ ↓
        │                      │               ┌─────────┐
        │                      │             ╔═╡ Réplica ╞═╗
        │                      │         ┌┈┈→╢ └─────────┘ ║
        │                      │         ┊   ╚═════════════╝
        │                      │         ┊     ┌─────────┐
        │                      │         ┊   ╔═╡ Réplica ╞═╗
        │                      │         ┊┈┈→╢ └─────────┘ ║
        ↓                      ↓         ┊   ╚═════════════╝
  ┌──────────┐           ┌─────────┐     ┊     ┌─────────┐
╔═╡ Primário ╞═╗       ╔═╡ Réplica ╞═╗   ┊   ╔═╡ Réplica ╞═╗
║ └──────────┘ ╟→┈┈┬┈┈→╢ └─────────┘ ╟→┈┈┴┈┈→╢ └─────────┘ ║
╚══════════════╝   ┊   ╚═════════════╝       ╚═════════════╝
                   ┊          ╏                       ╏
                   ┊          ╏                       ╏
                   ↓          ╏                       ╏
     ┏━━━━━━━━━━━━━┷━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓    ╏
     ┃ ┌───┐ ┌───┐ ┌───┐ ┌───┐ ┌───┐ ┌───┐ ┌───┐ ┃    ╏
     ┃→└┤…├┘→└┤…├┘→└┤…├┘→└┤…├┘→└┤…├┘→└┤…├┘→└┤…├┘→┃    ╏
     ┠──↑─────↑─────↑────↑─────↑──↑──────↑───↑───┨    ╏
     ┃  ╔═══════╗ ╔═══════╗ ╔═══════╗ ╔═══════╗  ┃    ╏
     ┃  ╠══╗ ╔══╣ ╠══╗ ╔══╣ ╠══╗ ╔══╣ ╠══╗ ╔══╣  ┃    ╏
     ┃……╠══╝ ╚══╣…╠══╝ ╚══╣…╠══╝ ╚══╣…╠══╝ ╚══╣……┃╺╍╍╍┛
     ┃  ╠═════╗ ║ ╠═════╗ ║ ╠═════╗ ║ ╠═════╗ ║  ┃
     ┃  ╚═════╩═╝ ╚═════╩═╝ ╚═════╩═╝ ╚═════╩═╝  ┃
     ┃           ┌──────────────────┐            ┃
     ┗━━━━━━━━━━━┥Servidor de backup┝━━━━━━━━━━━━┛
                 └──────────────────┘