Prestaties zijn altijd belangrijk in elk systeem. U zult de beschikbare middelen goed moeten gebruiken om de best mogelijke responstijd te garanderen en er zijn verschillende manieren om dit te doen. Elke verbinding met een database verbruikt bronnen, dus een van deze manieren is om een goede verbindingsmanager te hebben tussen uw toepassing en de database. In deze blog zullen we praten over pgBouncer, een verbindingspooler voor PostgreSQL, en we zullen laten zien hoe u dit kunt implementeren om uw PostgreSQL-prestaties te verbeteren.
Verbindingspoolers
Afhankelijk van het verkeer van uw systemen, kan het handig zijn om een externe tool toe te voegen om de belasting van uw database te verminderen, wat de prestaties zal verbeteren. Misschien is het niet genoeg, maar het is een goed uitgangspunt. Hiervoor is het een goed idee om een verbindingspooler te implementeren
Een pooling van verbindingen is een methode om een pool van verbindingen te maken en deze opnieuw te gebruiken, waarbij wordt vermeden dat er steeds nieuwe verbindingen met de database moeten worden geopend, wat de prestaties van uw toepassingen aanzienlijk zal verbeteren. PgBouncer is een populaire pooler voor verbindingen die is ontworpen voor PostgreSQL.
Hoe PgBouncer werkt
PgBouncer fungeert als een PostgreSQL-server, dus u hoeft alleen maar toegang te krijgen tot uw database met behulp van de PgBouncer-informatie (IP-adres/hostnaam en poort), en PgBouncer zal een verbinding maken met de PostgreSQL-server, anders zal het hergebruik er een als deze bestaat.
Wanneer PgBouncer een verbinding ontvangt, voert het de authenticatie uit, die afhangt van de methode gespecificeerd in het configuratiebestand. PgBouncer ondersteunt alle authenticatiemechanismen die de PostgreSQL-server ondersteunt. Hierna controleert PgBouncer op een gecachte verbinding, met dezelfde gebruikersnaam + database-combinatie. Als er een verbinding in de cache wordt gevonden, wordt de verbinding naar de client geretourneerd, zo niet, dan wordt een nieuwe verbinding gemaakt. Afhankelijk van de PgBouncer-configuratie en het aantal actieve verbindingen, kan het zijn dat de nieuwe verbinding in de wachtrij wordt geplaatst totdat deze kan worden gemaakt of zelfs wordt afgebroken.
Het PgBouncer-gedrag hangt af van de geconfigureerde poolmodus:
-
sessie pooling (standaard):wanneer een client verbinding maakt, wordt er een serververbinding aan toegewezen voor het geheel duur dat de cliënt verbonden blijft. Wanneer de client de verbinding verbreekt, wordt de serververbinding weer in de pool gezet.
-
transactie pooling:een serververbinding wordt alleen tijdens een transactie aan een client toegewezen. Wanneer PgBouncer merkt dat de transactie voorbij is, wordt de serververbinding weer in de pool gezet.
-
statement pooling:de serververbinding wordt onmiddellijk nadat een query is voltooid weer in de pool geplaatst. Transacties met meerdere afschriften zijn in deze modus niet toegestaan omdat ze zouden breken.
PgBouncer implementeren met ClusterControl
Hiervoor gaan we ervan uit dat uw PostgreSQL-cluster actief is en dat u ClusterControl gebruikt om het te beheren, anders kunt u deze blogpost volgen om PostgreSQL eenvoudig te implementeren voor hoge beschikbaarheid.
Ga naar ClusterControl -> Selecteer PostgreSQL-cluster -> Clusteracties -> Load Balancer toevoegen -> PgBouncer. Daar kunt u een nieuw PgBouncer-knooppunt implementeren dat in het geselecteerde databaseknooppunt wordt geïmplementeerd, of zelfs een bestaand PgBouncer-knooppunt importeren.
U moet het IP-adres of de hostnaam, de luisterpoort en de PgBouncer opgeven referenties. Wanneer u op Deploy PgBouncer drukt, krijgt ClusterControl toegang tot het knooppunt, installeert en configureert alles zonder enige handmatige tussenkomst.
U kunt de voortgang volgen in de sectie ClusterControl-activiteit. Als het klaar is, moet u de nieuwe pool maken. Ga hiervoor naar ClusterControl -> Selecteer het PostgreSQL-cluster -> Nodes -> PgBouncer Node.
Hier moet u de volgende informatie toevoegen:
-
PgBouncer-hostnaam:selecteer de node-hosts om de verbindingspool te maken.
-
Poolnaam:pool- en databasenamen moeten hetzelfde zijn.
-
Gebruikersnaam: Selecteer een gebruiker uit het primaire PostgreSQL-knooppunt of maak een nieuwe.
-
Zwembadmodus:het kan een van de eerder genoemde modi zijn:sessie (standaard), transactie, of verklaring pooling.
-
Poolgrootte:maximale grootte van pools voor deze database. De standaardwaarde is 20.
-
Maximum databaseverbindingen:Configureer een databasebreed maximum. De standaardwaarde is 0, wat onbeperkt betekent.
Nu zou je de pool in de sectie Node moeten kunnen zien.
Dit is een basistopologie. U kunt het verbeteren, bijvoorbeeld door load balancer-knooppunten toe te voegen, meer dan één om een enkel storingspunt te voorkomen, en het gebruik van een tool zoals "Keepalived", om de beschikbaarheid te garanderen. Het kan ook worden gedaan met ClusterControl.
Conclusie
Het gebruik van PgBouncer als verbindingspooler is een goede manier om de databaseprestaties te verbeteren door goed gebruik te maken van de beschikbare bronnen op de server.
U kunt deze topologie ook verbeteren door een combinatie van PgBouncer + HAProxy te gebruiken om hoge beschikbaarheid voor uw PostgreSQL-cluster te bereiken. Al deze dingen kunnen worden gedaan vanuit dezelfde ClusterControl-gebruikersinterface.