PgBouncer in Azure Database for PostgreSQL - Flexibele server
VAN TOEPASSING OP: Azure Database for PostgreSQL - Flexibele server
Azure Database for PostgreSQL flexibele server biedt PgBouncer als een ingebouwde oplossing voor groepsgewijze verbindingen. PgBouncer is een optionele functie die u per databaseserver kunt inschakelen. Het wordt ondersteund in de rekenlagen Algemeen gebruik en Geoptimaliseerd voor geheugen in zowel openbare toegang als particuliere toegangsnetwerken.
PgBouncer wordt uitgevoerd op dezelfde virtuele machine (VM) als de databaseserver voor flexibele Azure Database for PostgreSQL-server. Postgres maakt gebruik van een procesmodel voor verbindingen, dus het onderhouden van veel niet-actieve verbindingen is duur. Postgres wordt in resourcebeperkingen uitgevoerd wanneer de server meer dan een paar duizend verbindingen uitvoert. Het belangrijkste voordeel van PgBouncer is het verbeteren van niet-actieve verbindingen en kortdurende verbindingen op de databaseserver.
PgBouncer maakt gebruik van een lichtgewicht model dat gebruikmaakt van asynchrone I/O. Het maakt alleen gebruik van Postgres-verbindingen wanneer dat nodig is, dat wil gezegd, wanneer binnen een geopende transactie of wanneer een query actief is. Met dit model kunt u maximaal 10.000 verbindingen met lage overhead schalen.
PgBouncer wordt uitgevoerd op poort 6432 op uw databaseserver. U kunt de databaseverbindingsconfiguratie van uw toepassing wijzigen om dezelfde hostnaam te gebruiken, maar wijzig de poort in 6432 om PgBouncer te gebruiken en profiteer van verbeterde schaalaanpassing van niet-actieve verbindingen.
PgBouncer in Azure Database for PostgreSQL flexibele server ondersteunt Microsoft Entra-verificatie (Azure AD).
PgBouncer inschakelen en configureren
Als u PgBouncer wilt inschakelen, gaat u naar het deelvenster Serverparameters in Azure Portal, zoekt u PgBouncer en wijzigt u de pgbouncer.enabled
instelling in true
. U hoeft de server niet opnieuw op te starten.
U kunt pgBouncer-instellingen configureren met behulp van deze parameters.
Notitie
De volgende lijst met PgBouncer-serverparameters is alleen zichtbaar in het deelvenster Serverparameters als de pgbouncer.enabled
serverparameter is ingesteld op true
. Anders worden ze opzettelijk verborgen.
Parameternaam | Beschrijving | Standaard |
---|---|---|
pgbouncer.default_pool_size | Stel deze parameterwaarde in op het aantal verbindingen per gebruiker/databasepaar. | 50 |
pgbouncer.ignore_startup_parameters | Voer een door komma's gescheiden lijst met parameters in die PgBouncer kan negeren. U kunt bijvoorbeeld PgBouncer de extra_float_digits parameter laten negeren. Sommige parameters zijn toegestaan; alle anderen veroorzaken een fout. Deze mogelijkheid is nodig om overenthusiastic Java Database Connectivity (JDBC) te tolereren die onvoorwaardelijke instellingen willen instellen extra_float_digits=2 in opstartpakketten. Gebruik deze optie als de bibliotheek die u gebruikt fouten rapporteert, zoals pq: unsupported startup parameter: extra_float_digits . |
|
pgbouncer.max_client_conn | Stel deze parameterwaarde in op het hoogste aantal clientverbindingen met PgBouncer dat u wilt ondersteunen. | 5000 |
pgbouncer.max_prepared_statements | Wanneer dit is ingesteld op een waarde die niet nul is, houdt PgBouncer protocolniveau benoemde instructies bij met betrekking tot opdrachten die door de client zijn verzonden in de transactie- en instructiepoolmodus. | 0 |
pgbouncer.min_pool_size | Voeg meer serververbindingen toe aan de pool als deze onder dit nummer wordt weergegeven. | 0 |
pgbouncer.pool_mode | Stel deze parameterwaarde in op TRANSACTION voor transactiepooling (dit is de aanbevolen instelling voor de meeste workloads). | transactie |
pgbouncer.query_wait_timeout | Maximale tijd (in seconden) query's mogen wachten op uitvoering. Als de query gedurende die tijd niet is toegewezen aan een server, wordt de verbinding met de client verbroken. | 120 |
pgbouncer.server_idle_timeout | Als een serververbinding langer dan dit aantal seconden inactief is geweest, wordt deze verwijderd. Als 0 is time-out uitgeschakeld. | 600 |
pgbouncer.stats_users | Door komma's gescheiden lijst met databasegebruikers die verbinding mogen maken en alleen-lezenquery's mogen uitvoeren op de pgBouncer-console. |
Zie de documentatie pgbouncer.ini voor meer informatie over PgBouncer-configuraties.
Versie van PgBouncer
Momenteel is de versie van PgBouncer geïmplementeerd op alle ondersteunde primaire versies van de engine (16, 15, 14, 13, 12, 11), in Azure Database for PostgreSQL Flexible Server 1.22.1.
Vergoedingen
Met behulp van de ingebouwde PgBouncer-functie met Azure Database for PostgreSQL flexibele server kunt u de volgende voordelen krijgen:
Gemak van vereenvoudigde configuratie: Omdat PgBouncer is geïntegreerd met een flexibele Azure Database for PostgreSQL-server, is er geen afzonderlijke installatie of complexe installatie nodig. U kunt deze rechtstreeks vanuit de serverparameters configureren.
Betrouwbaarheid van een beheerde service: PgBouncer biedt de voordelen van beheerde Azure-services. Azure beheert bijvoorbeeld updates van PgBouncer. Automatische updates elimineren de noodzaak van handmatig onderhoud en zorgen ervoor dat PgBouncer up-to-date blijft met de nieuwste functies en beveiligingspatches.
Ondersteuning voor verschillende verbindingstypen: PgBouncer in Azure Database for PostgreSQL flexibele server biedt ondersteuning voor zowel openbare als privéverbindingen. U kunt deze gebruiken om beveiligde verbindingen tot stand te brengen via privénetwerken of extern verbinding te maken, afhankelijk van uw specifieke vereisten.
Hoge beschikbaarheid in failoverscenario's: Als een stand-byserver tijdens een failover wordt gepromoveerd naar de primaire rol, start PgBouncer naadloos opnieuw op de zojuist gepromoveerde stand-by. U hoeft geen wijzigingen aan te brengen in de toepassing verbindingsreeks. Deze mogelijkheid zorgt voor continue beschikbaarheid en minimaliseert onderbreking van de verbindingsgroep van de toepassing.
PgBouncer bewaken
Metrische gegevens voor
Flexibele Azure Database for PostgreSQL-server biedt zes metrische gegevens voor het bewaken van PgBouncer-verbindingspooling:
Weergavenaam | Metrische id | Eenheid | beschrijving | Dimensie | Standaard ingeschakeld |
---|---|---|---|---|---|
Actieve clientverbindingen (preview) | client_connections_active |
Tellen | Verbindingen van clients die zijn gekoppeld aan een flexibele Azure Database for PostgreSQL-serververbinding | DatabaseName |
Nee |
Wachtende clientverbindingen (preview) | client_connections_waiting |
Tellen | Verbindingen van clients die wachten op een flexibele Azure Database for PostgreSQL-serververbinding met service | DatabaseName |
Nee |
Actieve serververbindingen (preview) | server_connections_active |
Tellen | Verbindingen met flexibele Azure Database for PostgreSQL-server die een clientverbinding gebruikt | DatabaseName |
Nee |
Niet-actieve serververbindingen (preview) | server_connections_idle |
Tellen | Verbindingen met flexibele Azure Database for PostgreSQL-server die niet actief zijn en gereed zijn om een nieuwe clientverbinding te onderhouden | DatabaseName |
Nee |
Totaal aantal gegroepeerde verbindingen (preview) | total_pooled_connections |
Tellen | Huidig aantal gegroepeerde verbindingen | DatabaseName |
Nee |
Aantal verbindingsgroepen (preview) | num_pools |
Tellen | Totaal aantal verbindingsgroepen | DatabaseName |
Nee |
Zie metrische gegevens van PgBouncer voor meer informatie.
Beheerconsole
PgBouncer biedt ook een interne database met de naam pgbouncer
. Wanneer u verbinding maakt met die database, kunt u opdrachten uitvoeren SHOW
die informatie geven over de huidige status van PgBouncer.
Verbinding maken met de pgbouncer
database:
Stel de
pgBouncer.stats_users
parameter in op de naam van een bestaande gebruiker (bijvoorbeeldmyUser
) en pas de wijzigingen toe.Maak verbinding met de
pgbouncer
database als deze gebruiker en stel de poort in als6432
:psql "host=myPgServer.postgres.database.azure.com port=6432 dbname=pgbouncer user=myUser password=myPassword sslmode=require"
Nadat u verbinding hebt gemaakt met de database, gebruikt SHOW
u opdrachten om PgBouncer-statistieken weer te geven:
SHOW HELP
: Alle beschikbareSHOW
opdrachten weergeven.SHOW POOLS
: Het aantal verbindingen in elke status voor elke pool weergeven.SHOW DATABASES
: De huidige toegepaste verbindingslimieten voor elke database weergeven.SHOW STATS
: Statistieken weergeven over aanvragen en verkeer voor elke database.
Zie de beheerconsole voor meer informatie over de PgBouncer-opdrachten.SHOW
Uw toepassing overschakelen naar PgBouncer
Volg deze stappen om PgBouncer te gaan gebruiken:
Maak verbinding maken met databaseserver, maar gebruik poort 6432 in plaats van de reguliere poort 5432. Controleer of deze verbinding werkt.
psql "host=myPgServer.postgres.database.azure.com port=6432 dbname=postgres user=myUser password=myPassword sslmode=require"
Test uw toepassing in een QA-omgeving met PgBouncer om ervoor te zorgen dat u geen compatibiliteitsproblemen hebt. Het PgBouncer-project biedt een compatibiliteitsmatrix en we raden transactiepooling aan voor de meeste gebruikers.
Wijzig uw productietoepassing om verbinding te maken met poort 6432 in plaats van 5432. Controleer op eventuele fouten aan de toepassingszijde die mogelijk verwijzen naar compatibiliteitsproblemen.
PgBouncer in zone-redundante hoge beschikbaarheid
Op zone-redundante hoge beschikbaarheidsservers (HA) wordt PgBouncer uitgevoerd op de primaire server. U kunt via poort 6432 verbinding maken met PgBouncer op de primaire server. Na een failover wordt PgBouncer opnieuw opgestart op de zojuist gepromoveerde stand-by, die nu de primaire server is. Uw toepassing verbindingsreeks dus hetzelfde blijven na een failover.
PgBouncer gebruiken met andere verbindingsgroepen
In sommige gevallen hebt u mogelijk al een verbindingsgroep aan de toepassingszijde of hebt u PgBouncer ingesteld aan de toepassingszijde (bijvoorbeeld een sidecar van Azure Kubernetes Service). In deze gevallen kan de ingebouwde PgBouncer-functie nog steeds nuttig zijn omdat het de voordelen biedt van niet-actieve schaalaanpassing van verbindingen.
Het gebruik van een pool aan de toepassingszijde samen met PgBouncer op de databaseserver kan nuttig zijn. Hier biedt de pool aan de toepassingszijde het voordeel van een verminderde initiële verbindingslatentie (omdat de roundtrip voor het initialiseren van de verbinding veel sneller is) en de PgBouncer aan de databasezijde niet-actieve verbindingsschalen biedt.
Beperkingen
De functie PgBouncer wordt momenteel niet ondersteund met de compute-laag Burstable-server. Als u de rekenlaag wijzigt van Algemeen gebruik of Geoptimaliseerd voor geheugen naar Burstable, verliest u de ingebouwde PgBouncer-mogelijkheid.
Wanneer de server opnieuw wordt opgestart tijdens schaalbewerkingen, ha-failover of opnieuw opstarten, worden PgBouncer en de virtuele machine ook opnieuw opgestart. Vervolgens moet u de bestaande verbindingen opnieuw tot stand brengen.
In de portal worden niet alle PgBouncer-parameters weergegeven. Nadat u PgBouncer hebt ingeschakeld en de parameters hebt opgeslagen, moet u het deelvenster Serverparameters sluiten (bijvoorbeeld Overzicht selecteren) en teruggaan naar het deelvenster Serverparameters.
U kunt geen instructiegroepmodi gebruiken, samen met voorbereide instructies. De huidige versie van PgBouncer heeft ondersteuning toegevoegd voor voorbereide instructies in de transactiemodus. Deze ondersteuning kan worden ingeschakeld en geconfigureerd via max_prepared_statements parameter. Als u deze parameter instelt boven de standaardwaarde 0, wordt ondersteuning voor voorbereide instructies ingeschakeld. Deze ondersteuning is alleen van toepassing op voorbereide instructies op protocolniveau. Voor de meeste programmeertalen betekent dit dat we de libpq-functie PQprepare op de client gebruiken, waarbij opdrachten op protocolniveau worden verzonden die PgBouncer kan onderscheppen, in plaats van een dynamische SQL-opdracht uit te geven die vergelijkbaar is met PREPARE proc AS, waardoor tekst wordt verzonden die PgBouncer niet correct interpreteert. Raadpleeg de pgBouncer-documentatie om andere beperkingen van de door u gekozen poolmodus te controleren.
Als PgBouncer wordt geïmplementeerd als een functie, wordt het een potentieel single point of failure. Als de functie PgBouncer niet beschikbaar is, kan deze de hele databaseverbindingsgroep verstoren en downtime voor de toepassing veroorzaken. Als u het single point of failure wilt beperken, kunt u meerdere PgBouncer-exemplaren instellen achter een load balancer voor hoge beschikbaarheid op Virtuele Azure-machines.
Beperking tokengrootte met AAD-verificatie: gebruikers met een groot aantal groepslidmaatschappen kunnen geen verbinding maken via PgBouncer vanwege een beperking van de tokengrootte. Toepassingen, services en gebruikers met een klein aantal groepen werken.
PgBouncer is een lichtgewicht toepassing die gebruikmaakt van een architectuur met één thread. Dit ontwerp is ideaal voor de meeste toepassingsworkloads. Maar in toepassingen die een groot aantal kortdurende verbindingen maken, kan dit ontwerp van invloed zijn op de prestaties van pgBouncer en de mogelijkheid om uw toepassing te schalen beperken. Mogelijk moet u een van de volgende methoden proberen:
- Distribueer de verbindingsbelasting over meerdere PgBouncer-exemplaren op Azure-VM's.
- Overweeg alternatieve oplossingen, waaronder multithreaded-oplossingen zoals PgCat, op Azure-VM's.
Belangrijk
De parameter pgbouncer.client_tls_sslmode
voor de ingebouwde PgBouncer-functie is afgeschaft in de flexibele server van Azure Database for PostgreSQL.
Wanneer TLS/SSL voor verbindingen met flexibele Azure Database for PostgreSQL-server wordt afgedwongen via het instellen van de require_secure_transport
serverparameter ON
, wordt TLS/SSL automatisch afgedwongen voor verbindingen met de ingebouwde pgBouncer-functie. Deze instelling is standaard ingeschakeld wanneer u een nieuw exemplaar van een flexibele Azure Database for PostgreSQL-server maakt en de ingebouwde PgBouncer-functie inschakelt. Zie Netwerkoverzicht voor Azure Database for PostgreSQL - Flexible Server met privétoegang voor meer informatie.
Voor klanten die vereenvoudigd beheer, ingebouwde hoge beschikbaarheid, eenvoudige connectiviteit met containertoepassingen en de mogelijkheid om de populairste configuratieparameters te gebruiken, is de ingebouwde PgBouncer-functie een goede keuze. Voor klanten die multithreaded schaalbaarheid willen, volledige controle over alle parameters en een foutopsporingservaring, is het instellen van PgBouncer op Azure-VM's mogelijk een alternatief.
Volgende stappen
- Meer informatie over netwerkconcepten.
- Bekijk een overzicht van de flexibele Azure Database for PostgreSQL-server.