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.

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 Verbinding maken ivity (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.

In de volgende tabel ziet u de versies van PgBouncer die momenteel zijn geïmplementeerd, samen met elke primaire versie van PostgreSQL:

PostgreSQL 16 PostgreSQL 15 PostgreSQL 14 PostgreSQL 13 PostgreSQL 12 PostgreSQL 11
1.22.1 1.22.1 1.22.1 1.22.1 1.22.1 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 Verbinding maken van clients die zijn gekoppeld aan een flexibele Azure Database for PostgreSQL-serververbinding DatabaseName Nee
Wachtende clientverbindingen (preview) client_connections_waiting Tellen Verbinding maken van clients die wachten op een flexibele Azure Database for PostgreSQL-serververbinding met deze clients DatabaseName Nee
Actieve serververbindingen (preview) server_connections_active Tellen Verbinding maken ions to Azure Database for PostgreSQL flexible server that a client connection is using DatabaseName Nee
Niet-actieve serververbindingen (preview) server_connections_idle Tellen Verbinding maken ies naar een 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:

  1. Stel de pgBouncer.stats_users parameter in op de naam van een bestaande gebruiker (bijvoorbeeld myUser) en pas de wijzigingen toe.

  2. Verbinding maken als deze gebruiker naar de pgbouncer database 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 beschikbare SHOW 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 Beheer console voor meer informatie over de PgBouncer-opdrachten.SHOW

Uw toepassing overschakelen naar PgBouncer

Volg deze stappen om PgBouncer te gaan gebruiken:

  1. 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"
    
  2. 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.

  3. 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 modi voor transactie- en instructiepools gebruiken, samen met voorbereide instructies. 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.

  • 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