1. Introduzione
Questo codelab mostra il deployment del cluster ad alta affidabilità (HA) di AlloyDB Omni su macchine virtuali (VM) di Google Compute Engine (GCE). Al termine di questo codelab, eseguirai il provisioning di un'architettura di riferimento ad alta disponibilità composta da 3 nodi di database e 2 nodi HAProxy, insieme a un nodo di controllo per le operazioni di gestione.
Prerequisiti
- Accesso a un progetto Google Cloud e a Cloud Shell dalla console Google Cloud.
- Google Cloud SDK (
gcloud) installato e configurato. Per maggiori dettagli sull'installazione di gcloud, consulta gcloud-install. - Terraform v1.9.8 installato.
Cosa imparerai a fare
- Come creare e preparare le VM GCE per AlloyDB Omni.
- Come installare ed eseguire l'orchestratore RPM di AlloyDB Omni.
- Come installare e configurare gli RPM di AlloyDB Omni per l'architettura di riferimento ad alta disponibilità.
Che cosa ti serve
- Ottieni il link URL agli RPM di AlloyDB Omni e all'orchestratore RPM. Per farlo, devi compilare il modulo di registrazione ad AlloyDB Omni. I link vengono inviati all'indirizzo email del server URL del repository. Inizializza le seguenti variabili di ambiente per tenere a portata di mano gli URL che verranno utilizzati durante il codelab.
export ORCHESTRATOR_ANSIBLE_COLLECTION_PATH="..." export ALLOYDB_OMNI_REPOSITORY_URL="..." export ALLOYDB_OMNI_ORCHESTRATOR_REPOSITORY_URL="..." export ALLOYDB_OMNI_COMMON_REPOSITORY_URL=.... export ETCD_REPOSITORY_URL="..." - Un terminale funzionante con accesso allo stack di deployment di AlloyDB Omni. A questo scopo, puoi utilizzare Cloud Shell.
2. Configurazione e requisiti
Configurazione del progetto
Crea un progetto Google Cloud
- Nella console Google Cloud, nella pagina di selezione del progetto, seleziona o crea un progetto Google Cloud.
- Verifica che la fatturazione sia attivata per il tuo progetto Cloud. Scopri come verificare se la fatturazione è attivata per un progetto.
Avvia Cloud Shell
Sebbene Google Cloud possa essere gestito da remoto dal tuo laptop, in questo codelab utilizzerai Google Cloud Shell, un ambiente a riga di comando in esecuzione nel cloud.
Dalla console Google Cloud, fai clic sull'icona di Cloud Shell nella barra degli strumenti in alto a destra:

In alternativa, puoi premere G, poi S. Questa sequenza attiverà Cloud Shell se ti trovi nella console Google Cloud o utilizzi questo link.
Il provisioning e la connessione all'ambiente dovrebbero richiedere solo pochi istanti. Al termine, dovresti vedere qualcosa di simile a questo:

Questa macchina virtuale viene fornita con tutti gli strumenti di sviluppo di cui avrai bisogno. Offre una home directory permanente da 5 GB e viene eseguita in Google Cloud, migliorando notevolmente le prestazioni e l'autenticazione della rete. Tutto il lavoro in questo codelab può essere svolto all'interno di un browser. Non devi installare nulla.
3. Crea macchine virtuali Google Cloud Compute Engine
Prepara gli script Terraform
- Definisci le variabili di ambiente per l'ID progetto e il nome del cluster desiderato. Li utilizzerai durante il codelab.
Nota: l'ID progetto Google Cloud deve contenere da 6 a 30 caratteri. Per ulteriori informazioni, consulta https://docs.cloud.google.com/resource-manager/docs/creating-managing-projects#before_you_begin.export PROJECT="your-project-id" export CLUSTER="your-cluster-name" - Assicurati di aver eseguito l'accesso con l'utente dell'account Google Cloud.
gcloud auth login - Crea una directory di lavoro per il deployment e copia i file di configurazione Terraform richiesti dall'origine del repository.
mkdir -p ~/alloydb-omni/$PROJECT/$CLUSTER cd ~/alloydb-omni/$PROJECT/$CLUSTER gcloud storage cp gs://alloydb-omni-install/rpm-orchestrator/gce/terraform/*.tf . - Crea un file
terraform.tfvarsper specificare i parametri richiesti in base all'architettura di riferimento, come indicato di seguito:cat > terraform.tfvars <<EOF # Required instance counts for reference architecture db_instance_count = 3 haproxy_instance_count = 2 control_instance_count = 1 # Optional: Customize if needed with the below variables # os_image = "rocky-linux-cloud/rocky-linux-9" # zone = "us-west4-c" # region_1 = "us-west4" # db_instance_type = "c4-highmem-4" # db_disk_type = "hyperdisk-balanced" # db_data_size = "50" # GB # data_dir = "/data" EOF
Esegui gli script Terraform e convalida
- Ora puoi eseguire il provisioning delle VM.
terraform init - Prima di creare le VM, assicurati di disporre dell'accesso necessario per creare VM e altre risorse. In sintesi, avrai bisogno delle seguenti autorizzazioni.
roles/compute.admin roles/iam.roleAdmin roles/compute.osAdminLogin roles/iam.serviceAccountCreator roles/iam.serviceAccountUser roles/artifactregistry.repoAdmin roles/storage.objectUser roles/resourcemanager.projectIamAdmin roles/serviceusage.serviceUsageAdmin - Convalida la configurazione e applicala per eseguire il provisioning delle risorse.
Nota: assicurati di utilizzare Terraform v1.9.8 come previsto dalla configurazione del deployment.terraform validate terraform apply --auto-approve - Al termine dell'esecuzione di Terraform, verifica che le macchine virtuali siano state create correttamente elencando le istanze create utilizzando
gcloud. Dovresti visualizzare le istanze corrispondenti ai 3 nodi di database, ai 2 nodi HAProxy e alla VM di controllo e alle zone corrispondenti. Annota la ZONA del nodo di controllo. Ne avremo bisogno più avanti in questo codelab.gcloud compute instances list --filter="name~$CLUSTER" --project=$PROJECTexport ZONE=$(gcloud compute instances list \ --filter="name=$CLUSTER-control" \ --format="value(zone)" --project=$PROJECT)
4. Prepara le VM per il deployment
Devi creare una sessione SSH sul nodo di controllo ed eseguire i passaggi per abilitare l'accesso SSH a tutte le VM (chiamate anche nodi).
- Assicurati che le variabili di ambiente per il progetto e il cluster siano definite.
export PROJECT="your-project-id" export CLUSTER="your-cluster-name" - Crea la chiave SSH e aggiungila per accedere alla VM di controllo.
# Replace values with your specific GCP project, cluster and zone details ssh-keygen -t ed25519 -f $HOME/.ssh/google_compute_engine gcloud compute os-login ssh-keys add --key-file=$HOME/.ssh/google_compute_engine.pub --project=$PROJECT - Crea una regola firewall per consentire le connessioni SSH e il traffico VRRP.
gcloud compute config-ssh --project=$PROJECT gcloud compute firewall-rules create $CLUSTER-allow-ssh --network=$CLUSTER --project=$PROJECT --direction=INGRESS --action=allow --rules=tcp:22 --source-ranges="0.0.0.0/0" gcloud compute firewall-rules create $CLUSTER-allow-vrrp --network=$CLUSTER --project=$PROJECT --allow=112 --source-ranges="0.0.0.0/0" - Connettiti alla VM di controllo tramite SSH:
gcloud compute ssh "$CLUSTER-control" --zone=$ZONE --project=$PROJECT - Crea un gruppo Linux sul nodo di controllo con lo stesso nome dell'utente:
sudo groupadd $(id -un) sudo usermod -aG $(id -un) $(id -un) - La configurazione di Terraform crea alcuni script di configurazione e li prepara nella directory
/tmp/della VM di controllo, inclusi elementi come il nome del cluster, il service account, il nome del progetto e così via.Crea l'accesso SSH senza password dai nodi di controllo a tutti i nodi del cluster utilizzando gli script di configurazione sul nodo di controllo. Importante: annota l'utente service_account. Lo utilizzeremo come SSH_USER più avanti in questo codelab./tmp/setup-ssh-for-cluster.sh - Per questo codelab, possiamo disabilitare SELinux su tutti i nodi. Lo script Terraform aggiunge "/tmp/run-all.sh", che può essere utilizzato a questo scopo.
/tmp/run-all.sh sudo setenforce 0 - Se ti sei registrato ad AlloyDB Omni e hai ottenuto i link, è il momento di aggiungere anche questi URL alle variabili di ambiente.
Scegli un IP virtuale per il tuo ambiente dalla variabile di input cidr_range nel filecat >> ~/.codelab.env <<EOF export ORCHESTRATOR_ANSIBLE_COLLECTION_PATH="..." export ALLOYDB_OMNI_REPOSITORY_URL="..." export ALLOYDB_OMNI_ORCHESTRATOR_REPOSITORY_URL="..." export ALLOYDB_OMNI_COMMON_REPOSITORY_URL=.... export ETCD_REPOSITORY_URL="..." EOFterraform/variables.tfin modo che non sia in conflitto con gli altri nodi, come mostrato nell'esempio seguente:cat >> ~/.codelab.env <<EOF export VIRTUAL_IP="10.1.0.50" EOF
5. Installa i componenti software richiesti su tutte le VM
Il passaggio successivo consiste nell'installare i componenti software richiesti sulle VM. Questa operazione può essere coordinata sul nodo di controllo. Tutti i comandi seguenti devono essere eseguiti sul nodo di controllo.
- Connettiti alla VM di controllo tramite SSH, se non hai già eseguito l'accesso al nodo di controllo.
Una volta visualizzato il prompt SSH della VM di controllo, carica il file di ambiente.gcloud compute ssh "$CLUSTER-control" --zone=$ZONE --project=$PROJECTsource ~/.codelab.env - Sul nodo di controllo, installa Ansible e le librerie Python richieste.
sudo dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm -y sudo dnf install -y ansible sudo dnf install -y python3-grpcio python3-protobuf python3-googleapis-common-protos python3-grpcio-status - Scarica il file tar della raccolta Ansible dell'orchestratore RPM e installalo.
Nota: assicurati che la variabile ORCHESTRATOR_ANSIBLE_COLLECTION_PATH termini con "/".gcloud storage cp "gs://${ORCHESTRATOR_ANSIBLE_COLLECTION_PATH#https://storage.googleapis.com/}google-alloydbomni_orchestrator-*.tar.gz" . ansible-galaxy collection install google-alloydbomni_orchestrator-0.1.0-6.tar.gz ansible-galaxy collection list | grep alloydbomni_orchestrator - L'orchestratore utilizza un file di specifiche di deployment in formato inventario Ansible per comprendere la topologia del cluster. Crea un file denominato deployment_spec.yaml con i dettagli del nodo sul nodo di controllo.
Nota: esamina il file generato per assicurarti che faccia riferimento a valori validi.cat > deployment_spec.yaml <<EOF alloydbomni: vars: cluster_manager: name: "$CLUSTER" etcd: setup: true config_forcewrite: true alloydbomni: major_version: "18" repo_url: $ALLOYDB_OMNI_REPOSITORY_URL alloydbomni_monitor: repo_url: $ALLOYDB_OMNI_COMMON_REPOSITORY_URL alloydbomni_cluster_manager: repo_url: $ALLOYDB_OMNI_ORCHESTRATOR_REPOSITORY_URL alloydbomni_node_manager: repo_url: $ALLOYDB_OMNI_ORCHESTRATOR_REPOSITORY_URL pgbouncer: repo_url: $ALLOYDB_OMNI_COMMON_REPOSITORY_URL pgbackrest: repo_url: $ALLOYDB_OMNI_COMMON_REPOSITORY_URL children: primary_instance_nodes: hosts: $CLUSTER-db1: $CLUSTER-db2: $CLUSTER-db3: load_balancer_nodes: hosts: $CLUSTER-haproxy1: $CLUSTER-haproxy2: EOF - Crea un playbook denominato install.yaml che faccia riferimento al ruolo di installazione della raccolta dell'orchestratore.
Nota: esamina il file generato per assicurarti che faccia riferimento a valori validi.cat > install.yaml <<EOF - name: Install AlloyDB Omni cluster components hosts: all vars: ansible_become: true ansible_user: $SSH_USER ansible_ssh_private_key_file: $HOME/ssh-key-cluster-sa roles: - role: google.alloydbomni_orchestrator.install EOF - Esegui il playbook utilizzando il file di inventario per scaricare e installare gli RPM su tutti i nodi specificati.
ansible-playbook -i deployment_spec.yaml install.yaml
6. Esegui il bootstrap del cluster AlloyDB Omni
A questo punto, abbiamo installato tutti i componenti richiesti su tutti i nodi. Siamo pronti per eseguire il bootstrap del cluster AlloyDB Omni.
- Connettiti alla VM di controllo tramite SSH, se non hai già eseguito l'accesso al nodo di controllo.
Una volta visualizzato il prompt SSH della VM di controllo, carica il file di ambiente.gcloud compute ssh "$CLUSTER-control" --zone=$ZONE --project=$PROJECTsource ~/.codelab.env - Genera un hash per la password e annotalo.
encoded_password=$(echo -n "your unique password" | base64) - Per creare il cluster, AlloyDB Omni deve sapere come configurarlo. Crea un file denominato dbcluster.yaml per le specifiche del cluster di database.
cat > dbcluster.yaml <<EOF Secret: metadata: name: db-pw-$CLUSTER spec: type: Opaque data: $CLUSTER: $encoded_password --- DBCluster: metadata: name: $CLUSTER spec: databaseVersion: 18.1.0 mode: "" availability: numberOfStandbys: 2 enableAutoFailover: true enableAutoHeal: true autoFailoverTriggerThreshold: 2 autoHealTriggerThreshold: 2 healthcheckPeriodSeconds: 5 replayReplicationSlotsOnStandbys: false primarySpec: adminUser: passwordRef: name: db-pw-$CLUSTER resources: cpu: 4 memory: 32Gi disks: - name: DataDisk path: $PGDATA dbLoadBalancerOptions: gcp: loadBalancerIP: "$VIRTUAL_IP" loadBalancerType: "internal" loadBalancerInterface: "eth0" EOF - Crea un playbook denominato bootstrap.yaml, che farà riferimento al ruolo Ansible di bootstrap per la creazione del cluster AlloyDB Omni.
cat > bootstrap.yaml <<EOF - name: Create DBCluster hosts: localhost vars: ansible_become: true ansible_user: $SSH_USER ansible_ssh_private_key_file: $HOME/ssh-key-cluster-sa roles: - role: google.alloydbomni_orchestrator.bootstrap EOF - Esegui il playbook per creare il cluster.
ansible-playbook bootstrap.yaml -i deployment_spec.yaml -e resource_spec=dbcluster.yaml
7. (Facoltativo) Configura il pool di connessioni PgBouncer
AlloyDB Omni supporta il pool di connessioni leggero utilizzando PgBouncer. Puoi configurare ed eseguire il bootstrap di PgBouncer subito dopo il provisioning del cluster.
- Crea un file di specifiche delle risorse denominato pgbouncer.yaml che associa il pool di connessioni al cluster di database:
cat > pgbouncer.yaml <<EOF PgBouncer: metadata: name: pgbouncer-pooler spec: dbclusterRef: $CLUSTER allowSuperUserAccess: true accessMode: "rw" port: 6432 EOF - Esegui il bootstrap del pool di PgBouncer utilizzando lo stesso playbook bootstrap.yaml creato in precedenza, passando il nuovo file di specifiche:
ansible-playbook bootstrap.yaml -i deployment_spec.yaml -e resource_spec=pgbouncer.yaml
8. Verifica il cluster AlloyDB Omni
Per verificare che il cluster funzioni correttamente e sia accessibile utilizzando il bilanciatore del carico, puoi connetterti utilizzando il client PostgreSQL standard dal nodo di controllo.
- Installa il repository e il pacchetto del client PostgreSQL 18 sul nodo di controllo:
sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm sudo dnf install -y postgresql18 - Connettiti al cluster utilizzando l'IP virtuale riservato in precedenza. Ti verrà richiesta la password codificata in dbcluster.yaml:
/usr/pgsql-18/bin/psql -h $VIRTUAL_IP -U postgres -W - Una volta connesso, puoi eseguire query SQL di base per verificare lo stato del cluster, ad esempio controllando la versione del database:
Dovresti vedere un output che indica che PostgreSQL 18 è in esecuzione con AlloyDB Omni. Digitapostgres=# SELECT version();\qper uscire dal prompt.
9. (Facoltativo) Esegui il backup dei dati utilizzando pgBackRest
AlloyDB Omni si integra con pgBackRest per gestire i backup direttamente in Cloud Storage. Puoi configurare un piano di backup e attivare un backup on demand nel bucket GCS creato dalla configurazione di Terraform.
- Crea un file di specifiche del piano di backup denominato backup_plan.yaml che rimandi al bucket GCS di cui hai eseguito il provisioning:
cat > backup_plan.yaml <<EOF BackupPlan: metadata: name: pgb-plan spec: dbclusterRef: $CLUSTER backupLocation: type: GCS gcsOptions: bucket: $CLUSTER-gcs-backups key: /backups EOF - Crea un playbook Ansible denominato backup.yaml che faccia riferimento al ruolo di gestione dei backup:
cat > backup.yaml <<EOF - name: Manage AlloyDB Omni Backups hosts: localhost vars: ansible_become: true ansible_user: $SSH_USER ansible_ssh_private_key_file: $HOME/ssh-key-cluster-sa roles: - role: google.alloydbomni_orchestrator.backup EOF - Applica il piano di backup utilizzando il playbook backup.yaml:
ansible-playbook backup.yaml -i deployment_spec.yaml -e resource_spec=backup_plan.yaml - Una volta stabilito il piano, crea un file di risorse di backup on demand denominato create_backup.yaml.
cat > create_backup.yaml <<EOF Backup: metadata: name: on-demand-backup spec: backupPlanRef: pgb-plan dbclusterRef: $CLUSTER EOF - Esegui il playbook per avviare il backup:
ansible-playbook backup.yaml -i deployment_spec.yaml -e resource_spec=create_backup.yaml - Per verificare lo stato del backup, crea un playbook status.yaml:
- name: Fetch AlloyDB Omni Resource Status
hosts: localhost
vars:
ansible_become: true
ansible_user: $SSH_USER
ansible_ssh_private_key_file: $HOME/ssh-key-cluster-sa
roles:
- role: google.alloydbomni_orchestrator.status
EOF
- Esegui il playbook per elencare tutti i backup:
ansible-playbook status.yaml -i deployment_spec.yaml -e resource_type=Backup
- In alternativa, per ottenere informazioni dettagliate su un backup specifico creato in precedenza, passa
-e resource_name=on-demand-backup:
ansible-playbook status.yaml -i deployment_spec.yaml \
-e resource_type=Backup \
-e resource_name=on-demand-backup
10. Esegui la pulizia delle risorse
Al termine del deployment, puoi eliminare le risorse di cui hai eseguito il provisioning per evitare addebiti.
- Crea un playbook denominato teardown.yaml:
cat > teardown.yaml <<EOF - name: Tear down AlloyDB Omni cluster hosts: localhost vars: ansible_become: true ansible_user: $SSH_USER ansible_ssh_private_key_file: $HOME/ssh-key-cluster-sa roles: - role: google.alloydbomni_orchestrator.delete EOF - Esegui il playbook utilizzando ansible-playbook. Se hai configurato i backup, elimina prima le risorse Backup e BackupPlan:
Se hai configurato PgBouncer, elimina la risorsa del pool di connessioni:ansible-playbook teardown.yaml -i deployment_spec.yaml -e "resource_type=Backup" -e "resource_name=on-demand-backup" ansible-playbook teardown.yaml -i deployment_spec.yaml -e "resource_type=BackupPlan" -e "resource_name=pgb-plan" Quindi, specifica DBCluster come resource_type ed elimina il cluster di database stesso:ansible-playbook teardown.yaml -i deployment_spec.yaml -e "resource_type=PgBouncer" -e "resource_name=pgbouncer-pooler"ansible-playbook teardown.yaml -i deployment_spec.yaml -e "resource_type=DBCluster" -e "resource_name=$CLUSTER" - Una volta eliminato il cluster, disconnettiti dal nodo di controllo, torna al terminale e vai alla directory di lavoro di Terraform.
Nota: se hai appena eseguito l'accesso a Cloud Shell, ricordati di impostare quanto segue:export PROJECT="your-project-id" export CLUSTER="your-cluster-name" - Elimina la regola firewall VRRP ed elimina le risorse gestite da Terraform:
gcloud compute firewall-rules delete -q "$CLUSTER-allow-vrrp" --project="$PROJECT" gcloud compute firewall-rules delete -q "$CLUSTER-allow-ssh" --project="$PROJECT" terraform destroy - Conferma l'eliminazione quando ti viene richiesto. Poiché le risorse o le route di rete rimanenti potrebbero occasionalmente impedire l'eliminazione completa, esegui i seguenti comandi di pulizia sicura per assicurarti che tutte le regole firewall, i gateway NAT, i router, le route, le subnet e le reti associate vengano rimosse completamente. Sostituisci
REGIONcon la regione di deployment specifica, ad esempio "us-central1":# Delete any remaining firewall rules associated with the cluster gcloud compute firewall-rules list --project=$PROJECT 2> /dev/null | grep ^$CLUSTER- | cut -f1 -d' ' | \ while read rule; do gcloud compute firewall-rules delete --project=$PROJECT --quiet $rule; done # Delete the Cloud NAT gateway and router if they still exist gcloud compute routers nats describe $CLUSTER-nat-gw --router=$CLUSTER-router --region=REGION --project=$PROJECT 2>/dev/null \ && gcloud compute routers nats delete $CLUSTER-nat-gw --router=$CLUSTER-router --region=REGION --project=$PROJECT --quiet gcloud compute routers describe $CLUSTER-router --region=REGION --project=$PROJECT 2>/dev/null \ && gcloud compute routers delete $CLUSTER-router --region=REGION --project=$PROJECT --quiet # Delete any remaining custom routes gcloud compute routes list --project=$PROJECT --filter="network:$CLUSTER" --format="value(name)" 2>/dev/null | \ while read route; do gcloud compute routes delete --project=$PROJECT --quiet $route 2>/dev/null || true; done # Delete the subnet and network if they still exist gcloud compute networks subnets describe $CLUSTER --region=REGION --project=$PROJECT 2>/dev/null \ && gcloud compute networks subnets delete $CLUSTER --region=REGION --project=$PROJECT --quiet gcloud compute networks describe $CLUSTER --project $PROJECT 2> /dev/null \ && gcloud compute networks delete $CLUSTER --project $PROJECT --quiet
11. Complimenti
Complimenti per aver completato il codelab.
Argomenti trattati
- Come creare e preparare le VM GCE per AlloyDB Omni.
- Come installare ed eseguire l'orchestratore RPM di AlloyDB Omni.
- Come installare e configurare gli RPM di AlloyDB Omni per l'architettura di riferimento ad alta disponibilità.
Puoi scoprire di più su AlloyDB Omni nella documentazione.