Crea un cluster

Seleziona una versione della documentazione:

Crea un cluster di database per iniziare a utilizzare AlloyDB Omni.

Limitazioni

Si applicano le seguenti limitazioni:

  • AlloyDB Omni viene eseguito sulla porta 5432. La configurazione di una porta personalizzata non è supportata.

  • Assicurati che tutte le configurazioni dei parametri del database siano corrette prima di creare il cluster. Una volta creato il cluster, non puoi modificare alcun parametro del database.

Prima di iniziare

Prima di creare il cluster, completa le seguenti operazioni:

  • Installa l'orchestratore AlloyDB Omni

  • Installa i componenti di AlloyDB Omni

  • Configurare i certificati TLS

  • Monta un volume esterno (DataDisk) su PG_DATA_DIR su tutti i nodi del database di cui è stato eseguito il provisioning all'interno dell'orchestratore.

  • Se prevedi di utilizzare alloydbctl anziché Ansible, assicurati che il pacchetto policycoreutils-python-utils richiesto sia installato su tutte le VM. Per installare questo pacchetto, esegui questo comando:

    sudo dnf install policycoreutils-python-utils
  • Se utilizzi l'ambiente Google Cloud , imposta ENVIRONMENT_TYPE su gcp. Dopodiché, devi autenticare il tuo account gcloud CLI eseguendo gcloud auth login come utente root. Inoltre, l'account autenticato deve disporre delle seguenti autorizzazioni:

    • compute.instances.get
    • compute.instances.list
    • compute.instances.updateNetworkInterface

Prepara le specifiche del cluster

Per creare il cluster, AlloyDB Omni deve sapere come configurarlo. Per creare le specifiche necessarie, crea un file YAML utilizzando il formato DBCluster:

Secret:
  metadata:
    name: db-pw-DBCLUSTER_NAME
  spec:
    type: Opaque
    data:
      DBCLUSTER_NAME: BASE64_PASSWORD
---
DBCluster:
  metadata:
    name: DBCLUSTER_NAME
  spec:
    databaseVersion: 18.3.0
    mode: ""
    availability:
      numberOfStandbys: NUM_STANDBY_NODES
      enableAutoFailover: true
      enableAutoHeal: true
      autoFailoverTriggerThreshold: AUTOFAILOVER_TRIGGER_THRESHOLD
      autoHealTriggerThreshold: AUTOHEAL_TRIGGER_THRESHOLD
      healthcheckPeriodSeconds: HEALTHCHECK_PERIOD
      replayReplicationSlotsOnStandbys: false
    primarySpec:
      adminUser:
        passwordRef:
          name: db-pw-DBCLUSTER_NAME
      resources:
        cpu: CPU_LIMIT
        memory: MEMORY_LIMIT
        disks:
        - name: DataDisk
          path: PG_DATA_DIR
      parameters:
        max_connections: "MAX_CONNECTIONS"
        max_wal_size: "MAX_WAL_SIZE"
      dbLoadBalancerOptions:
        DB_LOAD_BALANCER_TYPE:
          loadBalancerIP: "VIRTUAL_IP"
          loadBalancerType: "internal"
          loadBalancerInterface: "VIRTUAL_IP_INTERFACE"

Sostituisci le seguenti variabili:

  • DBCLUSTER_NAME: il nome del cluster di database. Ad esempio, my-dbcluster.

  • BASE64_PASSWORD: password codificata in base64 utilizzata per l'utente amministratore postgres.

  • NUM_STANDBY_NODES: il numero di nodi di standby nel cluster. Ad esempio, 2.

  • (Facoltativo) AUTOFAILOVER_TRIGGER_THRESHOLD: numero di volte in cui il controllo di integrità può non riuscire prima che si verifichi un failover. Il valore predefinito è 3. Il valore minimo è 0, ma se il valore è impostato su 0, AlloyDB Omni utilizza il valore predefinito.

    Si verifica un failover automatico se il controllo di integrità non riesce AUTOFAILOVER_TRIGGER_THRESHOLD volte o se la durata cumulativa del controllo di integrità raggiunge HEALTHCHECK_PERIOD * AUTOFAILOVER_TRIGGER_THRESHOLD secondi.

  • (Facoltativo) AUTOHEAL_TRIGGER_THRESHOLD: numero di volte in cui il controllo di integrità può non riuscire prima dell'inizio della riparazione automatica. Il valore predefinito è 3. Il valore minimo è 0, ma se il valore è impostato su 0, AlloyDB Omni utilizza il valore predefinito.

    Si verifica un ripristino automatico se il controllo di integrità non riesce AUTOHEAL_TRIGGER_THRESHOLD volte o se la durata cumulativa del controllo di integrità raggiunge HEALTHCHECK_PERIOD * AUTOHEAL_TRIGGER_THRESHOLD secondi.

  • (Facoltativo) HEALTHCHECK_PERIOD: il numero di secondi da attendere tra un controllo di integrità e l'altro. Il valore predefinito è 30. Il valore minimo è 1. Il valore massimo è 86400 (un giorno).

  • CPU_LIMIT: il numero di CPU da allocare al container del database. Ad esempio, 4.

  • MEMORY_LIMIT: quantità di memoria da allocare al container del database. Ad esempio, 32Gi, 500Mi.

  • PG_DATA_DIR: percorso host alla directory in cui verranno archiviati i dati del database.

  • (Facoltativo) MAX_CONNECTIONS: numero massimo di connessioni simultanee al database PostgreSQL. Il valore predefinito è 50. Il valore minimo supportato è 50. Per maggiori informazioni, consulta il riferimento max_connections di PostgreSQL.

  • (Facoltativo) MAX_WAL_SIZE: dimensione massima per consentire la crescita del Write-Ahead-Log (WAL) durante i checkpoint automatici. Il valore predefinito è 1GB. Per saperne di più, consulta il riferimento max_wal_size di PostgreSQL.

  • (Facoltativo) ENVIRONMENT_TYPE: determina l'ambiente in cui è configurato il cluster: onprem o gcp.

  • (Facoltativo) VIRTUAL_IP: indirizzo IP virtuale utilizzato dal bilanciatore del carico. Se definisci dbLoadBalancerOptions, questo campo è obbligatorio. Per saperne di più, vedi Gestire l'alta affidabilità.

  • (Facoltativo) VIRTUAL_IP_INTERFACE: interfaccia di rete in cui è configurato VIRTUAL_IP. Il valore predefinito è eth0.

Crea il cluster

Per creare il cluster, seleziona la scheda corrispondente al tuo ambiente e segui le istruzioni.

Ansible

Per creare il cluster, completa le seguenti istruzioni:

  1. Crea un playbook per le specifiche del cluster di database.

    - name: Create DBCluster
      hosts: localhost
      become: true
      vars:
        ansible_user: ANSIBLE_USER
        ansible_ssh_private_key_file: ANSIBLE_SSH_PRIVATE_KEY_FILE
      roles:
      - role: google.alloydbomni_orchestrator.bootstrap
    
    

    Sostituisci le seguenti variabili:

    • ANSIBLE_USER: utente OS che Ansible utilizza per accedere ai nodi AlloyDB Omni.

    • ANSIBLE_SSH_PRIVATE_KEY_FILE: la chiave privata utilizzata da Ansible per connettersi ai nodi AlloyDB Omni utilizzando SSH.

  2. Esegui il playbook.

    ansible-playbook DBCLUSTER_PLAYBOOK -i "DEPLOYMENT_SPEC" \
          -e resource_spec="DBCLUSTER_SPECIFICATIONS"

    Sostituisci le seguenti variabili:

    • DBCLUSTER_PLAYBOOK: il percorso del playbook che hai creato per il cluster di database.

    • DEPLOYMENT_SPEC: percorso della specifica di deployment che hai creato in Installare i componenti di AlloyDB Omni.

    • DBCLUSTER_SPECIFICATIONS: il percorso delle specifiche del cluster.

alloydbctl

Per creare il cluster, esegui questo comando:

alloydbctl apply -d "DEPLOYMENT_SPEC" -r "DBCLUSTER_SPECIFICATIONS"

Sostituisci le seguenti variabili:

Elimina il cluster

Per eliminare il cluster, seleziona la scheda corrispondente al tuo ambiente e segui le istruzioni.

Ansible

Per eliminare il cluster utilizzando Ansible, completa i seguenti passaggi:

  1. Crea un playbook denominato teardown.yaml:

    - name: Tear down AlloyDB Omni cluster
      hosts: localhost
      become: true
      vars:
        ansible_user: ANSIBLE_USER
        ansible_ssh_private_key_file: ANSIBLE_SSH_PRIVATE_KEY_FILE
      roles:
      - role: google.alloydbomni_orchestrator.delete
    
  2. Esegui il playbook utilizzando ansible-playbook. Devi specificare DBCluster come resource_type e il nome del cluster da eliminare come resource_name.

    ansible-playbook -i "DEPLOYMENT_SPEC" teardown.yaml \
      -e `resource_type`=`DBCluster` -e `resource_name`="DBCLUSTER_NAME"

Se il processo di smantellamento non riesce a causa di incoerenze nello stato del cluster (ad esempio, se un nodo non è raggiungibile), puoi tentare di forzare l'eliminazione del cluster aggiungendo -e force=true al comando. In questo modo, l'orchestratore ignora gli errori durante il processo di eliminazione e tenta di rimuovere il maggior numero possibile di risorse.

  ansible-playbook -i "DEPLOYMENT_SPEC" teardown.yaml \
    -e resource_type=DBCluster -e resource_name="DBCLUSTER_NAME" -e force=true

alloydbctl

Per eliminare il cluster utilizzando alloydbctl, esegui questo comando:

alloydbctl delete -d "DEPLOYMENT_SPEC" \
      --resource_type DBCluster --resource_name "DBCLUSTER_NAME"

Sostituisci le seguenti variabili:

Appendice: specifiche delle policy SELinux

Le tabelle seguenti elencano le regole delle policy SELinux e le autorizzazioni di accesso configurate per ogni componente in esecuzione sui rispettivi nodi. Queste policy definiscono i limiti obbligatori per l'isolamento dei processi, le associazioni di socket di rete e l'accesso allo spazio di archiviazione richiesti durante l'esecuzione degli host in modalità SELinux Enforcing.

AlloyDB Omni

Dominio di origine Risorsa / tipo target Classe di sicurezza Autorizzazioni concesse Motivazione e vincolo di sicurezza
init_t (systemd) postgresql_exec_t file getattr, open, read, execute Consente al gestore di servizi systemd di eseguire il file binario PostgreSQL.
init_t postgresql_t process transition Impone la transizione obbligatoria del dominio da systemd al dominio postgresql_t limitato.
postgresql_t postgresql_exec_t file entrypoint, execute, read, map Limita l'inserimento del dominio rigorosamente all'eseguibile PostgreSQL ufficiale.
postgresql_t lib_t file/dir read, open, getattr, map Autorizza l'accesso del linker dinamico alle librerie di database condivise.
postgresql_t postgresql_db_t dir open, read, write, create, rmdir, search, getattr, setattr, add_name, remove_name Gestisce l'intero ciclo di vita della directory di archiviazione per la directory dei dati e gli spazi delle tabelle.
postgresql_t postgresql_db_t file open, read, write, create, unlink, lock, append, getattr, setattr, map Autorizza le operazioni di lettura/scrittura per tabelle heap, segmenti WAL, cataloghi e indici.
postgresql_t postgresql_var_run_t dir/sock_file open, read, write, create, unlink, search, getattr Gestisce il file PID di runtime e il socket di dominio Unix in /var/run/postgresql.
postgresql_t postgresql_port_t tcp_socket name_bind Limita il binding di rete TCP rigorosamente alle porte PostgreSQL assegnate (TCP 5432 predefinito).
alloydbomni_nm_t postgresql_exec_t file execute, execute_no_trans, getattr, open, read, map Autorizza Node Manager a eseguire probe di integrità e strumenti di controllo, ad esempio pg_isready o pg_ctl.
alloydbomni_nm_t postgresql_db_t dir/file open, read, write, create, unlink, relabelto, relabelfrom Concede a Node Manager l'autorità per inizializzare le directory e applicare le etichette SELinux.

Monitoraggio di AlloyDB Omni

Dominio di origine Risorsa / tipo target Classe di sicurezza Autorizzazioni concesse Motivazione e vincolo di sicurezza
postgresql_t unreserved_port_t tcp_socket name_bind Autorizza il binding a una porta non riservata elevata per esportare le metriche Prometheus e lo stato di integrità.
postgresql_t net_conf_t file open, read, getattr Accesso in sola lettura a /etc/resolv.conf per la risoluzione di DNS e nomi host.
postgresql_t sysfs_t file/dir open, read, getattr, search Ispezione delle metriche host senza concedere privilegi di amministratore o root.

Keepalived

Dominio di origine Risorsa / tipo target Classe di sicurezza Autorizzazioni concesse Motivazione e vincolo di sicurezza
keepalived_t keepalived_script_exec_t file execute, execute_no_trans, getattr, open, read, map, setattr, ioctl Limita l'esecuzione degli script di monitoraggio VIP a un contesto di script dedicato e con limitazioni.
keepalived_t hostname_exec_t file execute, execute_no_trans, getattr, open, read, map Richiama hostname di sistema standard per verificare l'identità del nodo durante il failover.
keepalived_t ifconfig_exec_t file execute, execute_no_trans, getattr, open, read, map Assegna e rilascia l'IP virtuale sull'interfaccia di rete fisica.
keepalived_t systemd_systemctl_exec_t file execute, execute_no_trans, getattr, open, read, map Esegue query sugli stati delle dipendenze del servizio utilizzando systemctl senza modificare la configurazione del servizio.
keepalived_t system_dbusd_t unix_stream_socket connectto Si connette al daemon DBus di sistema per le notifiche tra processi.
keepalived_t system_dbusd_t/init_t dbus send_msg Trasmette gli eventi di transizione di stato DBus al dominio init_t systemd.
keepalived_t haproxy_unit_file_t/systemd_unit_file_t service status Controlla lo stato operativo di HAProxy e dei servizi correlati.
keepalived_t haproxy_var_lib_t dir / file / sock_file open, read, write, search, getattr Ispeziona il socket delle statistiche HAProxy collocato in /var/lib/haproxy durante il deployment.
keepalived_t keepalived_var_run_t dir/file open, read, write, create, unlink, search, getattr Mantiene lo stato di runtime e i file di monitoraggio PID in /var/run/keepalived.
alloydbomni_nm_t keepalived_t process signal, signull Consente a Node Manager di gestire il ciclo di vita dei daemon utilizzando i segnali POSIX.

HAProxy

Dominio di origine Risorsa / tipo target Classe di sicurezza Autorizzazioni concesse Motivazione e vincolo di sicurezza
haproxy_t postgresql_port_t tcp_socket name_bind, name_connect Ascolta sulla porta 5432 e inoltra le connessioni al database ai nodi del database di backend.
haproxy_t unreserved_port_t tcp_socket name_bind, name_connect Ascolta le porte del bilanciatore del carico personalizzato e si connette agli endpoint di lettura/scrittura upstream.
haproxy_t haproxy_conf_t file/dir open, read, search, getattr Accesso in sola lettura alla configurazione per /etc/haproxy/haproxy.cfg.
haproxy_t haproxy_var_lib_t dir / file / sock_file open, read, write, create, unlink, search, getattr Gestisce i socket di runtime e le tabelle delle statistiche in /var/lib/haproxy.
haproxy_t haproxy_var_run_t dir/file open, read, write, create, unlink, search, getattr Gestisce i socket PID e di controllo in /var/run/haproxy.
alloydbomni_nm_t haproxy_unit_file_t service start, stop, status, reload, enable, disable Autorizza Node Manager a controllare il ciclo di vita del servizio systemd HAProxy.
alloydbomni_nm_t haproxy_t process signal, signull Autorizza Node Manager a inviare segnali di ricarica in caso di modifiche alla configurazione.

PgBouncer

Dominio di origine Risorsa / tipo target Classe di sicurezza Autorizzazioni concesse Motivazione e vincolo di sicurezza
init_t pgbouncer_exec_t file getattr, open, read, execute Consente a systemd di richiamare l'eseguibile PgBouncer (/usr/bin/pgbouncer).
init_t pgbouncer_t process transition Automatizza la transizione del dominio da systemd a pgbouncer_t isolato.
pgbouncer_t pgbouncer_exec_t file entrypoint, execute, read, map Limita il punto di ingresso eseguibile a /usr/bin/pgbouncer.
pgbouncer_t unreserved_port_t tcp_socket name_bind Ascolta le connessioni al database client in entrata, ad esempio la porta TCP 6432.
pgbouncer_t node_t tcp_socket node_bind Associa il socket di rete alle interfacce di rete del nodo.
pgbouncer_t postgresql_port_t/unreserved_port_t tcp_socket name_connect Avvia connessioni TCP alle istanze di database AlloyDB Omni di backend.
pgbouncer_t self unix_stream_socket create, bind, listen, accept, read, write, connectto Fornisce connettività client locale tramite socket di dominio Unix.
pgbouncer_t pgbouncer_conf_t file/dir open, read, getattr, search Accesso in sola lettura alla configurazione per /etc/pgbouncer/pgbouncer.ini e ai file di autenticazione utente.
pgbouncer_t pgbouncer_var_run_t/tmp_t dir/sock_file open, read, write, create, unlink, search, getattr Crea e gestisce i file socket di runtime in /var/run/pgbouncer e /tmp.
pgbouncer_t self netlink_route_socket create, bind, read, write, nlmsg_read, getattr Rileva la route di rete per risolvere gli endpoint di database e client.
pgbouncer_t self udp_socket create, connect, read, write, getattr, setopt, getopt Esegue la risoluzione dei nomi DNS.
pgbouncer_t init_t/kernel_t unix_dgram_socket sendto Invia segnali di battito cardiaco e prontezza sd_notify a systemd.
pgbouncer_t sysfs_t file/dir open, read, getattr, search Legge la topologia della CPU per l'ottimizzazione dei thread di lavoro.

pgBackRest

Dominio di origine Risorsa / tipo target Classe di sicurezza Autorizzazioni concesse Motivazione e vincolo di sicurezza
postgresql_t/alloydbomni_nm_t pgbackrest_exec_t file execute, getattr, open, read, map Consente a Postgres e Node Manager di eseguire /usr/bin/pgbackrest rispettivamente per l'archiviazione WAL e i backup.
postgresql_t/alloydbomni_nm_t pgbackrest_t process transition, signal, sigkill, signull Transizione controllata del processo nel dominio pgbackrest_t confinato.
pgbackrest_t pgbackrest_exec_t file entrypoint, execute, execute_no_trans, read, map, getattr, open Limita il punto di ingresso binario di pgBackRest.
pgbackrest_t postgresql_db_t dir / file / lnk_file open, read, write, create, unlink, lock, append, search, getattr, setattr, map Legge/scrive file di database durante il backup fisico e il recupero point-in-time (PITR).
pgbackrest_t postgresql_t unix_stream_socket connectto Si connette al motore PostgreSQL in esecuzione utilizzando il socket locale per attivare i checkpoint di backup.
pgbackrest_t postgresql_var_run_t dir / sock_file / file open, read, write, search, getattr Accede al socket di connessione PostgreSQL in /var/run/postgresql.
pgbackrest_t http_port_t tcp_socket name_connect Egress rigoroso: le connessioni TCP in uscita sono limitate rigorosamente a HTTPS (443) per l'archiviazione di oggetti cloud (GCS/S3). I listener in entrata sono vietati.
pgbackrest_t cert_t dir / file / lnk_file open, read, search, getattr, map Legge i certificati dell'archivio di attendibilità del sistema (/etc/pki/tls) per convalidare le connessioni TLS all'object storage.
pgbackrest_t pgbackrest_conf_t file/dir open, read, getattr, search, map Accesso in sola lettura alla configurazione per /etc/pgbackrest/pgbackrest.conf.
pgbackrest_t pgbackrest_log_t file/dir open, read, write, create, unlink, append, lock, getattr, setattr Gestisce i log di controllo in /var/log/pgbackrest.
pgbackrest_t pgbackrest_tmp_t dir / file / sock_file open, read, write, create, unlink, append, lock, getattr, setattr, relabelto, relabelfrom Socket di comunicazione inter-thread e spazio di archiviazione temporaneo isolato dedicato in /tmp/pgbackrest.
pgbackrest_t shadow_t / sysfs_t / sssd_var_lib_t file/dir dontaudit (soppresso) Elimina e ignora silenziosamente i probe delle credenziali host irrilevanti, impedendo l'inquinamento dei log di controllo.

Node Manager

Dominio di origine Risorsa / tipo target Classe di sicurezza Autorizzazioni concesse Motivazione e vincolo di sicurezza
init_t alloydbomni_nm_exec_t file getattr, open, read, execute Consente a systemd di avviare il daemon Node Manager.
alloydbomni_nm_t self capability audit_write, chown, dac_override, dac_read_search, fowner, fsetid, setgid, setuid, net_admin Funzionalità Linux strettamente delimitate richieste per la gestione del ciclo di vita dell'host e il provisioning del volume.
alloydbomni_nm_t unreserved_port_t tcp_socket name_bind, name_connect Fornisce API gRPC / HTTP a Cluster Manager e probe di controllo di integrità ad HAProxy.
alloydbomni_nm_t http_port_t tcp_socket name_connect Comunicazione in uscita alle API cloud o agli endpoint di monitoraggio.
alloydbomni_nm_t semanage_exec_t, setfiles_exec_t, setsebool_exec_t, load_policy_exec_t file execute, execute_no_trans, getattr, open, read, map Esegue i file binari di gestione SELinux principali per compilare e applicare i criteri CIL.
alloydbomni_nm_t security_t security load_policy Carica i moduli delle norme SELinux compilati direttamente nel kernel Linux.
alloydbomni_nm_t semanage_store_t, selinux_config_t dir/file open, read, write, create, unlink, lock, getattr Gestisce gli archivi di configurazione delle policy persistenti di SELinux.
alloydbomni_nm_t unlabeled_t (dischi/montaggi) filesystem / dir / file getattr, open, read, write, create, unlink, setattr, relabelto, relabelfrom Rietichettatura dinamica dei dischi: rileva i dischi non elaborati appena collegati, ad esempio /data1 o /obs, e li rietichetta come postgresql_db_t.
alloydbomni_nm_t rpm_exec_t file execute, execute_no_trans, getattr, open, read, ioctl, map Esegue i comandi del gestore di pacchetti RPM/DNF per l'installazione e gli aggiornamenti automatici del software.
alloydbomni_nm_t rpm_var_cache_t, rpm_var_lib_t, rpm_log_t dir/file open, read, write, create, unlink, lock, getattr Gestisce il database RPM e i file della cache durante le installazioni dei pacchetti.
alloydbomni_nm_t systemd_unit_file_t, syslogd_unit_file_t, haproxy_unit_file_t, keepalived_unit_file_t service start, stop, status, reload, enable, disable Orchestra i cicli di vita dei servizi systemd in tutti i componenti ausiliari e di database gestiti.
alloydbomni_nm_t system_dbusd_t, systemd_logind_t, systemd_hostnamed_t dbus/unix_stream_socket send_msg, connectto Coordina lo stato dell'host, l'ora e la registrazione del sistema tramite DBus di sistema.

Cluster Manager

Dominio di origine Risorsa / tipo target Classe di sicurezza Autorizzazioni concesse Motivazione e vincolo di sicurezza
init_t alloydbcontrol_exec_t file getattr, open, read, execute Consente a systemd di avviare l'eseguibile di Cluster Manager.
alloydbcontrol_t alloydbcontrol_exec_t file entrypoint, execute, read, map, getattr, open Limita l'esecuzione del control plane al file binario autorizzato.
alloydbcontrol_t unreserved_port_t tcp_socket name_bind, name_connect Collega gli endpoint API e si connette a Distributed Consensus Store (DCS / etcd) e ai Node Manager.
alloydbcontrol_t node_t tcp_socket node_bind Collega i listener di rete alle interfacce di rete.
alloydbcontrol_t alloydbcontrol_conf_t file/dir open, read, search, getattr Accesso in sola lettura alla configurazione per /etc/alloydbomni/cluster_manager.
alloydbcontrol_t net_conf_t, passwd_file_t, sssd_public_t, sssd_var_lib_t file/dir open, read, search, getattr Risoluzione dell'host e autenticazione utente per le interfacce di gestione.
alloydbcontrol_t cgroup_t, sysctl_net_t, sysfs_t file/dir open, read, search, getattr Ottimizzazione delle prestazioni e telemetria del runtime Go in sola lettura.
alloydbcontrol_t init_t unix_stream_socket dontaudit (ioctl) Elimina gli avvisi non critici di ioctl del descrittore del file systemd.