PgBouncer is een lichtgewicht verbindingspooler voor PostgreSQL.
PgBouncer 1.6 werd aangekondigd op 1 augustus 2015. In deze blogpost zullen we het hebben over de belangrijkste nieuwe verbeteringen in PgBouncer.
Belangrijkste nieuwe functies van PgBouncer
Hash van het gebruikerswachtwoord laden uit de postgres-database
PgBouncer maakt het nu mogelijk om het wachtwoord van de gebruiker uit de database te laden met twee configuratieparameters die auth_user zijn en auth_query .
- auth_user
Als auth_user is ingesteld, wordt elke gebruiker die niet is opgegeven in auth_file, opgevraagd bij pg_shadow in de database met behulp van auth_user. Het wachtwoord van Auth_user wordt overgenomen uit auth_file. Deze parameter kan ook per database worden ingesteld. - auth_query
Met deze parameter kunnen we een SQL-query schrijven om het gebruikerswachtwoord uit de database te laden. Het draait onder auth_user.Zie de standaardquery hieronder:SELECT usename, passwd FROM pg_shadow WHERE usename=$1
Poolingmodus kan zowel per database als per gebruiker worden geconfigureerd
Met deze functie kunnen clients, onafhankelijk van de hoofdpoolingmodus, nu verbinding maken met verschillende databases met een van de 3 hieronder beschreven poolingsmodi. Dit geldt ook voor gebruikers. Als de poolingmodus bijvoorbeeld sessiepooling is, kan een specifieke gebruiker worden geconfigureerd om transactiepooling te gebruiken. Dit geeft ons flexibiliteit op database- en gebruikersniveau om meer geschikte pooling-opties toe te passen.
PgBouncer biedt 3 pooling-modi voor verbindingen:
- Sessie poolen
Tijdens de levensduur van een clientverbinding wordt een bestaande serververbinding toegewezen aan de client en nadat de client de verbinding verbreekt, wordt de toegewezen serververbinding teruggezet naar de verbindingspool. - Transactie poolen
In deze modus wordt een serververbinding niet direct toegewezen aan een aangesloten client, maar alleen tijdens een transactie. Zodra de transactie voorbij is, wordt de verbinding weer in de pool gezet. - Verzameling van verklaringen
Dit is vergelijkbaar met transactiepooling, maar is agressiever. Er wordt een backend toegewezen wanneer een query met één instructie wordt verzonden. Wanneer de instructie voorbij is, wordt de verbinding weer in pool gezet.
Verbindingslimieten per database en per gebruiker:max_db_connections en max_user_connections
Met deze functie kunnen we nu ook verbindingslimieten per database/gebruikersniveau beheren met de twee nieuwe parameters, namelijk max_db_connections en max_user_connections .
- max_db_connections
Deze parameter staat niet meer toe dan de opgegeven verbindingen per database (ongeacht de pool – d.w.z. gebruiker).
De standaardwaarde van deze parameter is onbeperkt. - max_user_connections
Deze parameter staat niet meer toe dan de opgegeven verbindingen per gebruiker (ongeacht de pool – d.w.z. gebruiker).
Voeg DISABLE/ENABLE-commando's toe om nieuwe verbindingen te voorkomen
Met deze functie heeft PgBouncer ENABLE/DISABLE db; commando's om nieuwe verbindingen te voorkomen.
- DB UITSCHAKELEN;
Deze opdracht verwerpt alle nieuwe clientverbindingen op de gegeven database. - ENABLE db;
Deze opdracht staat nieuwe clientverbindingen toe na een eerdere DISABLE commando.
Nieuwe voorkeurs-DNS-backend:c-ares
c-ares is de enige DNS-backend die alle interessante functies ondersteunt:/etc/hosts met refresh, SOA lookup, grote antwoorden (via TCP/EDNS+UDP), IPv6. Het is nu de geprefereerde backend en zal waarschijnlijk de enige . zijn backend in toekomst.
Config-bestanden hebben de instructie '%include FILENAME' zodat de configuratie kan worden opgesplitst in verschillende bestanden
Met deze functie heeft PgBouncer ondersteuning voor het opnemen van configuratiebestanden in andere configuratiebestanden.
Met andere woorden, het PgBouncer-configuratiebestand kan include-richtlijnen bevatten, die een ander configuratiebestand specificeren om te lezen en te verwerken. Hierdoor kunt u een groot configuratiebestand opsplitsen in kleinere en beter beheersbare bestanden. De include-richtlijnen zien er als volgt uit:
%include filename
Als de bestandsnaam geen absoluut pad is, wordt deze beschouwd als relatief ten opzichte van de huidige werkmap.
Er zijn meer functies uitgebracht in deze versie. Je kunt naar de PgBouncer changelog-pagina gaan of de onderstaande lijst bekijken voor de andere verbeteringen:
- Toon remote_pid in SHOW CLIENTS/SERVERS. Beschikbaar voor clients die verbinding maken via unix-sockets en zowel tcp als unix-socketserver. In het geval van tcp-server wordt de pid uit de annuleersleutel gehaald.
- Voeg een aparte configuratieparam (dns_nxdomain_ttl) toe om negatieve dns-caching te controleren.
- Voeg het IP-adres en de poort van de clienthost toe aan toepassingsnaam. Dit wordt mogelijk gemaakt door een configuratieparameter application_name_add_host die standaard op 'off' staat.
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.
Zie het onderstaande diagram dat de PgBouncer-architectuur op een meer visuele manier weergeeft.
In dit specifieke voorbeeld zijn clienttoepassingen verbonden met afzonderlijke PgBouncer-instanties, waar ze in plaats daarvan rechtstreeks zouden worden verbonden met PostgreSQL-databaseservers. Databaseservers "DB Server 1" en "DB Server 2" kunnen onafhankelijke PostgreSQL-instanties zijn of ze kunnen deel uitmaken van een cluster met verschillende rollen (bijv. master/replica of write-master/back-up-master, enz.).
Elke PgBouncer-instantie onderhoudt een verbindingspool met een aantal open verbindingen met PostgreSQL-servers. Zoals uit het voorbeeld blijkt, maakt PgBouncers het mogelijk om pools te creëren met verbindingen naar verschillende databases en zelfs verbindingen met verschillende databaseservers.
Voor meer informatie
U kunt de hoofdwebsite van PgBouncer bezoeken: http://pgbouncer.github.io/
Ze hebben een mooie pagina met veelgestelde vragen: http://pgbouncer.github.io/faq.html
U kunt een kijkje nemen in de Github-repository van het project: http://github.com/pgbouncer/pgbouncer