PgBouncer er en letvægtsforbindelsespooler til PostgreSQL.
PgBouncer 1.6 blev annonceret den 1. august 2015. I dette blogindlæg vil vi tale om de store nye forbedringer i PgBouncer.
Vigtigste nye funktioner i PgBouncer
Indlæs hash for brugeradgangskode fra postgres database
PgBouncer tillader nu indlæsning af brugerens adgangskode fra databasen med to konfigurationsparametre, som er auth_user og auth_query .
- auth_user
Hvis auth_user er indstillet, vil enhver bruger, der ikke er angivet i auth_file, blive forespurgt fra pg_shadow i databasen ved hjælp af auth_user. Auth_users adgangskode vil blive taget fra auth_file. Denne parameter kan også indstilles pr. database. - auth_query
Denne parameter giver os mulighed for at skrive en SQL-forespørgsel for at indlæse brugerens adgangskode fra databasen. Den kører under auth_user. Se standardforespørgslen nedenfor:SELECT usename, passwd FROM pg_shadow WHERE usename=$1
Pooling-tilstand kan konfigureres både pr. database og pr. bruger
Med denne funktion, uafhængig af hovedpoolingtilstanden, kan klienter nu oprette forbindelse til forskellige databaser med en af de 3 poolingtilstande beskrevet nedenfor. Dette gælder også for brugere. Hvis f.eks. poolingtilstanden er sessionspooling, kan en specifik bruger konfigureres til at bruge transaktionspooling. Dette giver os fleksibilitet på databaseniveau og brugerniveau til at anvende mere passende poolingmuligheder.
PgBouncer giver 3 forbindelsespooling-tilstande:
- Session pooling
I løbet af en klientforbindelses levetid tildeles en eksisterende serverforbindelse til klienten, og efter klienten afbrydes, sættes den tildelte serverforbindelse tilbage til forbindelsespuljen. - Transaktionspooling
I denne tilstand tildeles en serverforbindelse ikke til en tilsluttet klient med det samme, men kun under en transaktion. Så snart transaktionen er overstået, sættes forbindelsen tilbage i puljen. - Pulning af erklæringer
Dette ligner transaktionspooling, men er mere aggressivt. En backend tildeles, når der udstedes en enkelt-sætningsforespørgsel. Når erklæringen er slut, sættes forbindelsen tilbage i poolen.
Grænser pr. database og pr. bruger forbindelse:max_db_connections og max_user_connections
Med denne funktion kan vi nu også kontrollere forbindelsesgrænser pr. database/brugerniveau med de to nye parametre, som er max_db_connections og max_user_connections .
- max_db_connections
Denne parameter tillader ikke mere end de angivne forbindelser pr. database (uanset pool – dvs. bruger).
Standardværdien for denne parameter er ubegrænset. - max_user_connections
Denne parameter tillader ikke mere end de angivne forbindelser pr. bruger (uanset pool – dvs. bruger).
Tilføj DISABLE/ENABLE-kommandoer for at forhindre nye forbindelser
Med denne funktion har PgBouncer AKTIVER/DEAKTIVER db; kommandoer for at forhindre nye forbindelser.
- DEAKTIVER db;
Denne kommando afviser alle nye klientforbindelser på den givne database. - AKTIVER db;
Denne kommando tillader nye klientforbindelser efter en tidligere DEAKTIVER kommando.
Ny foretrukken DNS-backend:c-ares
c-ares er den eneste DNS-backend, der understøtter alle interessante funktioner:/etc/hosts med opdatering, SOA-opslag, store svar (via TCP/EDNS+UDP), IPv6. Det er den foretrukne backend nu, og vil sandsynligvis være den eneste backend i fremtiden.
Konfigurationsfiler har '%include FILENAME'-direktivet for at tillade, at konfigurationen kan opdeles i flere filer
Med denne funktion har PgBouncer understøttelse af inklusion af konfigurationsfiler i andre konfigurationsfiler.
Med andre ord kan PgBouncer-konfigurationsfilen indeholde inkluderede direktiver, som specificerer en anden konfigurationsfil, der skal læses og behandles. Dette gør det muligt at opdele en stor konfigurationsfil til mindre og mere håndterbare filer. Inkluderingsdirektiverne ser således ud:
%include filename
Hvis filnavnet ikke er en absolut sti, tages det i forhold til den aktuelle arbejdsmappe.
Der er flere funktioner frigivet i denne version. Du kan besøge PgBouncer changelog-siden eller tjekke listen nedenfor for de andre forbedringer:
- Vis remote_pid i SHOW CLIENTS/SERVERS. Tilgængelig for klienter, der forbinder via unix-sockets og både tcp- og unix-socket-server. I tilfælde af tcp-server tages pid'en fra annulleringsnøglen.
- Tilføj separat konfigurationsparameter (dns_nxdomain_ttl) til styring af negativ dns-cache.
- Tilføj klientens værts IP-adresse og port til applikationsnavn. Dette aktiveres af en konfigurationsparameter application_name_add_host, som som standard er 'off'.
Hvad er PgBouncer?
PgBouncer er et værktøj til at administrere klientforbindelser til PostgreSQL-databasen. I en nøddeskal vedligeholder den en forbindelsespulje til PostgreSQL-serveren og genbruger de eksisterende forbindelser. Selvom dette kan være nyttigt til at reducere klientforbindelsesomkostningerne, gør det også muligt at begrænse det maksimale antal åbne forbindelser til databaseserveren. Det kan også bruges til trafikformning som at omdirigere forbindelser til en eller flere databaser til forskellige databaseservere. Ud over disse kan PgBouncer bruges til at administrere sikkerhed på bruger- og endda på databaseniveau.
Se diagrammet nedenfor, som afbilder PgBouncer-arkitekturen på en mere visuel måde.
I dette særlige eksempel er klientapplikationer forbundet til separate PgBouncer-instanser, hvor de i stedet ville være forbundet til PostgreSQL-databaseservere direkte. Databaseservere "DB Server 1" og "DB Server 2" kan være uafhængige PostgreSQL-instanser, eller de kan være en del af en klynge med forskellige roller (f.eks. master/replika eller write-master/backup-master osv.).
Hver PgBouncer-instans vedligeholder en forbindelsespulje med et antal åbne forbindelser til PostgreSQL-servere. Som det kan ses af eksemplet, tillader PgBouncers oprettelse af puljer med forbindelser til forskellige databaser og endda forbindelser til forskellige databaseservere.
For mere information
Du kan besøge PgBouncers hovedwebsted: http://pgbouncer.github.io/
De har en fin side med ofte stillede spørgsmål: http://pgbouncer.github.io/faq.html
Du kan tage et kig på projektets Github-lager: http://github.com/pgbouncer/pgbouncer