O PgBouncer é um pool de conexões leve para PostgreSQL.
O PgBouncer 1.6 foi anunciado em 1º de agosto de 2015. Nesta postagem do blog, falaremos sobre as principais melhorias no PgBouncer.
Principais novos recursos do PgBouncer
Carregar hash de senha do usuário do banco de dados postgres
PgBouncer agora permite carregar a senha do usuário do banco de dados com dois parâmetros de configuração que são auth_user e auth_query .
- auth_user
Se auth_user for definido, qualquer usuário não especificado em auth_file será consultado em pg_shadow no banco de dados usando auth_user. A senha do Auth_user será retirada de auth_file. Este parâmetro também pode ser definido por banco de dados.
- auth_query
Este parâmetro nos permite escrever uma consulta SQL para carregar a senha do usuário do banco de dados. Ele é executado em auth_user. Veja a consulta padrão abaixo:
SELECT usename, passwd FROM pg_shadow WHERE usename=$1
O modo de pool pode ser configurado por banco de dados e por usuário
Com esse recurso, independente do modo de pool principal, os clientes agora podem se conectar a diferentes bancos de dados com um dos 3 modos de pool descritos abaixo. Isso também se aplica aos usuários. Por exemplo, se o modo de pooling for pooling de sessões, um usuário específico poderá ser configurado para usar pooling de transações. Isso nos dá flexibilidade no nível do banco de dados e no nível do usuário para aplicar opções de pooling mais apropriadas.
O PgBouncer fornece 3 modos de pool de conexão:
- Agrupamento de sessões
Durante o tempo de vida de uma conexão de cliente, uma conexão de servidor existente é atribuída ao cliente e, depois que o cliente se desconecta, a conexão de servidor atribuída é colocada de volta no pool de conexões. - Agrupamento de transações
Nesse modo, uma conexão de servidor não é atribuída a um cliente conectado imediatamente, mas apenas durante uma transação. Assim que a transação termina, a conexão é colocada de volta no pool. - Agrupamento de extratos
Isso é semelhante ao pool de transações, mas é mais agressivo. Um back-end é atribuído sempre que qualquer consulta de instrução única é emitida. Quando a instrução termina, a conexão é colocada novamente no pool.
Limites de conexão por banco de dados e por usuário:max_db_connections e max_user_connections
Com esse recurso, agora podemos controlar também os limites de conexão por banco de dados/nível de usuário com os dois novos parâmetros, que são max_db_connections e max_user_connections .
- max_db_connections
Este parâmetro não permite mais do que as conexões especificadas por banco de dados (independentemente do pool, ou seja, usuário).
O valor padrão desse parâmetro é ilimitado. - max_user_connections
Este parâmetro não permite mais do que as conexões especificadas por usuário (independentemente do pool – ou seja, usuário).
Adicione comandos DISABLE/ENABLE para evitar novas conexões
Com este recurso o PgBouncer tem ENABLE/DISABLE db; comandos para evitar novas conexões.
- DESATIVAR banco de dados;
Este comando rejeita todas as novas conexões de cliente no banco de dados fornecido. - ATIVAR banco de dados;
Este comando permite novas conexões de cliente após um DISABLE anterior comando.
Novo back-end DNS preferencial:c-ares
c-ares é o único backend DNS que suporta todos os recursos interessantes:/etc/hosts com atualização, pesquisa SOA, respostas grandes (via TCP/EDNS+UDP), IPv6. É o back-end preferido agora e provavelmente será o único back-end no futuro.
Os arquivos de configuração têm a diretiva '%include FILENAME' para permitir que a configuração seja dividida em vários arquivos
Com este recurso, o PgBouncer tem suporte para inclusão de arquivos de configuração dentro de outros arquivos de configuração.
Em outras palavras, o arquivo de configuração do PgBouncer pode conter diretivas de inclusão, que especificam outro arquivo de configuração para ler e processar. Isso permite dividir um arquivo de configuração grande em arquivos menores e mais gerenciáveis. As diretivas include são assim:
%include filename
Se o nome do arquivo não for o caminho absoluto, ele será considerado relativo ao diretório de trabalho atual.
Há mais recursos lançados nesta versão. Você pode visitar a página de registro de alterações do PgBouncer ou verificar a lista abaixo para outras melhorias:
- Mostrar remote_pid em MOSTRAR CLIENTES/SERVIDORES. Disponível para clientes que se conectam em soquetes unix e servidores de soquete tcp e unix. No caso do servidor tcp, o pid é obtido da chave de cancelamento.
- Adicione um parâmetro de configuração separado (dns_nxdomain_ttl) para controlar o cache de DNS negativo.
- Adicione o endereço IP do host do cliente e a porta ao application_name. Isso é ativado por um parâmetro de configuração application_name_add_host cujo padrão é 'off'.
O que é o PgBouncer?
PgBouncer é um utilitário para gerenciar conexões de clientes com o banco de dados PostgreSQL. Em poucas palavras, ele mantém um pool de conexões com o servidor PostgreSQL e reutiliza essas conexões existentes. Embora isso possa ser útil para reduzir a sobrecarga de conexão do cliente, também permite limitar o número máximo de conexões abertas com o servidor de banco de dados. Ele também pode ser usado para modelagem de tráfego, como redirecionar conexões para um ou mais bancos de dados para diferentes servidores de banco de dados. Além disso, o PgBouncer pode ser usado para gerenciar a segurança no nível do usuário e até mesmo no nível do banco de dados.
Veja o diagrama abaixo que mostra a arquitetura do PgBouncer de uma forma mais visual.
Neste exemplo em particular, os aplicativos clientes são conectados a instâncias separadas do PgBouncer, onde seriam conectados diretamente aos servidores de banco de dados PostgreSQL. Os servidores de banco de dados “DB Server 1” e “DB Server 2” podem ser instâncias PostgreSQL independentes ou podem fazer parte de um cluster com funções diferentes (por exemplo, master/replica ou write-master/backup-master, etc.).
Cada instância do PgBouncer mantém um pool de conexões com várias conexões abertas para servidores PostgreSQL. Como pode ser visto no exemplo, o PgBouncers permite criar pools com conexões com diferentes bancos de dados e até mesmo conexões com diferentes servidores de banco de dados.
Para mais informações
Você pode visitar o site principal do PgBouncer: http://pgbouncer.github.io/
Eles têm uma boa página de perguntas frequentes: http://pgbouncer.github.io/faq.html
Você pode dar uma olhada no repositório Github do projeto: http://github.com/pgbouncer/pgbouncer