Configurazione di Cloud SQL per PostgreSQL per l'utilizzo in produzione

Questo documento spiega come configurare Cloud SQL per PostgreSQL per l'utilizzo in produzione. Cloud SQL per PostgreSQL è un servizio RDBMS completamente gestito integrato con l'ecosistema Google Cloud. Cloud SQL per PostgreSQL offre una serie di funzionalità e caratteristiche principali:

  • Offre servizi a più applicazioni e utenti a livello globale tramite l'utilizzo delle funzionalità di sicurezza gestite di Google Cloud, tra cui VPC e crittografia automatica dei dati inattivi e in transito.
  • Supporta l'architettura ad alta disponibilità utilizzando istanze principali e di standby e il failover automatico tra di esse.
  • Supporta i carichi di lavoro dei database distribuiti attivando la separazione tra lettura/scrittura tra il nodo principale e le repliche di lettura nello stesso cluster di database.
  • Supporta i backup automatici integrati con Cloud Storage e la manutenzione automatica del database.
  • Supporta una serie di carichi di lavoro OLTP (Online Transactional Processing).

Eseguire il deployment di un'istanza Cloud SQL per PostgreSQL

Puoi configurare un'istanza Cloud SQL per PostgreSQL in pochi passaggi utilizzando la console Google Cloud o Google Cloud CLI. Entrambi i metodi sono descritti qui.

Console

  1. Nella console Google Cloud, vai alla pagina SQL>Istanze.

    Vai a Istanze

  2. Fai clic su Crea istanza e poi su Scegli PostgreSQL.

  3. Nella pagina Crea un'istanza PostgreSQL, fornisci i seguenti dettagli:

    • ID istanza: inserisci un nome per l'istanza. Il nome dell'istanza è permanente e non può essere modificato in un secondo momento.
    • Password utente predefinita: scegli la password dell'utente postgres come account amministratore predefinito. Puoi creare altri utenti dopo il deployment dell'istanza PostgreSQL.
    • Regione e Zona: seleziona una regione e una zona. È buona pratica eseguire il deployment dell'istanza PostgreSQL nella stessa regione dei servizi Google Cloud associati (ad esempio le applicazioni) o in prossimità geografica degli utenti per ridurre la latenza per l'elaborazione dei dati. Una volta selezionata una regione, non potrai modificarla in un secondo momento.
    • Versione del database: scegli la versione più recente o, se necessario, la versione più recente disponibile.
  4. Fai clic su Crea per eseguire il deployment dell'istanza PostgreSQL. In alternativa, fai clic su Mostra opzioni di configurazione per impostare configurazioni aggiuntive.

    Creazione di un'istanza PostgreSQL.

    • Opzioni di configurazione aggiuntive:

      • Connettività: in genere, l'istanza PostgreSQL viene collegata alla rete tramite un indirizzo IP pubblico, un indirizzo IP privato e reti autorizzate. Le reti autorizzate sono connessioni consentite che puoi impostare per stabilire una connessione remota, ad esempio l'approvazione di una connessione da un indirizzo IP specifico di un client.

        Configurazione di una connessione di rete.

      • Tipo di macchina e archiviazione:scegli il tipo di macchina in base alle risorse allocate (vCPU, RAM), al tipo di archiviazione (SSD o HDD) e alla capacità di archiviazione. L'aumento della capacità di archiviazione aumenta anche la velocità effettiva del disco supportata (MB/s) e le IOPS in lettura e scrittura per il database. Modifica la capacità di archiviazione in base ai requisiti previsti per la velocità effettiva del disco e le IOPS.

        Capacità di archiviazione di 10 GB.Capacità di archiviazione di 100 GB.

      • Backup automatici e alta disponibilità:utilizza la funzionalità di backup automatici, abilitata per impostazione predefinita, per definire l'intervallo di tempo in cui eseguire i backup automatici. Inoltre, l'opzione di recupero point-in-time, che utilizza i log write-ahead, è obbligatoria anche per la creazione di una replica di lettura. Questi log vengono aggiornati regolarmente e utilizzano spazio di archiviazione. Per evitare problemi di archiviazione imprevisti, ti consigliamo di attivare gli incrementi automatici dello spazio di archiviazione quando utilizzi il recupero in un determinato momento. L'alta disponibilità è disabilitata per impostazione predefinita (multizona). Per attivare il failover automatico, seleziona l'opzione Alta disponibilità (regionale).

      • Flag: questa impostazione specifica il metodo Cloud SQL per il controllo delle impostazioni e dei parametri dell'istanza. È equivalente al file postgresql.conf di un'istanza PostgreSQL non gestita. Per un elenco completo, consulta la documentazione del prodotto. La modifica del valore di un flag o l'impostazione di un nuovo flag potrebbe richiedere il riavvio dell'istanza.

      • Manutenzione: in questa sezione viene specificato il periodo di tempo preferito per l'esecuzione delle attività di manutenzione, tra cui correzioni di bug e upgrade delle versioni minori. Tieni presente che le operazioni di manutenzione generalmente richiedono il riavvio di un'istanza e potrebbero causare una breve interruzione del servizio. Puoi registrarti per ricevere una notifica via email sugli eventi di manutenzione imminenti.

      • Etichette:in questa sezione definisci coppie chiave/valore per classificare l'istanza PostgreSQL, ad esempio:

        Definizione di coppie chiave/valore che classificano l'istanza PostgreSQL.

gcloud

  1. Crea l'istanza PostgreSQL:

    gcloud sql instances create postgresql01 \
        --cpu=2 \
        --memory=7680MB \
        --region=us-central1 --zone=us-central1-a
    
  2. Assegna una password per l'utente predefinito PostgreSQL (esempio di sintassi):

    gcloud sql users set-password postgres \
        --instance INSTANCE_NAME \
        --password PASSWORD
    

    Puoi specificare le seguenti opzioni aggiuntive:

    • Versione database:una delle versioni PostgreSQL supportate.
    • Tipo di archiviazione:SSD o HDD come tipo di archiviazione.
    • Capacità di archiviazione:le impostazioni iniziali dello spazio di archiviazione per l'istanza.
    • Aumento automatico dello spazio di archiviazione:automazione di Cloud SQL per aggiungere ulteriore spazio di archiviazione quando lo spazio libero è insufficiente.
    • Alta disponibilità: alta disponibilità di Cloud SQL.
    • Backup automatici:la finestra di inizio per i backup.
    • Recupero point-in-time:recupero point-in-time e logging write-ahead.
    • Periodo di manutenzione:un periodo di un'ora durante il quale Cloud SQL può eseguire la manutenzione con interruzione.
    • Tempi di manutenzione: i tempi preferiti per eseguire gli aggiornamenti sull'istanza PostgreSQL. Puoi specificare anteprima per gli aggiornamenti precedenti o produzione per quelli successivi.
    • Flag del database:i flag del database PostgreSQL per il controllo di impostazioni e parametri.

    Il seguente comando gcloud crea un'istanza Cloud SQL per PostgreSQL con alcune opzioni aggiuntive:

    gcloud sql instances create postgresql01 \
        --cpu=2 \
        --memory=7680MB \
        --region=us-central1 \
        --zone=us-central1-a \
        --database-version=POSTGRES_12 \
        --storage-type=SSD \
        --storage-size=100 \
        --storage-auto-increase \
        --availability-type=regional \
        --backup-start-time=23:30 \
        --enable-point-in-time-recovery \
        --maintenance-window-day=sun \
        --maintenance-window-hour=11 \
        --maintenance-release-channel=production \
        --database-flags max_connections=100
    

    Per ulteriori informazioni, consulta la sezione Creare istanze.

Selezione istanza

La selezione o la definizione delle dimensioni dell'istanza comporta la scelta di un tipo di macchina in grado di supportare il tuo carico di lavoro Oracle® su Cloud SQL per PostgreSQL. I tipi di istanze sono suddivisi in due gruppi principali:

  • Macchine con core condivisi: convenienti.
  • Istanze con core dedicati: supportano più vCPU e rapporti di memoria.

Per ulteriori informazioni sui tipi di istanze, consulta Prezzi di Cloud SQL.

Per determinare le dimensioni dell'istanza, inizia analizzando le risorse allocate e utilizzate dal database di origine. Puoi recuperare le impostazioni delle risorse del database Oracle dalla visualizzazione di sistema V$OSSTAT o da un report AWR di Oracle (vedi gli esempi seguenti):

Memoria fisica (numero totale di byte di memoria fisica nel server database):

SQL> SELECT ROUND(MAX(VALUE)/1024/1024/1024) AS MEM_SIZE_GB
     FROM V$OSSTAT
     WHERE STAT_NAME = 'PHYSICAL_MEMORY_BYTES';

Memoria allocata:

SQL> SELECT NAME, VALUE, DISPLAY_VALUE FROM V$PARAMETER
     WHERE NAME LIKE '%sga%' OR NAME LIKE '%memory%';

Core CPU (numero di core CPU disponibili):

SQL> SELECT VALUE FROM V$OSSTAT
     WHERE STAT_NAME = 'NUM_CPU_CORES';

Core CPU (identificati da un'istanza Oracle che utilizza la visualizzazione V$LICENSE):

SQL> SELECT CPU_CORE_COUNT_CURRENT FROM V$LICENSE;

Esempio di risorsa del report AWR di Oracle (un report AWR di Oracle può fornire informazioni aggiuntive sulle caratteristiche del carico di lavoro di un'istanza Oracle specifica):

Esempio di risorsa report Oracle AWR.

Una volta che hai le informazioni sulle risorse del database di origine, ti consigliamo di scegliere il tipo di istanza Cloud SQL più simile ed eseguire alcuni benchmark. I risultati dei benchmark ti aiutano a perfezionare la selezione delle istanze.

Configurazione dell'alta disponibilità

Per implementare una soluzione di ripristino di emergenza, simile a Data Guard di Oracle, Cloud SQL per PostgreSQL offre funzionalità ad alta disponibilità che forniscono failover automatico dall'istanza principale del cluster all'istanza in standby. L'istanza di standby si trova in una zona diversa nella stessa regione dell'istanza principale. L'istanza in standby viene mantenuta sincronizzata tramite la replica sincrona tra i dischi permanenti delle istanze principale e in standby. Questo metodo garantisce che tutte le modifiche ai dati dell'istanza principale vengano applicate anche all'istanza di standby.

In caso di errore principale, ad esempio un'istanza non rispondente o un errore a livello di zona, Cloud SQL esegue un failover automatico. L'istanza principale viene monitorata tramite heartbeat, che si verificano a intervalli di 1 secondo, con un failover che si attiva dopo circa 60 secondi senza heartbeat ricevuti dall'istanza principale. A questo punto, l'istanza principale esegue il failover sull'istanza di standby, fornendo l'accesso ai dati alle applicazioni o ai client in modo trasparente, mentre le repliche di lettura esistenti rimangono operative. Tieni presente che, diversamente da Active Data Guard, l'istanza di standby non è aperta per le letture quando agisce come standby. Con Cloud SQL, è possibile utilizzare solo le repliche di lettura per scaricare le letture dall'istanza principale.

Puoi attivare la funzionalità di alta disponibilità (HA) di Cloud SQL per PostgreSQL quando crei l'istanza o per un'istanza PostgreSQL esistente. Ecco la procedura:

Console

  1. Nella pagina di creazione dell'istanza, fai clic su Mostra opzioni di configurazione>Backup automatici e alta disponibilità>Disponibilità e poi seleziona l'opzione Alta disponibilità (regionale).
  2. Per un'istanza PostgreSQL esistente, modifica l'istanza PostgreSQL seguendo il passaggio precedente. Questa operazione richiede il riavvio del database.
  3. Per avviare un failover a scopo di test, vai alla pagina Cloud SQL e fai clic su Failover.

    Avvio del failover per i test.

    Puoi attivare il failback nello stesso modo.

gcloud

  1. Attiva l'alta disponibilità impostando il parametro availability-type su regional:

    gcloud sql instances create postgresql01 \
        --cpu=2 \
        --memory=7680MB \
        --region=us-central1 \
        --zone=us-central1-a \
        --availability-type=regional
    
  2. Verifica se in un'istanza PostgreSQL esistente è configurata l'alta disponibilità:

    gcloud sql instances describe INSTANCE_NAME
    

    Se l'output di questo comando include availabilityType: REGIONAL, l'HA è già abilitato. Se l'output include availabilityType: ZONAL, significa che l'HA non è configurato e può essere attivato utilizzando il comando patch:

    gcloud sql instances patch INSTANCE_NAME --availability-type REGIONAL
    
  3. Avvia un test di failover dal principale al secondario:

    gcloud sql instances failover PRIMARY_INSTANCE_NAME
    

    Per eseguire il failback, esegui lo stesso comando di failover sulla nuova istanza principale.

Utenti e account amministratore

Qualsiasi installazione di Cloud SQL per PostgreSQL viene fornita con due account utente PostgreSQL predefiniti. Questi account sono postgres e cloudsqlimportexport.

Account postgres

L'account postgres è l'account amministratore ed è equivalente agli utenti OracleSYS o SYSTEM in Cloud PaaS. Poiché Cloud SQL per PostgreSQL è un servizio gestito, l'utente postgres, a differenza degli utenti SYS o SYSTEM di Oracle, non può accedere ad alcune procedure e tabelle di sistema che richiedono privilegi avanzati.

L'utente postgres fa parte del ruolo cloudsqlsuperuser e ha i seguenti attributi (privilegi): CREATEROLE, CREATEDB e LOGIN. Non ha gli attributi SUPERUSER o REPLICATION.

Account cloudsqlimportexport

L'account cloudsqlimportexport viene creato con l'insieme minimo di privilegi necessari per le operazioni di importazione/esportazione in formato CSV. Hai la possibilità di creare i tuoi utenti per eseguire queste operazioni, ma se non lo fai, viene utilizzato l'utente predefinito cloudsqlimportexport. L'utente cloudsqlimportexport è un utente sistema e non puoi utilizzarlo direttamente.

Gestione dell'account (aggiunta, eliminazione o modifica della password)

La gestione dell'account comporta la creazione di nuovi account utente, la modifica della password di un account esistente ed l'eliminazione di un account non più necessario. Puoi eseguire queste operazioni dell'account tramite la console Google Cloud, lo strumento gcloud o il client PostgreSQL.

Console

  1. Elenca gli account esistenti dalla console Google Cloud: vai a Console Cloud SQL>Seleziona istanza PostgreSQL>Utenti.

    Elenco degli account esistenti.

  2. Modifica la password dell'account o eliminalo completamente facendo clic sull'icona con tre puntini (Altro) accanto all'account.

    Da questa schermata, puoi fare clic su Crea account utente per creare un nuovo utente PostgreSQL.

    Modifica della password ed eliminazione di un account.

gcloud

  1. Elenca gli account utente esistenti:

    gcloud sql users list --instance=postgresql01
    

    L'output è simile al seguente:

    NAME       HOST
    Postgres
    
  2. Crea l'account utente appuser, imposta la password ed elimina appuser:

    gcloud sql users create appuser \
        --instance=postgresql01 --password=PASSWORD
    
    gcloud sql users set-password appuser \
        --host=% --instance=postgresql01 --prompt-for-password
    
    gcloud sql users delete appuser --instance=postgresql01
    

PostgreSQL

  • Esegui le stesse azioni direttamente da un client PostgreSQL standard, ad esempio:

    postgres=> create user appuser with login password 'my_password';
    
    postgres=> alter user appuser password 'my_password';
    
    postgres=> drop user appuser;
    

    Puoi configurare le autorizzazioni a livello di database PostgreSQL (ad esempio la lettura da una tabella o una vista specifica) utilizzando i comandi GRANT/REVOKE tramite il client PostgreSQL.

Monitoraggio e avvisi

Cloud Logging è lo strumento di logging principale di Google Cloud. Viene utilizzato per raccogliere e visualizzare una serie di log di monitoraggio per risorse come Cloud SQL per PostgreSQL.

Cloud Logging ti consente di visualizzare i log di Cloud SQL per PostgreSQL filtrati in base al livello di evento (ad esempio Critico, Errore o Avviso), al periodo di tempo dell'evento e alla ricerca di testo libero, come nello screenshot seguente.

Visualizzazione dei log in Cloud Logging.

Monitoraggio delle istanze di database PostgreSQL

Gli strumenti di monitoraggio principali di Oracle sono Enterprise Manager e Grid/Cloud Control. Questi strumenti ti consentono di eseguire il monitoraggio in tempo reale delle istanze di database a livello di sessione di database e di istruzione SQL.

Cloud SQL per PostgreSQL offre funzionalità di monitoraggio paragonabili tramite la console Google Cloud. Da qui puoi visualizzare una vista di riepilogo delle tue istanze di database, tra cui l'utilizzo della CPU, l'utilizzo dello spazio di archiviazione, l'utilizzo della memoria, le operazioni di lettura/scrittura, le connessioni attive, le transazioni al secondo e i byte in entrata/in uscita. Tieni presente che Google Cloud Observability fornisce metriche di monitoraggio aggiuntive per Cloud SQL per PostgreSQL, ad esempio richieste di failover automatico e ritardo della replica tra la replica principale e le repliche di lettura.

Il seguente grafico di esempio mostra le transazioni al secondo per le ultime 6 ore:

Grafico delle transazioni al secondo per le
 ultime 6 ore.

Monitoraggio delle repliche di lettura

Puoi monitorare le repliche di lettura tramite la console Google Cloud nello stesso modo in cui monitori l'istanza principale. Esistono metriche specifiche per controllare lo stato della replica tra le istanze principali e di replica di lettura. Queste metriche vengono utilizzate per compilare la pagina di panoramica delle istanze di replica di lettura nella console Google Cloud.

In alternativa, puoi controllare lo stato della replica dalla riga di comando:

gcloud sql instances describe REPLICA_NAME

Una terza opzione è controllare lo stato della replica tramite un client PostgreSQL. Il seguente comando PostgreSQL controlla lo stato della replica di lettura:

postgres=> \x on
Expanded display is on.
postgres=> select * from pg_stat_replication;
-[ RECORD 1 ]----+-------------------------------------------
pid              | 74733
usesysid         | 16388
usename          | cloudsqlreplica
application_name | PROJECT_ID:REPLICA_NAME
client_addr      | REPLICA_IP
client_hostname  |
client_port      | 41660
backend_start    | 2020-09-28 06:59:38.783981+00
backend_xmin     |
state            | streaming
sent_lsn         | 0/2939FFA8
write_lsn        | 0/2939FFA8
flush_lsn        | 0/2939FFA8
replay_lsn       | 0/2939FFA8
write_lag        |
flush_lag        |
replay_lag       |
sync_priority    | 0
sync_state       | async
reply_time       | 2020-09-28 07:17:52.714969+00
postgres=>

Monitoraggio del database PostgreSQL

Questa sezione descrive alcune attività di monitoraggio aggiuntive considerate di routine per un DBA PostgreSQL.

Monitoraggio delle sessioni

Le sessioni Oracle vengono monitorate eseguendo query sulle viste di rendimento dinamico, note come viste "V$". Le visualizzazioni V$SESSION e V$PROCESS vengono comunemente utilizzate per ottenere informazioni in tempo reale sull'attività corrente del database tramite istruzioni SQL. Puoi monitorare l'attività delle sessioni in PostgreSQL in modo simile, sia tramite comandi PostgreSQL che tramite istruzioni SQL.

La visualizzazione dinamica PostgreSQL pg_stat_activity fornisce informazioni dettagliate sull'attività corrente della sessione del database:

postgres=> \x on
postgres=> select * from pg_stat_activity where backend_type = 'client backend' and usename != 'cloudsqladmin';
-[ RECORD 1 ]----+-----------------------------------------------------------------------------------------------------
datid            | 14052
datname          | postgres
pid              | 74750
usesysid         | 16389
usename          | postgres
application_name | psql
client_addr      | CLIENT_IP
client_hostname  |
client_port      | 51904
backend_start    | 2020-09-28 07:01:30.214099+00
xact_start       | 2020-09-28 07:28:48.982115+00
query_start      | 2020-09-28 07:28:48.982115+00
state_change     | 2020-09-28 07:28:48.982117+00
wait_event_type  |
wait_event       |
state            | active
backend_xid      |
backend_xmin     | 88513
query            | select * from pg_stat_activity where backend_type = 'client backend' and usename != 'cloudsqladmin';
backend_type     | client backend
postgres=>

Monitoraggio delle transazioni lunghe

Per identificare le transazioni in esecuzione prolungata che potrebbero causare problemi di rendimento, esegui una query sulla visualizzazione dinamica pg_stat_activity. Puoi identificare le query che richiedono molto tempo applicando filtri appropriati a colonne come query_start e state.

Monitoraggio delle serrature

Puoi monitorare i blocchi del database tramite la visualizzazione dinamica pg_locks, che fornisce informazioni in tempo reale su eventuali conflitti di blocco che possono causare problemi di prestazioni.

Avvisi

Puoi utilizzare gli avvisi oltre al monitoraggio e al logging. Puoi anche creare avvisi per le condizioni.

Scalabilità

Cloud SQL per PostgreSQL supporta opzioni di scalabilità verticale e orizzontale.

Esegui lo scale up aggiungendo altre risorse all'istanza Cloud SQL, ad esempio aumentando il numero di CPU e memoria assegnate all'istanza. La velocità effettiva di rete dell'istanza dipende dai valori che scegli per la CPU e la memoria.

Cloud SQL supporta fino a 30 TB di spazio di archiviazione. L'aggiunta di capacità di archiviazione in genere aumenta la velocità effettiva e le IOPS del disco di un'istanza. Tieni presente che la velocità effettiva di rete di un'istanza Cloud SQL include le operazioni di lettura/scrittura dei dati (velocità effettiva del disco), nonché il contenuto di query, calcoli e altri dati non memorizzati nel database. È importante prendere in considerazione questi fattori quando esegui la scalabilità verticale dell'istanza Cloud SQL.

Esegui lo scale out orizzontalmente creando repliche di lettura. Le repliche di lettura ti consentono di scalare i carichi di lavoro di lettura su istanze Cloud SQL separate senza influire sulle prestazioni e sulla disponibilità dell'istanza principale.

Backup e ripristino

Esistono due metodi di backup del database per Cloud SQL per PostgreSQL: on demand e automatico. Puoi eseguire backup on demand in qualsiasi momento e questi vengono mantenuti fino a quando non li elimini. I backup automatici utilizzano una finestra di backup di 4 ore e vengono conservati per 7 giorni.

Puoi ripristinare i backup del database Cloud SQL per PostgreSQL nella stessa istanza, sovrascrivendo i dati esistenti, o in una nuova istanza. Inoltre, Cloud SQL per PostgreSQL ti consente di ripristinare un database PostgreSQL a un momento specifico a condizione che il recupero point-in-time sia attivo e l'opzione di backup automatico sia abilitata.

Cloud SQL per PostgreSQL offre funzionalità di clonazione dei database. Il clone deve essere creato dall'istanza principale (ovvero non può essere creato da una replica). Puoi eseguire backup, ripristini e cloni dei database dalla console Google Cloud o dalla gcloud CLI.

Automazione

Puoi utilizzare l'API Cloud SQL Admin per automatizzare completamente la gestione di un'istanza Cloud SQL per PostgreSQL. L'API Cloud SQL Admin è un'API REST per il controllo di diversi tipi di risorse, come istanze, database, utenti, flag, operazioni, certificati SSL, livelli ed esecuzioni di backup. Per ulteriori informazioni, consulta la documentazione dell'API.

Passaggi successivi