PgBouncer è un pool di connessioni leggero per PostgreSQL. PgBouncer 1.7 è stato annunciato il 18 dicembre 2015. In questo post del blog parleremo dei principali nuovi miglioramenti di PgBouncer.
Le caratteristiche più colorate
- PgBouncer 1.7 supporta connessioni TLS e penso che questo sia il più grande miglioramento della nuova versione. Hanno usato le librerie OpenSSL/LibreSSL come implementazione back-end della funzionalità.
- PgBouncer ora supporta l'autenticazione tramite Certificato client TLS .
Analizziamo i dettagli delle impostazioni TLS di PgBouncer. Ci sono 14 parametri di configurazione relativi alla configurazione di TLS (impostazioni lato client + lato server).
Per assegnare quale modalità TLS utilizzare per le connessioni dai client, dobbiamo impostare client_tls_sslmode parametro. Le connessioni TLS sono disabilitate per impostazione predefinita. Quando abilitato, client_tls_key_file e client_tls_cert_file deve anche essere configurato per impostare la chiave e il certificato che PgBouncer utilizza per accettare le connessioni client.
Possiamo assegnare un certificato radice per convalidare i certificati client impostando client_tls_ca_file parametro, il valore predefinito non è impostato.
Possiamo specificare quali versioni del protocollo TLS sono consentite impostando client_tls_protocols parametro, il valore predefinito è tutto.
Per impostazioni lato client più dettagliate, puoi controllare client_tls_ciphers , client_tls_ecdhcurve e client_tls_dheparams parametri.
Ora parliamo dei parametri di configurazione lato server TLS. Innanzitutto, dobbiamo dichiarare la modalità TLS da utilizzare per le connessioni ai server PostgreSQL con server_tls_sslmode parametro. Le connessioni TLS sono disabilitate per impostazione predefinita. Possiamo assegnare un server CA con server_tls_ca_file parametro. Se desideriamo assegnare una chiave privata per l'autenticazione di PgBouncer sul server PostgreSQL, possiamo utilizzare server_tls_key_file parametro, possiamo anche assegnare un certificato per la chiave privata che il server PostgreSQL può convalidare con server_tls_cert_file parametro. Come abbiamo fatto nelle impostazioni di connessione TLS lato client, possiamo dichiarare quali versioni del protocollo TLS sono consentite con server_tls_protocols parametro.
- Dopo il supporto TLS, un'altra novità significativa è il supporto per l'autenticazione "peer" su socket Unix.
- Come ultima caratteristica importante di questa versione vorrei citare il supporto per il file di controllo dell'accesso basato su host, come pg_hba.conf in Postgres. Ciò consente di configurare TLS per connessioni di rete e autenticazione "peer" per le connessioni locali.
Possiamo configurare come autenticare gli utenti con auth_type parametro di PgBouncer. Tutti i parametri di configurazione sono definiti nel file di configurazione pgbouncer.ini. Esaminiamo i dettagli di auth_type parametro.
tipo_auth al parametro può essere assegnato uno dei 6 valori sotto elencati. Vediamo le spiegazioni e l'utilizzo di questi valori.
- va : Se impostiamo il parametro auth_type con il valore hba , dovremmo impostare auth_hba_file parametro anche per mostrare quale pg_hba.conf verrà utilizzato come configurazione. In questo modo consentiamo il caricamento del tipo di autenticazione effettivo da auth_hba_file. Ciò significa che possiamo utilizzare diversi metodi di autenticazione per diversi percorsi di accesso. Ad esempio, con la versione 1.7 la connessione su socket Unix utilizza il metodo di autenticazione peer, allo stesso tempo la connessione su TCP deve utilizzare TLS. Finora, il formato file HBA non supporta tutti i metodi di autenticazione di pg_hba.conf. I metodi supportati sono:fiducia, rifiuto, md5, password, peer e cert.
- certificato : Il cliente deve connettersi su TLS connessione con certificato client valido. Il nome utente viene quindi preso da CommonName campo dal certificato.
- md5 : Usa il controllo della password basato su MD5. file_auth (il nome del file da cui caricare nomi utente e password ) può contenere password crittografate con MD5 o in testo normale. Questo è il metodo di autenticazione predefinito.
- normale : La password in chiaro viene inviata via cavo. Deprecato.
- fiducia : Non viene eseguita alcuna autenticazione. Il nome utente deve esistere ancora in auth_file .
- qualsiasi : Come il metodo trust, ma il nome utente fornito viene ignorato. Richiede che tutti i database siano configurati per accedere come utente specifico. Inoltre, il database della console consente a qualsiasi utente di accedere come amministratore.
Altre caratteristiche brillanti
Ci sono più funzionalità rilasciate in questa versione. Puoi visitare la pagina del registro delle modifiche di PgBouncer o controllare l'elenco di seguito per gli altri miglioramenti:
- Imposta query_wait_timeout a 120 secondi per impostazione predefinita. Questo parametro definisce il tempo massimo consentito per le query in attesa dell'esecuzione. Se la query non viene assegnata a un server durante tale periodo, il client viene disconnesso. Viene utilizzato per impedire ai server che non rispondono di acquisire connessioni. Aiuta anche quando il server è inattivo o il database rifiuta le connessioni per qualsiasi motivo. Se questo è disabilitato, i client verranno accodati all'infinito. L'impostazione predefinita corrente (0) provoca una coda infinita, che non è utile. Con la versione 1.7, se il client ha una query in sospeso e non è stato assegnato alla connessione del server, la connessione del client verrà interrotta per impostazione predefinita dopo 120 secondi.
- Disabilita server_reset_query_always per impostazione predefinita. Ora la query di ripristino viene utilizzata solo nei pool in modalità sessione.
- Aumenta pkt_buf a 4096 byte. Migliora le prestazioni con TLS . Il comportamento è probabilmente specifico del carico, ma dovrebbe essere sicuro da fare poiché dalla v1.2 i buffer dei pacchetti sono separati dalle connessioni e usati pigramente dal pool.
- Conteggio pipeline di supporto previsto ReadyForQuery pacchetti. Ciò evita di rilasciare il server troppo presto. Correzioni n. 52.
- Migliorato sbuf_loopcnt logica:il socket è garantito per essere rielaborato anche se non ci sono eventi dal socket. Richiesto per TLS poiché ha il proprio buffering.
- Adatta i test di sistema per funzionare con il moderno BSD e MacOS . (Eric Radman )
- Rimuovi crypt aut. È obsoleto e non è supportato da PostgreSQL da 8.4 .
- Risolvi il semplice “–con-cura” configure opzione – senza argomento è stata interrotta.
Cos'è PgBouncer?
PgBouncer è un'utilità per la gestione delle connessioni client al database PostgreSQL. In poche parole, mantiene un pool di connessioni al server PostgreSQL e riutilizza quelle connessioni esistenti. Sebbene ciò possa essere utile per ridurre il sovraccarico di connessione del client, consente anche di limitare il numero massimo di connessioni aperte al server di database. Può anche essere utilizzato per modellare il traffico come reindirizzare le connessioni a uno o più database a server di database diversi. Oltre a questi, PgBouncer può essere utilizzato per la gestione della sicurezza a livello di utente e anche a livello di database.
Puoi scaricare PgBouncer tramite la loro pagina di download e iniziare a usarlo ora!
Per ulteriori informazioni su PgBouncer puoi controllare il mio precedente post sul blog su PgBouncer.
Buone letture!