sql >> Database >  >> RDS >> PostgreSQL

PgBouncer 1.7 - "Kleuren variëren na opstanding"

PgBouncer is een lichtgewicht verbindingspooler voor PostgreSQL. PgBouncer 1.7 werd aangekondigd op 18 december 2015. In deze blogpost zullen we het hebben over de belangrijkste nieuwe verbeteringen in PgBouncer.

De meest kleurrijke functies

  • PgBouncer 1.7 ondersteunt TLS-verbindingen en ik denk dat dit de grootste verbetering is van de nieuwe release. Ze gebruikten OpenSSL/LibreSSL-bibliotheken als backend-implementatie van de functie.
  • PgBouncer ondersteunt nu authenticatie via TLS-clientcertificaat .

Laten we ingaan op de details van TLS-instellingen van PgBouncer. Er zijn 14 configuratieparameters gerelateerd aan de TLS-configuratie (client-side + server-side instellingen).

Om toe te wijzen welke TLS-modus moet worden gebruikt voor verbindingen van clients, moeten we client_tls_sslmode instellen parameter. TLS-verbindingen zijn standaard uitgeschakeld. Indien ingeschakeld, client_tls_key_file en client_tls_cert_file moet ook worden geconfigureerd om de sleutel en het certificaat in te stellen dat PgBouncer gebruikt om clientverbindingen te accepteren.

We kunnen een rootcertificaat toewijzen om clientcertificaten te valideren door client_tls_ca_file in te stellen parameter, standaard is uitgeschakeld.

We kunnen specificeren welke TLS-protocolversies zijn toegestaan ​​door client_tls_protocols in te stellen parameter, standaard is alles.

Voor meer gedetailleerde client-side instellingen, kun je client_tls_ciphers . raadplegen , client_tls_ecdhcurve en client_tls_dheparams parameters.

Laten we het nu hebben over TLS-configuratieparameters aan de serverzijde. Eerst moeten we de TLS-modus aangeven om te gebruiken voor verbindingen met PostgreSQL-servers met server_tls_sslmode parameter. TLS-verbindingen zijn standaard uitgeschakeld. We kunnen een CA-server toewijzen met server_tls_ca_file parameter. Als we een privésleutel voor PgBouncer willen toewijzen om te authenticeren tegen de PostgreSQL-server, kunnen we server_tls_key_file gebruiken parameter, kunnen we zelfs een certificaat toewijzen voor een privésleutel die de PostgreSQL-server kan valideren met server_tls_cert_file parameter. Net als bij de instellingen voor de TLS-verbinding aan de clientzijde, kunnen we aangeven welke TLS-protocolversies zijn toegestaan ​​met server_tls_protocols parameter.

  • Na TLS-ondersteuning is een andere belangrijke nieuwe functie ondersteuning voor peer-authenticatie op Unix-sockets.
  • Als laatste belangrijke functie van deze versie zou ik de ondersteuning voor Host Based Access control-bestanden willen noemen, zoals pg_hba.conf in Postgres. Dit maakt het mogelijk om TLS . te configureren voor netwerkverbindingen en “peer” authenticatie voor lokale verbindingen.

We kunnen configureren hoe gebruikers authenticeren met auth_type parameter van PgBouncer. Alle configuratieparameters zijn gedefinieerd in het configuratiebestand pgbouncer.ini. Laten we eens kijken naar de details van auth_type parameter.

auth_type parameter kan worden toegewezen aan een van de 6 hieronder vermelde waarden. Laten we eens kijken naar de uitleg en het gebruik van deze waarden.

  • hba : Als we de parameter auth_type instellen met de waarde hba , moeten we auth_hba_file . instellen parameter ook om te laten zien welke pg_hba.conf bestand wordt gebruikt als een configuratie. Door dit te doen, kunnen we het werkelijke authenticatietype laden vanuit auth_hba_file. Dit betekent dat we verschillende authenticatiemethoden kunnen gebruiken voor verschillende toegangspaden. Bijvoorbeeld, met de versie 1.7-verbinding via Unix-socket, gebruik de peer-authenticatiemethode, terwijl de verbinding via TCP TLS moet gebruiken. Tot dusver ondersteunt het HBA-bestandsformaat niet alle authenticatiemethoden van pg_hba.conf. Ondersteunde methoden zijn:vertrouwen, weigeren, md5, wachtwoord, peer en cert.
  • certificaat : Client moet verbinding maken via TLS verbinding met geldig cliëntcertificaat. Gebruikersnaam wordt dan overgenomen van CommonName veld van certificaat.
  • md5 : Gebruik op MD5 gebaseerde wachtwoordcontrole. auth_file (de naam van het bestand waaruit gebruikersnamen en wachtwoorden moeten worden geladen ) kan zowel met MD5 versleutelde wachtwoorden als wachtwoorden in platte tekst bevatten. Dit is de standaard authenticatiemethode.
  • gewoon : Clear-text wachtwoord wordt via draad verzonden. Beëindigd.
  • vertrouwen : Er vindt geen authenticatie plaats. Gebruikersnaam moet nog bestaan ​​in auth_file .
  • elke : Zoals de vertrouwensmethode, maar de opgegeven gebruikersnaam wordt genegeerd. Vereist dat alle databases zijn geconfigureerd om in te loggen als een specifieke gebruiker. Bovendien stelt de consoledatabase elke gebruiker in staat om in te loggen als beheerder.

Andere glanzende functies

Er zijn meer functies uitgebracht in deze versie. Je kunt de PgBouncer changelog-pagina bezoeken of de onderstaande lijst bekijken voor de andere verbeteringen:

  • Stel query_wait_timeout in standaard tot 120s. Deze parameter definieert de maximale tijd die query's mogen wachten op uitvoering. Als de query gedurende die tijd niet aan een server is toegewezen, wordt de verbinding met de client verbroken. Dit wordt gebruikt om te voorkomen dat niet-reagerende servers verbindingen grijpen. Het helpt ook wanneer de server niet beschikbaar is of de database om welke reden dan ook verbindingen weigert. Als dit is uitgeschakeld, worden clients oneindig in de wachtrij geplaatst. Huidige standaard (0) veroorzaakt oneindige wachtrijen, wat niet handig is. Als de client in versie 1.7 een aanvraag in behandeling heeft en niet is toegewezen aan de serververbinding, wordt de clientverbinding standaard na 120 seconden verbroken.
  • Schakel server_reset_query_always uit standaard. De reset-query wordt nu alleen gebruikt in pools die zich in de sessiemodus bevinden.
  • Verhoog pkt_buf tot 4096 bytes. Verbetert prestaties met TLS . Het gedrag is waarschijnlijk belastingspecifiek, maar het zou veilig moeten zijn om te doen, aangezien sinds v1.2 de pakketbuffers worden gesplitst van verbindingen en lui worden gebruikt vanuit de pool.
  • Ondersteuning van het aantal pipelining verwacht ReadyForQuery pakketten. Dit voorkomt dat de server te vroeg wordt vrijgegeven. Oplossing #52.
  • Verbeterde sbuf_loopcnt logica - socket wordt gegarandeerd opnieuw verwerkt, zelfs als er geen gebeurtenis van socket is. Vereist voor TLS omdat het zijn eigen buffering heeft.
  • Systeemtests aanpassen om te werken met moderne BSD en MacOS . (Eric Radman )
  • Verwijder crypt auth. Het is verouderd en wordt niet meer ondersteund door PostgreSQL sinds 8.4 .
  • Repareer gewoon “–met-zorgen” configure optie – zonder argument was het gebroken.

Wat is PgBouncer?

PgBouncer is een hulpprogramma voor het beheren van clientverbindingen met de PostgreSQL-database. In een notendop, het onderhoudt een verbindingspool met de PostgreSQL-server en hergebruikt die bestaande verbindingen. Hoewel dit handig kan zijn om de overhead van de clientverbinding te verminderen, is het ook mogelijk om het maximale aantal open verbindingen met de databaseserver te beperken. Het kan ook worden gebruikt voor het vormgeven van verkeer, zoals het omleiden van verbindingen naar een of meer databases naar verschillende databaseservers. Daarnaast kan PgBouncer worden gebruikt voor het beheren van beveiliging op gebruikers- en zelfs op databaseniveau.

Je kunt PgBouncer downloaden via hun downloadpagina en het nu gaan gebruiken!

Voor meer informatie over PgBouncer kun je mijn vorige blogpost over PgBouncer bekijken.

Veel leesplezier!


  1. Timer maken in Oracle Forms / Forms 6i en een klok weergeven

  2. Hoe kan ik drie tabel JOIN's doen in een UPDATE-query?

  3. Trucs voor continue verbetering van databasebewaking

  4. cx_Oracle en Exception Handling - Goede praktijken?