Ydeevne er altid vigtig i ethvert system. Du bliver nødt til at gøre god brug af de tilgængelige ressourcer for at sikre den bedst mulige responstid, og der er forskellige måder at gøre dette på. Hver forbindelse til en database bruger ressourcer, så en af disse måder er at have en god forbindelsesadministrator mellem din applikation og databasen. I denne blog vil vi tale om pgBouncer, en forbindelsespooler til PostgreSQL, og vi vil vise, hvordan du implementerer dette for at forbedre din PostgreSQL-ydeevne.
Connection Poolers
Afhængigt af trafikken på dine systemer kan det være nyttigt at tilføje et eksternt værktøj for at reducere belastningen på din database, hvilket vil forbedre ydeevnen. Måske er det ikke nok, men det er et godt udgangspunkt. Til dette er det en god idé at implementere en forbindelsespooler
En forbindelsespooling er en metode til at skabe en pulje af forbindelser og genbruge dem, så man undgår at åbne nye forbindelser til databasen hele tiden, hvilket vil øge ydeevnen af dine applikationer betydeligt. PgBouncer er en populær forbindelsespooler designet til PostgreSQL.
Sådan fungerer PgBouncer
PgBouncer fungerer som en PostgreSQL-server, så du skal bare have adgang til din database ved hjælp af PgBouncer-oplysningerne (IP-adresse/værtsnavn og port), og PgBouncer vil oprette en forbindelse til PostgreSQL-serveren, eller det vil genbrug en, hvis den findes.
Når PgBouncer modtager en forbindelse, udfører den godkendelsen, som afhænger af metoden specificeret i konfigurationsfilen. PgBouncer understøtter alle de godkendelsesmekanismer, som PostgreSQL-serveren understøtter. Herefter søger PgBouncer for en cache-forbindelse med den samme brugernavn+databasekombination. Hvis en cachelagret forbindelse findes, returnerer den forbindelsen til klienten, hvis ikke, opretter den en ny forbindelse. Afhængigt af PgBouncer-konfigurationen og antallet af aktive forbindelser, kan det være muligt, at den nye forbindelse er i kø, indtil den kan oprettes eller endda afbrydes.
PgBouncer-adfærden afhænger af den konfigurerede pooling-tilstand:
-
session pooling (standard):Når en klient opretter forbindelse, vil en serverforbindelse blive tildelt den for hele varighed klienten forbliver forbundet. Når klienten afbryder forbindelsen, vil serverforbindelsen blive sat tilbage i puljen.
-
transaktionspooling:En serverforbindelse tildeles kun til en klient under en transaktion. Når PgBouncer bemærker, at transaktionen er overstået, vil serverforbindelsen blive sat tilbage i puljen.
-
sætningspooling:Serverforbindelsen vil blive sat tilbage i puljen umiddelbart efter at en forespørgsel er fuldført. Transaktioner med flere erklæringer er ikke tilladt i denne tilstand, da de ville gå i stykker.
Sådan implementeres PgBouncer ved hjælp af ClusterControl
Til dette antager vi, at du har din PostgreSQL-klynge oppe at køre, og at du bruger ClusterControl til at administrere den, ellers kan du følge dette blogindlæg for nemt at implementere PostgreSQL for høj tilgængelighed.
Gå til ClusterControl -> Vælg PostgreSQL Cluster -> Cluster Actions -> Add Load Balancer -> PgBouncer. Der kan du implementere en ny PgBouncer-node, der vil blive implementeret i den valgte databasenode, eller endda importere en eksisterende PgBouncer-node.
Du skal angive IP-adresse eller værtsnavn, lytteport og PgBouncer legitimationsoplysninger. Når du trykker på Deploy PgBouncer, vil ClusterControl få adgang til noden, installere og konfigurere alt uden nogen manuel indgriben.
Du kan overvåge fremskridtene i ClusterControl-aktivitetssektionen. Når den er færdig, skal du oprette den nye pool. For dette skal du gå til ClusterControl -> Vælg PostgreSQL-klyngen -> Noder -> PgBouncer Node.
Her skal du tilføje følgende oplysninger:
-
PgBouncer-værtsnavn:Vælg nodeværterne for at oprette forbindelsespuljen.
-
Poolnavn:Pool- og databasenavne skal være de samme.
-
Brugernavn: Vælg en bruger fra PostgreSQL primære node, eller opret en ny.
-
Puljetilstand:Det kan være en af de tilstande, som vi nævnte tidligere:session (standard), transaktion, eller erklæringspooling.
-
Poolstørrelse:Maksimal størrelse af pools for denne database. Standardværdien er 20.
-
Maks. databaseforbindelser:Konfigurer et maksimum for hele databasen. Standardværdien er 0, hvilket betyder ubegrænset.
Nu skulle du være i stand til at se puljen i Node-sektionen.
Dette er en grundlæggende topologi. Du kan forbedre det, for eksempel ved at tilføje load balancer-noder, mere end én for at undgå et enkelt fejlpunkt og bruge et eller andet værktøj som "Keepalived", for at sikre tilgængeligheden. Det kan også gøres ved hjælp af ClusterControl.
Konklusion
Brug af PgBouncer som en forbindelsespooler er en god måde at forbedre databasens ydeevne ved at udnytte de tilgængelige ressourcer på serveren godt.
Du kan også forbedre denne topologi ved at bruge en kombination af PgBouncer + HAProxy for at opnå høj tilgængelighed for din PostgreSQL-klynge. Alle disse ting kan gøres fra den samme ClusterControl UI.