postgres postgresql topologia backup ha
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 ╞═╗
║ └──────────┘ ║
╚══════════════╝
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┝━━┛
└──────────────────┘
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┝━━┛
└──────────────────┘
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┝━━┛
└──────────────────┘
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┝━━┛
└──────────────────┘
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┝━━┛
└──────────────────┘
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┝━━━━━━━━━━━━┛
└──────────────────┘