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┝━━━━━━━━━━━━┛ └──────────────────┘