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

Questo documento spiega come configurare Cloud SQL per PostgreSQL per l'uso 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 caratteristiche e funzionalità chiave:

  • Serve più applicazioni e utenti a livello globale grazie all'uso delle funzionalità di sicurezza gestita di Google Cloud, tra cui il VPC e la crittografia automatica dei dati at-rest e in transito.
  • Supporta l'architettura ad alta disponibilità utilizzando istanze primarie e in standby e il failover automatico tra le istanze.
  • Supporta i carichi di lavoro di database distribuiti abilitando la separazione di lettura/scrittura tra il nodo primario e le repliche di lettura nello stesso cluster di database.
  • Supporta backup automatici integrati con Cloud Storage e manutenzione automatica dei database.
  • Supporta una varietà di carichi di lavoro di elaborazione transazionale online (OLTP).

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 utente postgres come account amministratore predefinito. (puoi creare utenti aggiuntivi dopo il deployment dell'istanza PostgreSQL).
    • Regione e Zona: seleziona una regione e una zona. La best practice prevede il deployment dell'istanza PostgreSQL nella stessa regione dei servizi Google Cloud associati (ad esempio le applicazioni) o in una vicinanza geografica agli utenti, in modo da ridurre la latenza per l'elaborazione dei dati. Una volta selezionata, non potrai più modificare la regione.
    • Versione 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, connetti l'istanza PostgreSQL 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 approvando 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 gli IOP di lettura e scrittura per il tuo database. Regola la capacità di archiviazione in base alla velocità effettiva del disco e ai requisiti IOP previsti.

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

      • Backup automatici e alta disponibilità: puoi utilizzare la funzionalità dei backup automatici, attivata per impostazione predefinita, per definire l'intervallo di tempo entro il quale eseguire i backup automatici. Inoltre, per creare una replica di lettura, è richiesta anche l'opzione di recupero point-in-time, che utilizza log write-ahead. Questi log vengono aggiornati regolarmente e utilizzano spazio di archiviazione. Per evitare problemi di archiviazione imprevisti, ti consigliamo di abilitare gli aumenti automatici dello spazio di archiviazione quando utilizzi il recupero point-in-time. L'alta disponibilità è disattivata per impostazione predefinita (multizona). Per abilitare il failover automatico, seleziona l'opzione Alta disponibilità (regionale).

      • Flag: questa impostazione specifica il metodo Cloud SQL per controllare le impostazioni e i 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: questa sezione specifica il periodo di tempo preferito per eseguire le attività di manutenzione, tra cui correzioni di bug e upgrade delle versioni secondarie. Tieni presente che le operazioni di manutenzione generalmente richiedono un riavvio dell'istanza e potrebbero causare una breve interruzione del servizio. Puoi registrarti per ricevere notifiche via email sui prossimi eventi di manutenzione.

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

        Definizione delle 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 queste opzioni aggiuntive:

    • Versione database: una delle versions di PostgreSQL supportate.
    • Tipo di archiviazione:SSD o HDD come tipo di archiviazione.
    • Capacità dello spazio di archiviazione:le impostazioni di archiviazione iniziali per l'istanza.
    • Aumento automatico dello spazio di archiviazione: automazione di Cloud SQL per aggiungere spazio di archiviazione aggiuntivo quando lo spazio libero è in esaurimento.
    • Alta disponibilità: alta disponibilità di Cloud SQL.
    • Backup automatici:la finestra di inizio dei backup.
    • Recupero point-in-time: recupero point-in-time e logging write-ahead.
    • Periodo di manutenzione: un periodo di un'ora in cui Cloud SQL può eseguire la manutenzione di disturbo.
    • Tempistiche di manutenzione: la tempistica preferita per l'esecuzione di aggiornamenti sull'istanza PostgreSQL. Puoi specificare l'anteprima per gli aggiornamenti precedenti o la produzione per gli aggiornamenti successivi.
    • Flag di database:i flag di 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 Creazione di istanze.

Selezione dell'istanza

La selezione o il dimensionamento delle istanze comporta la selezione di un tipo di macchina in grado di supportare il carico di lavoro Oracle® su Cloud SQL per PostgreSQL. I tipi di istanza sono divisi 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 istanza, consulta la pagina relativa ai prezzi di Cloud SQL.

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

Memoria fisica (numero totale di byte di memoria fisica nel server di 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 tramite la vista V$LICENSE):

SQL> SELECT CPU_CORE_COUNT_CURRENT FROM V$LICENSE;

Esempio di risorsa del report Oracle AWR (un report Oracle AWR può fornire insight aggiuntivi sulle caratteristiche del carico di lavoro di una specifica istanza Oracle):

Esempio di risorsa del report Oracle AWR.

Una volta raccolte le informazioni sulle risorse del database di origine, ti consigliamo di scegliere il tipo di istanza Cloud SQL più simile e di eseguire alcuni benchmark. I risultati dei benchmark ti aiutano a finalizzare la selezione dell'istanza.

Configurazione ad 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 il failover automatico dall'istanza principale del cluster all'istanza in standby. L'istanza in 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 principali e di standby. Questo metodo garantisce che tutte le modifiche ai dati di quella principale vengano applicate anche in standby.

In caso di errore principale, ad esempio un'istanza che non risponde o un errore a livello di zona, Cloud SQL esegue un failover automatico. L'istanza principale è monitorata da 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 in 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, a differenza di Active Data Guard, l'istanza in standby non è aperta per le letture mentre funziona come standby. Con Cloud SQL, è possibile utilizzare solo le repliche di lettura per trasferire le letture dall'istanza principale.

Puoi abilitare la funzionalità ad 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à, quindi seleziona l'opzione Alta disponibilità (a livello di regione).
  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 failover 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 un'istanza PostgreSQL esistente è configurata ad alta disponibilità:

    gcloud sql instances describe INSTANCE_NAME
    

    Se l'output di questo comando include availabilityType: REGIONAL, l'alta disponibilità è già abilitata. Se l'output include availabilityType: ZONAL, l'alta disponibilità non è configurata e può essere abilitata utilizzando il comando patch:

    gcloud sql instances patch INSTANCE_NAME --availability-type REGIONAL
    
  3. Avvia un test di failover dall'account principale a quello in standby:

    gcloud sql instances failover PRIMARY_INSTANCE_NAME
    

    Per eseguire il failover, esegui lo stesso comando di failover sulla nuova risorsa primaria.

Utenti e account amministratore

Due account utente PostgreSQL predefiniti vengono forniti con qualsiasi installazione di Cloud SQL per PostgreSQL. Questi account sono postgres e cloudsqlimportexport.

account postgres

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

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

account cloudsqlimportexport

L'account cloudsqlimportexport viene creato con il set minimo di privilegi necessari per le operazioni di importazione/esportazione di file CSV. Puoi creare i tuoi utenti per eseguire queste operazioni, ma in caso contrario viene utilizzato l'utente cloudsqlimportexport predefinito. L'utente cloudsqlimportexport è un utente del 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 e l'eliminazione di un account che non è più necessario. Puoi eseguire queste operazioni sull'account tramite la console Google Cloud, lo strumento gcloud o il client PostgreSQL.

Console

  1. Elenca gli account esistenti dalla console Google Cloud: vai alla console Cloud SQL> Seleziona Istanza PostgreSQL>Utenti.

    Elenco degli account esistenti.

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

    In 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 è il principale strumento di logging su Google Cloud. Viene utilizzato per raccogliere e visualizzare una varietà di log di monitoraggio per risorse come Cloud SQL per PostgreSQL.

Cloud Logging consente di visualizzare i log per Cloud SQL per PostgreSQL filtrati in base a livello di evento (ad esempio, critico, errore o avviso), periodo di tempo degli eventi e ricerca di testo gratuita, come nello screenshot seguente.

Visualizzazione dei log in Cloud Logging.

Monitoraggio delle istanze di database PostgreSQL

I principali strumenti di monitoraggio di Oracle sono Enterprise Manager e Grid/Cloud Control. Questi strumenti consentono di monitorare in tempo reale le 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 ottenere una visualizzazione di riepilogo delle tue istanze di database, inclusi utilizzo della CPU, utilizzo dello spazio di archiviazione, utilizzo della memoria, operazioni di lettura/scrittura, connessioni attive, transazioni al secondo e byte in entrata/in uscita. Tieni presente che l'Osservabilità di Google Cloud fornisce metriche di monitoraggio aggiuntive per Cloud SQL per PostgreSQL, come le richieste di failover automatico e il ritardo di replica tra l'istanza principale e la replica di lettura.

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

Grafico delle transazioni al secondo
nelle 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 completare la pagina di riepilogo dell'istanza della 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 consiste nel controllare lo stato di 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 dei database PostgreSQL

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

Monitoraggio delle sessioni

Le sessioni Oracle vengono monitorate eseguendo query sulle viste dinamiche delle prestazioni, note come viste "V$". Le viste V$SESSION e V$PROCESS vengono comunemente utilizzate per ottenere insight in tempo reale sull'attività attuale del database tramite istruzioni SQL. Puoi monitorare l'attività delle sessioni in PostgreSQL in modo simile, sia tramite i comandi PostgreSQL che le istruzioni SQL.

La visualizzazione dinamica PostgreSQL pg_stat_activity fornisce informazioni dettagliate sull'attività attuale della sessione di 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 a lunga esecuzione che potrebbero causare problemi di prestazioni, esegui una query nella visualizzazione dinamica pg_stat_activity. Puoi identificare le query a lunga esecuzione applicando filtri appropriati su colonne come query_start e state.

Monitoraggio delle serrature

Puoi monitorare i blocchi dei database tramite la vista dinamica pg_locks, che fornisce informazioni in tempo reale su qualsiasi contesa dei blocchi che può 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 le opzioni di scalabilità verticale e orizzontale.

Puoi scalare verticalmente aggiungendo più 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 scelti per CPU e 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 gli IOP 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), così come il contenuto di query, calcoli e altri dati non archiviati nel database. È importante considerare questi fattori per scalare verticalmente l'istanza Cloud SQL.

Puoi scalare orizzontalmente creando repliche di lettura. Le repliche di lettura consentono di scalare i carichi di lavoro di lettura in istanze Cloud SQL separate senza influire su prestazioni e disponibilità dell'istanza principale.

Backup e ripristino

Per Cloud SQL per PostgreSQL sono disponibili due metodi di backup del database: on demand e automatizzato. Puoi eseguire backup on demand in qualsiasi momento e i backup saranno permanenti finché non li elimini. I backup automatici utilizzano una finestra di backup di quattro 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 in un punto temporale specifico, a condizione che il recupero point-in-time sia attivato e l'opzione di backup automatico sia abilitata.

Cloud SQL per PostgreSQL fornisce 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 da gcloud CLI.

Automazione

Puoi utilizzare l'API Cloud SQL Admin per automatizzare completamente l'amministrazione 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, SslCerts, livelli e BackupRuns. Per ulteriori informazioni, consulta la documentazione dell'API.

Passaggi successivi