Google e' noto per il suo motore di ricerca, che e' piu' utilizzati e completi,
ma fornisce anche un ottimo insieme di servizi in Cloud.
Tra i molti servizi offerti vi sono anche quelli relativi alle basi di dati relazionali gestite
che prendono il nome di Google Cloud SQL.
Cloud SQL for PostgreSQL e' uno dei servizi disponibili su Google Cloud
ed e' l'oggetto di questa breve paginetta.
Questo documento descrive le caratteristiche degli ambienti Cloud SQL for PostgreSQL
presentando in modo sintetico e pratico le differenze rispetto
ad un'installazione PostgreSQL on-premise.
Dopo una breve introduzione (PostgreSQL, Cloud SQL), si entra nell'architettura di Cloud SQL for Postgres vedendo l'installazione, la configurazione ed i superpoteri dell'amministratore. Si passa quindi all'utilizzo con gli accessi, la gestione, il monitoring, i backup/restore.
Per ovvie ragioni di spazio questo documento e' stato scritto per DBA Postgres
o quantomeno per chi PostgreSQL gia' lo conosce ed lo usa...
Per chi non conosce PostgreSQL si consiglia la lettura di
un documento introduttivo su PostgreSQL
come Introduzione a PostgreSQL oppure
Qualcosa in piu' su PostgreSQL
ed infine del documento Statistiche prestazionali in PostgreSQL
che elenca strumenti e tecniche per analizzare le prestazioni in PostgreSQL.
PostgreSQL e' considerato a ragione il piu' completo e robusto RDBMS Open Source. Le sue prestazioni ed affidabilita' sono paragonabili a quelle dei piu' diffusi RDBMS commerciali e su alcune funzionalita' e' il database di riferimento (eg. GIS). I suoi principali punti di forza sono una licenza molto aperta per tutti gli utilizzi, la gestione completa ed efficiente delle transazioni (ACID), ottime prestazioni ed affidabilita', un SQL ricco di funzionalita' (eg. subquery, referential integrity, inheritance, trigger, stored fuctions, 2PC, full-text, JSON, analytics, native partitioning, stored procedures, ...), allineato ai piu' recenti standard ed estensibile (extension), funzionalita' Object-Relational, strumenti di amministrazione e gestione completi, funzionalita' di replicazione/HA/DR incluse nel database.
La gestione delle transazioni in PostgreSQL avviene con la tecnica del MVCC
(Multiversion Concurrency Control)
e la consistenza dei dati su disco e' assicurata con il logging sui WAL
(Write-Ahead Logging).
Un'instanza Postgres contiene piu' database.
All'interno di ogni database viene mantenuto un ricco Catalog
che consente di controllare con query SQL gli oggetti presenti
nella base dati (eg. pg_database, pg_class, pg_tables, ...) e l'andamento delle
attivita' (eg. pg_stat_activity, pg_locks, pg_settings, pg_stats,...).
L'ecosistema di strumenti, applicazioni ed ambienti compatibili con Postgres e' molto ampio e completo.
Google Cloud e' una delle piattaforma cloud piu' utilizzate del mondo. Tra i molteplici servizi offerti Cloud SQL semplifica l'impostazione, il funzionamento e il dimensionamento di database relazionali nel cloud.
Le basi dati Cloud SQL sono facilmente scalabili ed automatizzano molte attivita' di amministrazione del database (eg. installazione, upgrade, backup, monitoring, replica). Tutte le basi dati vengono gestite da console grafica oppure con CLI oppure con API in modo semplice e consistente.
Google Cloud SQL rende disponibili diversi database: PostgreSQL, MySQL e Microsoft SQL Server. In questa paginetta vedremo le caratteristiche del servizio Cloud SQL for Postgres!
Come come i servizi di compute anche i servizi Cloud SQL vengono erogati nelle diverse Region disponibili su Google Cloud (eg. Oregon: us-west1, N.Virginia: us-east4, Milano: europe-west8). In ogni Region sono generalmente presenti piu' Zone che sono implementate con alimentazioni, reti, strutture indipendenti per garantire un'elevata alta affidabilita'.
Con Cloud SQL e' possibile creare una combinazione di diverse capacità di CPU, memoria, storage e rete
in modo semplice e mantenendo il massimo della flessibilita',
per ospitare un'istanza di database praticamente di qualsiasi dimensione.
Si parte da una singola CPU per arrivare ad un massimo di
96 CPUs e 624 GB di memoria
oltre alla possibilita' di definire repliche sia per scalare con le attivita' in lettura
che per fornire una maggiore HA.
Cloud SQL for PostgreSQL fornisce un database PostgreSQL gestito in cui una serie di attivita' vengono svolte in modo guidato o completamente automatico: installazione, upgrade, backup, monitoraggio, replica, ...
Sono disponibili le diverse versioni di PostgreSQL dalla 9.6 alla 14, ma ovviamente e' consigliabile utilizzare le versioni piu' recenti.
Non vi sono differenze per le applicazioni rispetto ad un'installazione on-premises. Le differenze si rendono evidenti nella gestione e nell'amministrazione e nel seguito cercheremo di vedere tutte le particolarita' di Cloud SQL PostgreSQL.
Per il sizing non e' necessario preallocare o definire la dimensione dello storage. Un database su Cloud SQL puo' crescere dinamicamente allocando via via lo spazio necessario fino ad un massimo di 64 TB.
Ricordate i comandi rpm o apt del sistema operativo per installare i pacchetti PosgreSQL? Dimenticateli! Siamo in Cloud ed e' tutto diverso...
L'installazione di un'istanza Cloud SQL for PostgreSQL non richiede alcuna competenza tecnica specifica e si effettua solo con qualche click. Anche la configurazione iniziale della base dati, che tipicamente richiede competenze specifiche sul motore, e' molto semplificata. Infatti Cloud SQL impostera' in automatico i principali parametri di tuning in modo ottimizzato.
Basta solo utilizzare il wizard per creare l'istanza di database voluta. La prima scelta da fare e'... vogliamo un database PostgreSQL!
A differenza di un'installazione PostgreSQL on premise non e' necessaria
una configurazione iniziale.
I principali parametri di tuning sono gia' configurati,
il file pg_hba non puo', e non deve, essere impostato.
A volte e' opportuna qualche configurazione specifica ma questa
verra' impostata con la configurazione dell'istanza e con i Database Flag
come vederemo nel seguito.
Ricordate i file postgresql.conf e pg_hba.conf? Dimenticateli! Siamo in Cloud ed e' tutto diverso...
Per effettuare la configurazione di Cloud SQL for PostgreSQL non e' necessario
modificare alcun file. Le configurazioni si effettuano
da interfaccia grafica e con i Database Flag.
I parametri disponibili sono quasi tutti quelli presenti in Postgres
con alcune differenze perche' alcuni parametri vengono calcolati in
automatico ed altri prendono nomi differenti.
Le prime impostazioni di un'istanza Postgres sono quelle sul tipo di sistema ospite e sulla configurazione in generale:
I database Flag sono l'analogo dei parametri di configurazione di Postgres. La maggioranza dei Flag sono identici ai parametri della versione community, alcuni Flag sono specifici di Cloud SQL e si riconoscono facilmente dal nome:
E' possibile eseguire le modifiche nella finistra di manutenzione o applicarle immediatamente.
Cosi' come avviene per i parametri di PostgreSQL on premise alcune impostazioni possono essere
attive immediatamente mentre altre richiedono un riavvio.
Tutti i parametri disponibili sono visibili nella vista di sistema standard pg_settings.
In generale i parametri che richiedono il riavvio sono gli stessi in Cloud SQL.
Ad esempio quando serve inserire un valore
nel parametro shared_preload_libraries e' necessario un riavvio
sia con una versione community on-premises che su Cloud SQL for PostgreSQL.
Molti parametri che un DBA deve impostare per eseguire un tuning iniziale di una base dati con Cloud SQL for PostgreSQL sono impostati automaticamente con default molto ragionevoli basati sulla dimensione della macchina ospite configurata. Tra i piu' importanti: max_connections, shared_buffers, effective_cache_size, ... maggiori dettagli si trovano nella documentazione ufficiale.
Ricordate che l'utente postgres del sistema operativo ha tutti i poteri e che l'utente postgres del database ha tutti i poteri? Dimenticatelo! Siamo in Cloud ed e' tutto diverso...
Non c'e' alcun accesso al sistema operativo:
i file di configurazione non si utilizzano e vengono utilizzati i Database Flag,
i file di log sono accessibili solo da console o da CLI.
E' presente l'utente postgres del database ma... non ha i superpoteri:
al suo posto Google utilizza l'utente cloudsqladmin che ha tutti i poteri
ma che e' utilizzato solo da Google Cloud per attivita' di servizio.
Al momento della creazione di un'istanza viene creato l'utente postgres
con il massimo dei poteri
ed e' possibile creare ulteriori utenti con i privilegi voluti
ma nessuno sara' superuser.
Dal punto di vista dell'accesso applicativo alla base dati non presenta differenze rispetto all'utilizzo di un'istanza on premises:
psql testdb --user=test --host=IP_pubblico Password for user test: psql (14.4, server 14.4) SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)
In pratica e' sufficiente utilizzare l'IP dell'istanza come host nella stringa di connessione.
Lo stesso avviene per un'eventuale istanza di replica che, naturalmente,
puo' essere acceduta in sola lettura.
Naturalmente saranno le applicazioni a dover accedere al database in modo protetto e con la minore latenza possibile. L'integrazione con gli altri servizi e' uno dei punti forti dell'offerta complessiva di Google in Cloud.
La gestione di un'istanza Google Cloud SQL PostgreSQL e' differente rispetto a quella di un'istanza on-premises ma e' anche terribilmente semplice!
La console permette di effettuare tutte le normali attivita' di gestione compresa
la modifica di un'istanza o il clone.
Quando una modifica richiede il riavvio e' possibile eseguirlo immediatamente
oppure farlo eseguire automaticamente alla successiva finestra di manutenzione.
Le stesse funzionalita' sono richiamabili anche da CLI o da API.
Sono molteplici le possibilita' di monitoraggio dei servizi Cloud SQL. Una serie di statistiche utili sono riportate nel System insights [NdA tra cui anche alcune particolarmente sottili come il controllo sul wraparound degli XID]. Il Query insights invece riporta il dettaglio del carico riconoscendo le singole query responsabili.
La maggioranza delle metriche del database sono
specifiche di PostgreSQL, che un DBA conosce bene perche' ottenute
dalle classiche viste di sistema (eg. pg_stat_activity, pg_stat_database, pg_stat_bgwriter),
ma sono disponibili anche alcune metriche ulteriori.
L'abilitazione di degli Insights e' molto semplice e si effettua da console.
Dal punto di vista "tecnico" l'implementazione e' molto semplice:
l'utente cloudsqladmin esegue una serie di query a tempo
sulle viste di sistema di PostgreSQL (eg. pg_stat_statement)!
Per completezza va infine ricordato che sono disponibili ulteriori strumenti di monitoraggio sia Cloud SQL (eg. analisi dei log), sia legacy PostgreSQL (eg. pgAdmin). Da questo punto di vista l'unica limitazione sarebbero le autorizzazioni ma in realta' anche gli strumenti piu' datati funzionano perfettamente.
Questa e' una della parti che preferisco dei DBaaS perche' le problematiche dei backup e dei restore sono sempre state quelle che meno mi piacevano sui database on premises...
E' possibile scegliere se eseguire i backup automatici
o meno nella configurazione dell'istanza.
I backup dei database Cloud SQL vengono effettuati automaticamente durante la
backup window e mantenuti per il periodo di ritenzione prescelto
(impostabile fino a 365 giorni).
In qualsiasi momento e' possibile eseguire un backup a richiesta.
I backup contengono l'intera istanza DB in tutte le sue parti.
Nel caso di Google Cloud SQL PostgreSQL sono quindi presenti tutti i database
e gli oggetti comuni ai database (eg. roles).
Non e' possibile impostare backup parziali.
Vengono salvati anche i transaction log la cui ritenzione puo' essere impostata
da 1 a 7 giorni.
I restore possono essere eseguiti al momento del backup o in modalita' PITR,
sulla stessa istanza di partenza o su una nuova istanza.
I backup possono essere utilizzati solo per effettuare un restore. Per migrare i dati, eseguire ribaltamenti parziali, ... si utilizzano gli export (che vengono effettuati con pg_dump e pg_restore).
Sono presenti ulteriori funzionalita' sui backup per maggiori dettagli consultare la documentazione ufficiale.
Un confronto Cloud SQL for PostgreSQL ed AlloyDB puo' essere interessante perche' sono servizi simili offerti entrambe da Google.
AlloyDB e' un servizio database di Google Cloud compatibile
con PostgreSQL
ottimizzato per la replica dei dati e l'utilizzo in Cloud.
Un'istanza AlloyDB e' compatibile da punto di vista applicativo a PostgreSQL
ma presenta aspetti architetturali specifici.
AlloyDB separa la parte compute dalla parte storage.
Lo storage e' mantenuto su volumi replicati
su tre differenti AZ in una singola Region.
Un cluster AlloyDB e' costituito da un'istanza primaria
che effettua operazioni sia di lettura che di scrittura e
da instanze di replica (fino a 20) che accedono allo stesso storage
in sola lettura.
AlloyDB offre funzionalita' aggiuntive come l'Index Advisory, il Columnar Engine, l'AlloyDB AI, ...
Anche se l'architettura tecnica e' diversa, dal punto di vista applicativo generalmente non vi sono differenze rispetto alla corrispondente versione di database. AlloyDB aumenta in modo significativo l'HA di una configurazione. AlloyDB promette un significativo miglioramento delle prestazioni... a mio avviso tuttavia vi sono anche casi in cui AlloyDB non presenta grandi vantaggi prestazionali, e quindi e' sicuramente consigliabile eseguire un benchmark delle applicazioni per verificare gli effettivi vantaggi.
Google garantisce differenti SLA contratturali per le istanze AlloyDB a seconda che si tratti di un cluster su una o su piu' zone. AlloyDB Multi-AZ SLA prevede una disponibilita' di uptime del 99.99%, AlloyDB Single-AZ SLA prevede una disponibilita' di uptime del 99.9%.
E' disponibile un documento che descrive in modo specifico AlloyDB.
Infine vi sono differenze sui costi... ma questa per fortuna e' una pagina tecnica e quindi e' un argomento OOT!
Non e' possibile in nessun modo l'accesso alla VM/container che ospita la base dati. Ma se potessimo... ecco cosa vedremmo!
Il sistema operativo e' un Linux Debian su cui e' installato un PostgreSQL 14.4. La struttura dei processi presenta una serie di processi di background, tra cui il principale (Postmaster) e gli eventuali processi utente (postgres):
A parte gli scherzi l'accesso al sistema ospite non e' utilizzabile ed ogni configurazione o controllo si esegue dalla console.
Il documento Your server stinks! e' sempre aggiornato sui rilasci delle release PostgreSQL e su Google Cloud SQL.
Cloud SQL for PostgreSQL fornisce una sessantina di extension tra cui la quasi totalita' delle extension core di PostgreSQL ed aggiunge alcune estensioni ulteriori tra cui orafce, pg_cron, pgAudit, pg_proctab, pg_partman, plv8, pgrouting, pg_hint_plan, ...
Oltre a Cloud SQL sono molti i servizi DBaaS (DB as as Service) disponibili sul Cloud Google e su quello degli altri concorrenti... sicuramente e' utile un confronto con i servizi di Amazon RDS e con Aurora PostgreSQL.
Maggiori dettagli? ... si puo' sempre guardare dentro Cloud SQL for PostgreSQL!
Titolo: Cloud SQL for PostgreSQL 4 DBAs
Livello: Avanzato
Data:
14 Febbraio 2020
Versione: 1.0.2 - 1 Aprile 2022
Autore: mail [AT] meo.bogliolo.name