Condividi tramite


PgBouncer in Database di Azure per PostgreSQL - Server flessibile

SI APPLICA A: Database di Azure per PostgreSQL - Server flessibile

Database di Azure per PostgreSQL - Server flessibile offre PgBouncer come soluzione predefinita per pool di connessioni. PgBouncer è una funzionalità facoltativa che può essere abilitata per ogni server di database. È supportato nei livelli di calcolo per utilizzo generico e ottimizzato per la memoria sia nelle reti ad accesso pubblico che in reti ad accesso privato.

PgBouncer viene eseguito nella stessa macchina virtuale (VM) del server di database per il server flessibile di Database di Azure per PostgreSQL. Postgres usa un modello basato su processi per le connessioni, quindi la gestione di molte connessioni inattive comporta costi elevati. Postgres viene eseguito in vincoli di risorse quando il server esegue più di qualche migliaio di connessioni. Il vantaggio principale di PgBouncer consiste nel migliorare le connessioni inattive e le connessioni di breve durata nel server di database.

PgBouncer usa un modello leggero che utilizza operazioni I/O asincrone. Esso usa le connessioni Postgres solo quando necessario, ovvero quando si trova all'interno di una transazione aperta o quando una query è attiva. Questo modello consente l’aumento fino a 10.000 connessioni con sovraccarico ridotto.

PgBouncer viene eseguito sulla porta 6432 nel server di database. È possibile modificare la configurazione della connessione di database dell'applicazione in modo da usare lo stesso nome host, ma impostare la porta su 6432 per iniziare a usare PgBouncer e beneficiare del ridimensionamento ottimizzato delle connessioni inattive.

PgBouncer nel server flessibile di Database di Azure per PostgreSQL supporta l'autenticazione Microsoft Entra (Azure AD).

Abilitazione e configurazione di PgBouncer

Per abilitare PgBouncer, passare al riquadro Parametri del server nel portale di Azure, cercare PgBouncer e modificare l'impostazione pgbouncer.enabled su true. Non è necessario riavviare il server.

È possibile configurare le impostazioni di PgBouncer usando questi parametri.

Nota

L'elenco seguente di parametri del server PgBouncer è visibile nel riquadro Parametri server solo se il parametro del server pgbouncer.enabled è impostato su true. In caso contrario, i parametri saranno deliberatamente nascosti.

Nome parametro Descrizione Default
pgbouncer.default_pool_size Impostare questo valore del parametro sul numero di connessioni per coppia utente/database. 50
pgbouncer.ignore_startup_parameters Immettere un elenco delimitato da virgole di parametri che PgBouncer può ignorare. Ad esempio, è possibile consentire a PgBouncer di ignorare il parametro extra_float_digits. Alcuni parametri sono consentiti; tutti gli altri generano un errore. Questa capacità è necessaria per tollerare una Java Database Connectivity (JDBC) troppo entusiasta che vuole impostare incondizionatamente extra_float_digits=2 in pacchetti di avvio. Usare questa opzione se la raccolta usata segnala errori, ad esempio pq: unsupported startup parameter: extra_float_digits.
pgbouncer.max_client_conn Impostare questo valore del parametro sul numero massimo di connessioni client a PgBouncer che si vuole supportare. 5000
pgbouncer.max_prepared_statements Quando impostato su un valore diverso da zero, PgBouncer tiene traccia di comandi correlati a istruzioni preparate denominate a livello di protocollo inviati dal client in modalità di pool di transazioni e istruzioni. 0
pgbouncer.min_pool_size Aggiungere altre connessioni del server al pool se al di sotto di questo numero. 0
pgbouncer.pool_mode Impostare questo valore del parametro su TRANSACTION per il pool di transazioni (l'impostazione consigliata per la maggior parte dei carichi di lavoro). transazione
pgbouncer.query_wait_timeout Tempo massimo (in secondi) per cui le query possono attendere l’esecuzione. Se la query non viene assegnata a un server durante tale periodo, il client viene disconnesso. 120
pgbouncer.server_idle_timeout Se una connessione del server rimane inattiva una volta trascorso questo numero di secondi, verrà eliminata. Se 0, il timeout è disabilitato. 600
pgbouncer.stats_users Elenco separato da virgole di utenti del database autorizzati a connettersi ed eseguire query di sola lettura nella console pgBouncer.

Per altre informazioni sulle configurazioni di PgBouncer, vedere la documentazione pgbouncer.ini.

Versione di PgBouncer

Attualmente, la versione di PgBouncer distribuita in tutte le versioni principali supportate del motore (16, 15, 14, 13, 12, 11), nel server flessibile di Database di Azure per PostgreSQL è 1.22.1.

Vantaggi

Usando la funzionalità predefinita PgBouncer con il server flessibile di Database di Azure per PostgreSQL, si possono ottenere questi vantaggi:

  • Praticità della configurazione semplificata: poiché PgBouncer è integrato con il server flessibile di Database di Azure per PostgreSQL, non è necessaria un'installazione diversa o una configurazione complessa. È possibile effettuare la configurazione direttamente dai parametri del server.

  • affidabilità di un servizio gestito: PgBouncer offre i vantaggi dei servizi gestiti di Azure. Ad esempio, gli aggiornamenti di PgBouncer sono gestiti da Azure. Gli aggiornamenti automatici eliminano la necessità di manutenzione manuale e assicurano che PgBouncer rimanga aggiornato con le funzionalità e le patch di sicurezza più recenti.

  • Supporto per vari tipi di connessione: PgBouncer nel server flessibile di Database di Azure per PostgreSQL offre supporto per connessioni sia pubbliche che private. È possibile usarlo per stabilire connessioni sicure su reti private o connettersi esternamente, a seconda dei requisiti specifici.

  • Disponibilità elevata in scenari di failover: se un server di standby viene promosso a ruolo primario durante un failover, PgBouncer viene riavviato senza problemi nello standby appena promosso. Non è necessario apportare modifiche alla stringa di connessione dell'applicazione. Questa funzionalità consente di garantire disponibilità continua e ridurre al minimo le interruzioni del pool di connessioni dell'applicazione.

Monitoraggio di PgBouncer

Metrica

Il server flessibile di Database di Azure per PostgreSQL offre sei metriche per il monitoraggio del pool di connessioni PgBouncer:

Nome visualizzato ID metrica Unità description Dimensione Impostazione predefinita abilitata
Connessioni client attive (anteprima) client_connections_active Conteggio Connessioni da client associati a una connessione server flessibile di Database di Azure per PostgreSQL DatabaseName No
Connessioni client in attesa (anteprima) client_connections_waiting Conteggio Connessioni da client in attesa di essere servite da una connessione server flessibile di Database di Azure per PostgreSQL DatabaseName No
Connessioni server attive (anteprima) server_connections_active Conteggio Connessioni al server flessibile di Database di Azure per PostgreSQL in uso da parte di una connessione client DatabaseName No
Connessioni server inattive (anteprima) server_connections_idle Conteggio Connessioni al server flessibile di Database di Azure per PostgreSQL inattive e pronte per servire una nuova connessione client DatabaseName No
Totale connessioni in pool (anteprima) total_pooled_connections Conteggio Numero corrente di connessioni in pool DatabaseName No
Numero di pool di connessioni (anteprima) num_pools Conteggio Numero totale di pool di connessioni DatabaseName No

Per altre informazioni, vedere Metriche PgBouncer.

Console di amministrazione

PgBouncer fornisce anche un database interno denominato pgbouncer. Quando ci si connette a tale database, è possibile eseguire comandi SHOW che forniscono informazioni sullo stato corrente di PgBouncer.

Per connettersi al database pgbouncer:

  1. Impostare il parametro pgBouncer.stats_users sul nome di un utente esistente (ad esempio, myUser) e applicare le modifiche.

  2. Connettersi al database pgbouncer come utente e impostare la porta come 6432:

    psql "host=myPgServer.postgres.database.azure.com port=6432 dbname=pgbouncer user=myUser password=myPassword sslmode=require"
    

Dopo aver eseguito la connessione al database, usare i comandi SHOW per visualizzare le statistiche di PgBouncer:

  • SHOW HELP: elenca tutti i comandi SHOW disponibili.
  • SHOW POOLS: mostra il numero di connessioni in ogni stato per ogni pool.
  • SHOW DATABASES: mostra i limiti correnti di connessione applicati per ogni database.
  • SHOW STATS: mostra statistiche sulle richieste e sul traffico per ogni database.

Per altre informazioni sui comandi PgBouncer SHOW, vedere Console di amministrazione.

Passaggio la propria applicazione all'uso di PgBouncer

Per iniziare a usare PgBouncer, seguire questa procedura:

  1. Connettersi al server di database, ma usare la porta 6432 anziché la normale porta 5432. Verificare che la connessione sia funzionante.

    psql "host=myPgServer.postgres.database.azure.com port=6432 dbname=postgres user=myUser password=myPassword sslmode=require"
    
  2. Testare l'applicazione in un ambiente QA con PgBouncer per assicurarsi di non avere problemi di compatibilità. Il progetto PgBouncer fornisce una matrice di compatibilità ed è consigliabile usare pool di transazioni per la maggior parte degli utenti.

  3. Modificare l'applicazione di produzione perché si connetta alla porta 6432 anziché alla porta 5432. Monitorare eventuali errori sul lato applicazione che potrebbero segnalare problemi di compatibilità.

PgBouncer in disponibilità elevata con ridondanza della zona

Nei server con ridondanza della zona e disponibilità elevata, il server primario esegue PgBouncer. È possibile connettersi a PgBouncer nel server primario sulla porta 6432. Dopo un failover, PgBouncer viene riavviato nello standby appena promosso, che è ora il server primario. La stringa di connessione dell'applicazione rimane quindi la stessa dopo il failover.

Uso di PgBouncer con altri pool di connessioni

In alcuni casi, potrebbe essere già presente un pool di connessioni sul lato applicazione o PgBouncer potrebbe già essere configurato sul lato applicazione, (ad esempio, un sidecar del servizio Azure Kubernetes). In questi casi, la funzionalità PgBouncer integrata può comunque essere utile perché offre i vantaggi del ridimensionamento delle connessioni inattive.

L'uso di un pool sul lato applicazione insieme a PgBouncer nel server di database può essere utile. In questo caso, il pool sul lato applicazione offre il vantaggio di ridurre la latenza di connessione iniziale (perché il round trip per inizializzare la connessione è molto più veloce) e PgBouncer sul lato database offre il ridimensionamento delle connessioni inattive.

Limiti

  • La funzionalità PgBouncer non è attualmente supportata con il livello di calcolo del server con possibilità di burst. Se si modifica il livello di calcolo da Utilizzo generico o Ottimizzato per la memoria a con possibilità di burst, si perde la funzionalità PgBouncer integrata.

  • Ogni volta che il server viene riavviato durante operazioni di scalabilità, failover a disponibilità elevata o un riavvio, PgBouncer e la macchina virtuale vengono riavviati. È quindi necessario ristabilire le connessioni esistenti.

  • Il portale non mostra tutti i parametri PgBouncer. Dopo aver abilitato PgBouncer e salvato i parametri, è necessario chiudere il riquadro Parametri server (ad esempio, selezionare Panoramica) e quindi tornare al riquadro Parametri del server.

  • Non è possibile usare modalità pool di istruzioni insieme a istruzioni preparate. La versione corrente di PgBouncer ha aggiunto il supporto per istruzioni preparate all'interno della modalità transazione. Questo supporto può essere abilitato e configurato tramite max_prepared_statements parametro. L'impostazione di questo parametro sopra il valore predefinito 0 attiva il supporto per istruzioni preparate. Questo supporto riguarda solo le istruzioni preparate a livello di protocollo. Per la maggior parte dei linguaggi di programmazione, questo significa che si usa la funzione libpq PQprepare sul client, inviando comandi a livello di protocollo che PgBouncer può intercettare, anziché eseguire un comando SQL dinamico simile a PREPARE proc AS, il quale invia testo che PgBouncer non interpreterà correttamente. Per verificare altre limitazioni della modalità pool scelta, vedere la documentazione di PgBouncer.

  • Se PgBouncer viene distribuito come funzionalità, diventa un potenziale singolo punto di guasto. Se la funzionalità PgBouncer è inattiva, può interrompere l'intero pool di connessioni di database e causare tempi di inattività per l'applicazione. Per attenuare il singolo punto di guasto è possibile configurare più istanze di PgBouncer dietro un servizio di bilanciamento del carico per disponibilità elevata in macchine virtuali di Azure.

  • Restrizione delle dimensioni del token con autenticazione AAD: gli utenti con un grande numero di appartenenze a gruppi non potranno connettersi tramite PgBouncer a causa di una restrizione delle dimensioni del token. Le applicazioni, i servizi e gli utenti con un numero ridotto di gruppi funzionano.

  • PgBouncer è un'applicazione leggera che usa un'architettura a thread singolo. Questa progettazione è ideale per la maggior parte dei carichi di lavoro dell'applicazione. Nelle applicazioni che creano un numero elevato di connessioni di breve durata, tuttavia, questa progettazione potrebbe influire sulle prestazioni di pgBouncer e limitare la capacità di ridimensionare l'applicazione. Potrebbe essere necessario tentare uno di questi approcci:

    • Distribuire il carico di connessione tra più istanze di PgBouncer in macchine virtuali di Azure.
    • Prendere in considerazione soluzioni alternative, tra cui soluzioni multithreading come PgCat, nelle macchine virtuali di Azure.

Importante

Il parametro pgbouncer.client_tls_sslmode per la funzionalità PgBouncer integrata è stato deprecato nel server flessibile di Database di Azure per PostgreSQL.

Quando TLS/SSL per connessioni al server flessibile di Database di Azure per PostgreSQL viene applicato impostando il parametro require_secure_transport del server su ON, TLS/SSL viene applicato automaticamente per connessioni alla funzionalità PgBouncer integrata. Questa impostazione è attiva per impostazione predefinita quando si crea una nuova istanza del server flessibile di Database di Azure per PostgreSQL e si abilita la funzionalità PgBouncer integrata. Per altre informazioni, vedere Panoramica della rete per Database di Azure per PostgreSQL - Server flessibile con accesso privato.

Per clienti che desiderano una gestione semplificata, disponibilità elevata integrata, connettività semplice con applicazioni in contenitori e la possibilità di usare i parametri di configurazione più diffusi, la funzionalità PgBouncer integrata è un’ottima scelta. Per clienti che desiderano scalabilità multithreading, controllo completo di tutti i parametri e un'esperienza di debug, la configurazione di PgBouncer in macchine virtuali di Azure potrebbe essere un'alternativa.

Passaggi successivi