Pool de conexões com PgBouncer
PostgreSQLNível: IntermediárioDuração: 30–45 minInstalação do PgBouncer a partir do repositório PGDG: modo de pool transaction ou session, autenticação scram-sha-256 via auth_query (função SECURITY DEFINER) ou userlist.txt, tamanhos de pool calculados a partir do max_connections e do número de CPUs do banco, systemd e, opcionalmente, vários processos com so_reuseport. Termina com o console de administração (SHOW POOLS/STATS), a string de conexão da aplicação e um checklist de compatibilidade com o modo transaction.
Quando usar: as aplicações abrem centenas ou milhares de conexões, aparece sorry, too many clients already ou abrir conexões é caro. O PgBouncer não é solução de HA nem de backup: para failover é preciso streaming replication ou Patroni; para backup, pgBackRest.
Topologia: PgBouncer no servidor do banco ou em servidor separado; com Patroni, na frente do HAProxy/VIP
Antes de começar
- O PostgreSQL está instalado com o guia pg-install e em execução; o banco … e o usuário … (com senha scram-sha-256) existem.
- PostgreSQL: …o cluster Patroni (pg-patroni) está em execução e … é o Leader no momento…o primary (pg-streaming) está em execução…instalado com o guia pg-install e em execução…; o banco … e o usuário … (com senha scram-sha-256) existem.
- O cluster Patroni … está saudável: um Leader, réplicas em streaming; a porta de escrita do HAProxy (…:…) encaminha só para o leader.
- A senha do usuário da aplicação está armazenada como SCRAM-SHA-256 (usuários com hashes md5 antigos precisam ter a senha redefinida com password_encryption = scram-sha-256).
- Os valores de max_connections (…) e CPU (…) do formulário são iguais aos valores reais do servidor do banco (os tamanhos de pool são calculados a partir deles).
- O servidor PgBouncer alcança o banco (…HAProxy/VIP ……:…); os servidores de aplicação alcançam o PgBouncer (…:…).
- A porta … está livre.
- O modo de pool foi combinado com a equipe da aplicação: no modo transaction, recursos que dependem de estado de sessão (checklist abaixo) não são usados.
- Há acesso scp (root ou usuário com sudo) para copiar os hashes de senha do servidor do banco para o servidor PgBouncer, ou você vai levar o arquivo por outro meio seguro.
Fases do guia
- Instalação do PgBouncer — Adicionar o repositório PGDG · Adicionar o repositório PGDG · Instalar o PgBouncer
- Lado do banco — Verificar o papel: este servidor é o …Leader…primary…? · Criar os usuários de administração e de autenticação · Criar os usuários de administração e de autenticação · Definir as senhas · Definir as senhas · Adicionar o servidor PgBouncer ao pg_hba.conf …
- Configuração do PgBouncer — Adicionar a senha do auth_user · Escrever o pgbouncer.ini · Definir o limite de descritores de arquivo · Iniciar o PgBouncer
- Vários processos (so_reuseport) — Arquivos de configuração por processo · Serviço template do systemd · Parar o serviço de processo único e iniciar os processos
- Verificação — Conectar com o usuário da aplicação · Verificar que as conexões chegam ao leader · Verificar o console de administração · Abrir a porta do PgBouncer no firewall
- Lado da aplicação e pós-instalação — String de conexão da aplicação · Checklist de compatibilidade do modo transaction · Monitorar o pool · Alteração de configurações e reload