PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

PgBouncer 1.7 – “As cores variam após a ressurreição”


O PgBouncer é um pool de conexões leve para PostgreSQL. O PgBouncer 1.7 foi anunciado em 18 de dezembro de 2015. Nesta postagem do blog, falaremos sobre as principais novas melhorias no PgBouncer.

Os recursos mais coloridos

  • PgBouncer 1.7 suporta conexões TLS e, eu acho que esta é a maior melhoria da nova versão. Eles usaram bibliotecas OpenSSL/LibreSSL como implementação de back-end do recurso.
  • PgBouncer agora suporta autenticação por meio de certificado de cliente TLS .

Vamos nos aprofundar nos detalhes das configurações de TLS do PgBouncer. Existem 14 parâmetros de configuração relacionados à configuração do TLS (configurações do lado do cliente + do lado do servidor).

Para atribuir qual modo TLS usar para conexões de clientes, devemos definir client_tls_sslmode parâmetro. As conexões TLS são desabilitadas por padrão. Quando ativado, client_tls_key_file e client_tls_cert_file também deve ser configurado para configurar a chave e o certificado que o PgBouncer usa para aceitar conexões de clientes.

Podemos atribuir um certificado raiz para validar certificados de cliente definindo client_tls_ca_file parâmetro, o padrão não está definido.

Podemos especificar quais versões do protocolo TLS são permitidas definindo client_tls_protocols parâmetro, o padrão é tudo.

Para configurações mais detalhadas do lado do cliente, você pode verificar client_tls_ciphers , client_tls_ecdhcurve e client_tls_dheparams parâmetros.

Agora, vamos falar sobre os parâmetros de configuração do lado do servidor TLS. Primeiro, precisamos declarar o modo TLS para usar em conexões com servidores PostgreSQL com server_tls_sslmode parâmetro. As conexões TLS são desabilitadas por padrão. Podemos atribuir o servidor CA com server_tls_ca_file parâmetro. Se quisermos atribuir uma chave privada para o PgBouncer autenticar no servidor PostgreSQL, podemos usar server_tls_key_file parâmetro, podemos até atribuir um certificado para chave privada que o servidor PostgreSQL pode validar com server_tls_cert_file parâmetro. Como fizemos nas configurações de conexão TLS do lado do cliente, podemos declarar quais versões do protocolo TLS são permitidas com server_tls_protocols parâmetro.
  • Após o suporte a TLS, outro novo recurso significativo é o suporte para autenticação "peer" em soquetes Unix.
  • Como último recurso importante desta versão, gostaria de mencionar o suporte ao arquivo de controle de acesso baseado em host, como pg_hba.conf no Postgres. Isso permite configurar TLS para conexões de rede e autenticação "peer" para conexões locais.

Podemos configurar como autenticar usuários com auth_type parâmetro do PgBouncer. Todos os parâmetros de configuração são definidos no arquivo de configuração pgbouncer.ini. Vamos analisar os detalhes de auth_type parâmetro.

auth_type parâmetro pode ser atribuído a um dos 6 valores listados abaixo. Vamos ver as explicações e o uso desses valores.
  • hba: Se definirmos o parâmetro auth_type com o valor hba , devemos definir auth_hba_file parâmetro também para mostrar qual pg_hba.conf arquivo será usado como uma configuração. Ao fazer isso, permitimos que o tipo de autenticação real seja carregado de auth_hba_file. Isso significa que podemos usar diferentes métodos de autenticação para diferentes caminhos de acesso. Por exemplo, com a conexão da versão 1.7 sobre o soquete Unix, use o método de autenticação de mesmo nível, ao mesmo tempo, a conexão sobre TCP deve usar TLS. Até agora, o formato de arquivo HBA não suporta todos os métodos de autenticação do pg_hba.conf. Os métodos suportados são:confiança, rejeição, md5, senha, par e certificado.
  • certificado: O cliente deve se conectar por TLS conexão com certificado de cliente válido. O nome de usuário é então obtido de CommonName campo do certificado.
  • md5: Use a verificação de senha baseada em MD5. auth_file (o nome do arquivo para carregar nomes de usuário e senhas ) pode conter senhas criptografadas em MD5 ou em texto simples. Este é o método de autenticação padrão.
  • simples: A senha de texto simples é enviada por fio. Obsoleto.
  • confiança: Nenhuma autenticação é feita. O nome de usuário ainda deve existir em auth_file .
  • qualquer: Como o método trust, mas o nome de usuário fornecido é ignorado. Requer que todos os bancos de dados estejam configurados para efetuar login como usuário específico. Além disso, o banco de dados do console permite que qualquer usuário faça login como administrador.

Outros recursos brilhantes


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:
  • Definir query_wait_timeout para 120s por padrão. Este parâmetro define o tempo máximo que as consultas podem passar aguardando a execução. Se a consulta não for atribuída a um servidor durante esse período, o cliente será desconectado. Isso é usado para evitar que servidores que não respondem capturem conexões. Também ajuda quando o servidor está inativo ou o banco de dados rejeita conexões por qualquer motivo. Se estiver desabilitado, os clientes serão enfileirados infinitamente. O padrão atual (0) causa fila infinita, o que não é útil. Com a versão 1.7, se o cliente tiver uma consulta pendente e não tiver sido atribuído à conexão do servidor, a conexão do cliente será interrompida após 120 segundos por padrão.
  • Desabilitar server_reset_query_always por padrão. Agora, a consulta de redefinição é usada apenas em pools que estão no modo de sessão.
  • Aumentar pkt_buf para 4096 bytes. Melhora o desempenho com TLS . O comportamento provavelmente é específico da carga, mas deve ser seguro fazer isso, pois desde a v1.2 os buffers de pacote são divididos das conexões e usados ​​preguiçosamente do pool.
  • Contagem de pipeline de suporte esperada ReadyForQuery pacotes. Isso evita liberar o servidor muito cedo. Correções nº 52.
  • Melhorado sbuf_loopcnt logic – o socket é garantido para ser reprocessado mesmo se não houver nenhum evento do socket. Obrigatório para TLS pois tem seu próprio buffer.
  • Adapte os testes do sistema para trabalhar com o moderno BSD e MacOS . (Eric Radman )
  • Remover cripta autenticação É obsoleto e não é suportado pelo PostgreSQL desde 8.4 .
  • Corrigir simples “–com cuidado” opção configure - sem argumento foi quebrado.

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 em nível de usuário e até mesmo em nível de banco de dados.

Você pode baixar o PgBouncer através da página de downloads e começar a usá-lo agora!

Para mais informações sobre o PgBouncer, você pode conferir meu post anterior sobre o PgBouncer.

Boas leituras!