PgBouncer es un agrupador de conexiones ligero para PostgreSQL. PgBouncer 1.7 se anunció el 18 de diciembre de 2015. En esta publicación de blog, hablaremos sobre las principales mejoras nuevas en PgBouncer.
Las características más coloridas
- PgBouncer 1.7 admite conexiones TLS y creo que esta es la mayor mejora de la nueva versión. Utilizaron bibliotecas OpenSSL/LibreSSL como implementación de back-end de la característica.
- PgBouncer ahora admite autenticación mediante certificado de cliente TLS .
Profundicemos en los detalles de la configuración de TLS de PgBouncer. Hay 14 parámetros de configuración relacionados con la configuración de TLS (configuración del lado del cliente + del lado del servidor).
Para asignar qué modo TLS usar para las conexiones de los clientes, debemos configurar client_tls_sslmode parámetro. Las conexiones TLS están deshabilitadas de forma predeterminada. Cuando está habilitado, client_tls_key_file y client_tls_cert_file también debe configurarse para configurar la clave y certificar que PgBouncer usa para aceptar conexiones de clientes.
Podemos asignar un certificado raíz para validar los certificados de los clientes configurando client_tls_ca_file parámetro, por defecto no está configurado.
Podemos especificar qué versiones del protocolo TLS están permitidas configurando client_tls_protocols parámetro, el valor predeterminado es todo.
Para obtener una configuración más detallada del lado del cliente, puede consultar client_tls_ciphers , client_tls_ecdhcurve y client_tls_dheparams parámetros.
Ahora, hablemos de los parámetros de configuración del lado del servidor TLS. Primero, debemos declarar el modo TLS para usar en conexiones a servidores PostgreSQL con server_tls_sslmode parámetro. Las conexiones TLS están deshabilitadas de forma predeterminada. Podemos asignar un servidor CA con server_tls_ca_file parámetro. Si deseamos asignar una clave privada para que PgBouncer se autentique en el servidor PostgreSQL, podemos usar server_tls_key_file parámetro, incluso podemos asignar un certificado para la clave privada que el servidor PostgreSQL puede validar con server_tls_cert_file parámetro. Al igual que hicimos en la configuración de conexión TLS del lado del cliente, podemos declarar qué versiones del protocolo TLS están permitidas con server_tls_protocols parámetro.
- Después de la compatibilidad con TLS, otra característica nueva importante es la compatibilidad con la autenticación de "par" en zócalos Unix.
- Como última característica importante de esta versión, me gustaría mencionar la compatibilidad con el archivo de control de acceso basado en host, como pg_hba.conf en Postgres. Esto permite configurar TLS para conexiones de red y autenticación "peer" para conexiones locales.
Podemos configurar cómo autenticar usuarios con auth_type parámetro de PgBouncer. Todos los parámetros de configuración se definen en el archivo de configuración pgbouncer.ini. Veamos los detalles de auth_type parámetro.
tipo_autenticación El parámetro se puede asignar a uno de los 6 valores enumerados a continuación. Veamos las explicaciones y el uso de estos valores.
- hba: Si configuramos el parámetro auth_type con el valor hba , debemos configurar auth_hba_file parámetro también para mostrar qué pg_hba.conf El archivo se utilizará como una configuración. Al hacer esto, permitimos que el tipo de autenticación real se cargue desde auth_hba_file. Esto significa que podemos usar diferentes métodos de autenticación para diferentes rutas de acceso. Por ejemplo, con la conexión de la versión 1.7 a través del socket de Unix, use el método de autenticación de pares, al mismo tiempo, la conexión a través de TCP debe usar TLS. Hasta ahora, el formato de archivo HBA no es compatible con todos los métodos de autenticación de pg_hba.conf. Los métodos admitidos son:confianza, rechazo, md5, contraseña, igual y certificado.
- certificado: El cliente debe conectarse a través de TLS conexión con certificado de cliente válido. Luego, el nombre de usuario se toma de CommonName campo del certificado.
- md5: Use la verificación de contraseña basada en MD5. archivo_autorización (el nombre del archivo para cargar nombres de usuario y contraseñas ) puede contener contraseñas cifradas con MD5 o de texto sin formato. Este es el método de autenticación predeterminado.
- simple: La contraseña de texto sin cifrar se envía por cable. En desuso.
- confianza : No se realiza ninguna autenticación. El nombre de usuario aún debe existir en auth_file .
- cualquiera: Como el método de confianza, pero se ignora el nombre de usuario proporcionado. Requiere que todas las bases de datos estén configuradas para iniciar sesión como usuario específico. Además, la base de datos de la consola permite que cualquier usuario inicie sesión como administrador.
Otras características brillantes
Hay más funciones lanzadas en esta versión. Puede visitar la página de registro de cambios de PgBouncer o consultar la lista a continuación para ver otras mejoras:
- Establecer query_wait_timeout a 120 por defecto. Este parámetro define el tiempo máximo que las consultas pueden esperar para ejecutarse. Si la consulta no se asigna a un servidor durante ese tiempo, el cliente se desconecta. Esto se usa para evitar que los servidores que no responden tomen conexiones. También ayuda cuando el servidor está inactivo o la base de datos rechaza las conexiones por cualquier motivo. Si esto está deshabilitado, los clientes se pondrán en cola infinitamente. El valor predeterminado actual (0) provoca colas infinitas, lo que no es útil. Con la versión 1.7, si el cliente tiene una consulta pendiente y no se ha asignado a la conexión del servidor, la conexión del cliente se interrumpirá después de 120 segundos de forma predeterminada.
- Deshabilitar server_reset_query_always por defecto. Ahora la consulta de restablecimiento se usa solo en grupos que están en modo de sesión.
- Aumentar pkt_buf a 4096 bytes. Mejora el rendimiento con TLS . El comportamiento es probablemente específico de la carga, pero debería ser seguro hacerlo, ya que desde la versión 1.2, los búferes de paquetes se separan de las conexiones y se usan de forma perezosa desde el grupo.
- Se esperaba un recuento de canalización de soporte ReadyForQuery paquetes Esto evita liberar el servidor demasiado pronto. Arreglos #52.
- Mejorado sbuf_loopcnt lógica:se garantiza que el socket se reprocesará incluso si no hay ningún evento del socket. Obligatorio para TLS ya que tiene su propio almacenamiento en búfer.
- Adapte las pruebas del sistema para que funcionen con BSD moderno y MacOS . (Eric Radman )
- Eliminar cripta aut. Está obsoleto y no es compatible con PostgreSQL desde 8.4 .
- Arregle el simple “–con-cuidado” opción de configuración:sin argumentos, se rompió.
¿Qué es PgBouncer?
PgBouncer es una utilidad para administrar conexiones de clientes a la base de datos PostgreSQL. En pocas palabras, mantiene un grupo de conexiones con el servidor PostgreSQL y reutiliza esas conexiones existentes. Si bien esto puede ser útil para reducir la sobrecarga de la conexión del cliente, también permite limitar la cantidad máxima de conexiones abiertas al servidor de la base de datos. También se puede usar para dar forma al tráfico, como redirigir conexiones a una o más bases de datos a diferentes servidores de bases de datos. Además de estos, PgBouncer se puede usar para administrar la seguridad en el usuario e incluso en el nivel de la base de datos.
¡Puedes descargar PgBouncer a través de su página de descargas y comenzar a usarlo ahora!
Para obtener más información sobre PgBouncer, puede consultar mi publicación de blog anterior sobre PgBouncer.
¡Felices lecturas!