Prestandan är alltid viktig i alla system. Du kommer att behöva använda de tillgängliga resurserna väl för att säkerställa bästa möjliga svarstid och det finns olika sätt att göra detta. Varje anslutning till en databas förbrukar resurser så ett av dessa sätt är att ha en bra anslutningshanterare mellan din applikation och databasen. I den här bloggen kommer vi att prata om pgBouncer, en anslutningspoolare för PostgreSQL, och vi kommer att visa hur du implementerar detta för att förbättra din PostgreSQL-prestanda.
Connection Poolers
Beroende på trafiken i dina system kan det vara användbart att lägga till ett externt verktyg för att minska belastningen på din databas vilket kommer att förbättra prestandan. Det kanske inte räcker, men det är en bra utgångspunkt. För detta är det en bra idé att implementera en anslutningspoolare
En anslutningspoolning är en metod för att skapa en pool av anslutningar och återanvända dem, för att undvika att öppna nya anslutningar till databasen hela tiden, vilket kommer att öka prestandan för dina applikationer avsevärt. PgBouncer är en populär anslutningspoolare designad för PostgreSQL.
Hur PgBouncer fungerar
PgBouncer fungerar som en PostgreSQL-server, så du behöver bara komma åt din databas med PgBouncer-informationen (IP-adress/värdnamn och port), och PgBouncer skapar en anslutning till PostgreSQL-servern, eller så kommer den att återanvänd en om den finns.
När PgBouncer tar emot en anslutning utför den autentiseringen, vilket beror på metoden som anges i konfigurationsfilen. PgBouncer stöder alla autentiseringsmekanismer som PostgreSQL-servern stöder. Efter detta söker PgBouncer efter en cachad anslutning, med samma användarnamn+databaskombination. Om en cachad anslutning hittas returnerar den anslutningen till klienten, om inte skapar den en ny anslutning. Beroende på PgBouncer-konfigurationen och antalet aktiva anslutningar kan det vara möjligt att den nya anslutningen står i kö tills den kan skapas eller till och med avbrytas.
PgBouncers beteende beror på det konfigurerade poolläget:
-
session pooling (standard):När en klient ansluter kommer en serveranslutning att tilldelas den för hela hur länge klienten är uppkopplad. När klienten kopplar från kommer serveranslutningen att läggas tillbaka till poolen.
-
transaktionspoolning:En serveranslutning tilldelas en klient endast under en transaktion. När PgBouncer märker att transaktionen är över kommer serveranslutningen att läggas tillbaka till poolen.
-
satspoolning:Serveranslutningen kommer att återföras till poolen omedelbart efter att en fråga är klar. Transaktioner med flera uttalanden är inte tillåtna i detta läge eftersom de skulle gå sönder.
Hur man implementerar PgBouncer med ClusterControl
För detta antar vi att du har ditt PostgreSQL-kluster igång och att du använder ClusterControl för att hantera det, annars kan du följa det här blogginlägget för att enkelt distribuera PostgreSQL för hög tillgänglighet.
Gå till ClusterControl -> Välj PostgreSQL Cluster -> Cluster Actions -> Add Load Balancer -> PgBouncer. Där kan du distribuera en ny PgBouncer-nod som kommer att distribueras i den valda databasnoden, eller till och med importera en befintlig PgBouncer-nod.
Du måste ange IP-adress eller värdnamn, Listen Port och PgBouncer referenser. När du trycker på Deploy PgBouncer kommer ClusterControl att komma åt noden, installera och konfigurera allt utan någon manuell inblandning.
Du kan övervaka framstegen i ClusterControl-aktivitetssektionen. När den är klar måste du skapa den nya poolen. För detta, gå till ClusterControl -> Välj PostgreSQL-klustret -> Noder -> PgBouncer Node.
Här måste du lägga till följande information:
-
PgBouncer-värdnamn:Välj nodvärdarna för att skapa anslutningspoolen.
-
Poolnamn:Pool- och databasnamn måste vara desamma.
-
Användarnamn: Välj en användare från PostgreSQL primära nod eller skapa en ny.
-
Poolläge:Det kan vara ett av lägena som vi nämnde tidigare:session (standard), transaktion, eller satspoolning.
-
Poolstorlek:Maximal storlek på pooler för denna databas. Standardvärdet är 20.
-
Max databasanslutningar:Konfigurera ett databasomfattande maximum. Standardvärdet är 0, vilket betyder obegränsat.
Nu bör du kunna se poolen i nodsektionen.
Detta är en grundläggande topologi. Du kan förbättra det, till exempel genom att lägga till belastningsbalanseringsnoder, mer än en för att undvika en enda felpunkt och använda något verktyg som "Keepalived", för att säkerställa tillgängligheten. Det kan också göras med ClusterControl.
Slutsats
Att använda PgBouncer som en anslutningspoolare är ett bra sätt att förbättra databasprestanda genom att använda de tillgängliga resurserna på servern på ett bra sätt.
Du kan också förbättra denna topologi genom att använda en kombination av PgBouncer + HAProxy för att uppnå hög tillgänglighet för ditt PostgreSQL-kluster. Alla dessa saker kan göras från samma ClusterControl-gränssnitt.