PgBouncer är en lätt anslutningspooler för PostgreSQL. PgBouncer 1.7 tillkännagavs den 18 december 2015. I det här blogginlägget kommer vi att prata om de stora nya förbättringarna i PgBouncer.
De mest färgstarka funktionerna
- PgBouncer 1.7 stöder TLS-anslutningar och jag tror att detta är den största förbättringen av den nya utgåvan. De använde OpenSSL/LibreSSL-bibliotek som backend-implementering av funktionen.
- PgBouncer stöder nu autentisering via TLS-klientcertifikat .
Låt oss gräva i detaljer om TLS-inställningarna för PgBouncer. Det finns 14 konfigurationsparametrar relaterade till TLS-inställningar (klientsida + serversidainställningar).
För att tilldela vilket TLS-läge som ska användas för anslutningar från klienter bör vi ställa in client_tls_sslmode parameter. TLS-anslutningar är inaktiverade som standard. När aktiverat, client_tls_key_file och client_tls_cert_file måste också konfigureras för att ställa in nyckel och cert som PgBouncer använder för att acceptera klientanslutningar.
Vi kan tilldela ett rotcertifikat för att validera klientcertifikat genom att ställa in client_tls_ca_file parameter, standardinställningen är inställd.
Vi kan specificera vilka TLS-protokollversioner som är tillåtna genom att ställa in client_tls_protocols parameter, standard är alla.
För mer detaljerade inställningar på klientsidan kan du kontrollera client_tls_ciphers , client_tls_ecdhcurve och client_tls_dheparams parametrar.
Låt oss nu prata om TLS-serversidans konfigurationsparametrar. Först måste vi deklarera att TLS-läge ska användas för anslutningar till PostgreSQL-servrar med server_tls_sslmode parameter. TLS-anslutningar är inaktiverade som standard. Vi kan tilldela CA-server med server_tls_ca_file parameter. Om vi vill tilldela privat nyckel för PgBouncer att autentisera mot PostgreSQL-server, kan vi använda server_tls_key_file parameter, kan vi till och med tilldela ett certifikat för privat nyckel som PostgreSQL-servern kan validera med server_tls_cert_file parameter. Som vi gjorde i TLS-anslutningsinställningarna på klientsidan kan vi deklarera vilka TLS-protokollversioner som är tillåtna med server_tls_protocols parameter.
- Efter TLS-stöd är en annan viktig ny funktion stöd för ”peer”-autentisering på Unix-uttag.
- Som en sista viktig funktion i den här versionen skulle jag vilja nämna stöd för värdbaserad åtkomstkontrollfil, som pg_hba.conf i Postgres. Detta gör det möjligt att konfigurera TLS för nätverksanslutningar och peer-autentisering för lokala anslutningar.
Vi kan konfigurera hur man autentiserar användare med auth_type parameter för PgBouncer. Alla konfigurationsparametrar är definierade i konfigurationsfilen pgbouncer.ini. Låt oss titta närmare på detaljer om auth_type parameter.
auth_type parameter kan tilldelas ett av de 6 värdena som anges nedan. Låt oss se förklaringarna och användningen av dessa värden.
- hba : Om vi ställer in auth_type-parametern med värdet hba , bör vi ställa in auth_hba_file parameter också för att visa vilken pg_hba.conf filen kommer att användas som en konfiguration. Genom att göra detta tillåter vi att faktisk autentiseringstyp laddas från auth_hba_file. Det betyder att vi kan använda olika autentiseringsmetoder för olika åtkomstvägar. Till exempel, med version 1.7-anslutning över Unix-socket använd peer-autentiseringsmetod, samtidigt måste anslutning över TCP använda TLS. Än så länge stöder inte HBA-filformatet alla autentiseringsmetoder för pg_hba.conf. Metoder som stöds är:trust, reject, md5, password, peer och cert.
- certifikat: Klienten måste ansluta över TLS anslutning med giltigt klientcertifikat. Användarnamn tas sedan från CommonName fält från certifikat.
- md5 : Använd MD5-baserad lösenordskontroll. auth_file (namnet på filen som användarnamn och lösenord ska laddas från ) kan innehålla både MD5-krypterade eller vanlig textlösenord. Detta är standardautentiseringsmetoden.
- vanligt : Rentextlösenord skickas över tråd. Utfasad.
- lita på: Ingen autentisering görs. Användarnamnet måste fortfarande finnas i auth_file .
- alla : Gillar förtroendemetoden, men det angivna användarnamnet ignoreras. Kräver att alla databaser är konfigurerade för att logga in som specifik användare. Dessutom tillåter konsoldatabasen alla användare att logga in som admin.
Andra glänsande funktioner
Det finns fler funktioner släppta i den här versionen. Du kan besöka PgBouncers ändringsloggsida eller kolla listan nedan för andra förbättringar:
- Ställ in query_wait_timeout till 120s som standard. Den här parametern definierar den maximala tid som frågor får vänta på att köras. Om frågan inte tilldelas en server under den tiden kopplas klienten bort. Detta används för att förhindra att servrar som inte svarar tar tag i anslutningar. Det hjälper också när servern är nere eller databasen avvisar anslutningar av någon anledning. Om detta är inaktiverat kommer klienter att stå i kö i oändlighet. Aktuell standard (0) orsakar oändlig köbildning, vilket inte är användbart. Med version 1.7 om klienten har väntande fråga och inte har tilldelats serveranslutning, kommer klientanslutningen att avbrytas efter 120 sekunder som standard.
- Inaktivera server_reset_query_always som standard. Nu används återställningsfrågan endast i pooler som är i sessionsläge.
- Öka pkt_buf till 4096 byte. Förbättrar prestanda med TLS . Beteendet är förmodligen belastningsspecifikt, men det borde vara säkert att göra som eftersom v1.2 paketbuffertarna delas från anslutningar och används lätt från poolen.
- Antal för supportpipelining förväntas ReadyForQuery paket. Detta undviker att släppa servern för tidigt. Fixar #52.
- Förbättrad sbuf_loopcnt logik – socket kommer garanterat att bearbetas om även om det inte finns någon händelse från socket. Krävs för TLS eftersom den har sin egen buffring.
- Anpassa systemtester för att fungera med modern BSD och MacOS . (Eric Radman )
- Ta bort krypt auth. Det är föråldrat och stöds inte av PostgreSQL sedan 8.4 .
- Åtgärda vanlig "–med-vård" konfigurera alternativet – utan argument var det trasigt.
Vad är PgBouncer?
PgBouncer är ett verktyg för att hantera klientanslutningar till PostgreSQL-databasen. I ett nötskal upprätthåller den en anslutningspool till PostgreSQL-servern och återanvänder de befintliga anslutningarna. Även om detta kan vara användbart för att minska klientanslutningens overhead, gör det också möjligt att begränsa det maximala antalet öppna anslutningar till databasservern. Den kan också användas för trafikformning som att omdirigera anslutningar till en eller flera databaser till olika databasservrar. Utöver dessa kan PgBouncer användas för att hantera säkerhet på användar- och även på databasnivå.
Du kan ladda ner PgBouncer via deras nedladdningssida och börja använda den nu!
För mer information om PgBouncer kan du kolla mitt tidigare blogginlägg om PgBouncer.
Trevlig läsning!