1. Introduction
Cet atelier de programmation explique comment configurer la réplication logique entre des instances AlloyDB Omni indépendantes. Vous allez déployer plusieurs instances AlloyDB Omni sur une seule VM Compute Engine et configurer la réplication entre elles à l'aide de l'extension pglogical.
L'exécution de plusieurs instances sur un même nœud est utile pour le développement, les tests ou la simulation d'environnements de réplication. À la fin de cet atelier de programmation, vous disposerez d'une configuration de réplication fonctionnelle avec une instance agissant en tant que fournisseur et une autre en tant qu'abonné.
Prérequis
- Accès à un projet Google Cloud et à Cloud Shell depuis la console Google Cloud.
- Le SDK Google Cloud (
gcloud) est installé et configuré. Pour en savoir plus sur l'installation de gcloud, consultez gcloud-install.
Points abordés
- Découvrez comment créer et préparer une VM Compute Engine pour plusieurs instances AlloyDB Omni à l'aide de
gcloud. - Découvrez comment installer les RPM AlloyDB Omni.
- Configurer et initialiser plusieurs instances AlloyDB Omni à l'aide de modèles
systemd - Configurer la réplication logique entre des instances AlloyDB Omni à l'aide de
pglogical - Comment vérifier la réplication en répliquant des données du fournisseur vers l'abonné.
Prérequis
- Obtenez un lien URL vers les RPM AlloyDB Omni. Les liens sont envoyés à votre adresse e-mail, y compris un lien vers le serveur d'URL du dépôt. Initialisez la variable d'environnement suivante pour que l'URL soit prête à l'emploi pendant l'atelier de programmation.
export ALLOYDB_OMNI_REPOSITORY_URL="..." - Un terminal fonctionnel avec accès à Google Cloud. Vous pouvez utiliser Cloud Shell à cette fin.
2. Préparation
Configuration du projet
Créer un projet Google Cloud
- Dans la console Google Cloud, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.
- Assurez-vous que la facturation est activée pour votre projet Cloud. Découvrez comment vérifier si la facturation est activée sur un projet.
Démarrer Cloud Shell
Bien que vous puissiez exécuter Google Cloud à distance depuis votre ordinateur portable, vous allez utiliser Google Cloud Shell, un environnement de ligne de commande exécuté dans le cloud, lors de cet atelier de programmation.

- Ouvrez la console Google Cloud et cliquez sur l'icône Cloud Shell dans la barre d'outils en haut à droite.Vous pouvez également ouvrir Cloud Shell de l'une des manières suivantes :
- Si vous utilisez la console Google Cloud, appuyez sur G, puis sur S.
- Cliquez sur ce lien.
Le provisionnement et la connexion à l'environnement Cloud Shell prennent généralement quelques instants. Une fois cette opération terminée, un résultat semblable à ce qui suit s'affiche :

3. Créer la VM Compute Engine
Dans cette section, créez une seule machine virtuelle (VM) Compute Engine à l'aide de l'outil de ligne de commande gcloud. Utilisez une image Rocky Linux 9, qui est entièrement compatible avec les RPM AlloyDB Omni.
- Définissez des variables d'environnement pour l'ID de votre projet, le nom de la VM, la zone et la région.
export PROJECT="your-project-id" export INSTANCE_NAME="alloydb-omni-multi-vm" export ZONE="us-central1-c" export REGION="us-central1" - Connectez-vous à l'aide de votre compte Google Cloud et configurez le projet par défaut.
gcloud auth login gcloud config set project $PROJECT - Pour autoriser les connexions SSH à votre VM à l'aide d'Identity-Aware Proxy (IAP), créez une règle de pare-feu.
gcloud compute firewall-rules create allow-ssh-alloydb-omni \ --project=$PROJECT \ --direction=INGRESS \ --action=allow \ --rules=tcp:22 \ --source-ranges="0.0.0.0/0" - Étant donné que la VM est créée sans adresse IP publique, configurez un routeur Cloud Router et une passerelle Cloud NAT pour permettre à la VM d'accéder aux dépôts de packages externes et de télécharger les logiciels requis.
gcloud compute routers create alloydb-omni-router \ --project=$PROJECT \ --network=default \ --region=$REGION gcloud compute routers nats create alloydb-omni-nat \ --project=$PROJECT \ --router=alloydb-omni-router \ --region=$REGION \ --nat-all-subnet-ip-ranges \ --auto-allocate-nat-external-ips - Vérifiez que votre réseau de cloud privé virtuel (VPC) dispose d'une route de passerelle Internet par défaut valide. Cette route est nécessaire pour que Cloud NAT transfère le trafic sortant vers Internet.
gcloud compute routes create default-internet-route \ --project=$PROJECT \ --network=default \ --destination-range=0.0.0.0/0 \ --next-hop-gateway=default-internet-gateway - Créez l'instance de VM Compute Engine avec les spécifications requises (16 processeurs virtuels, 20 Go de disque persistant avec équilibrage, Rocky Linux 9). Pour renforcer la sécurité, utilisez le flag
--no-addressafin de vous assurer qu'aucune adresse IP publique n'est attribuée à la VM.gcloud compute instances create $INSTANCE_NAME \ --project=$PROJECT \ --zone=$ZONE \ --machine-type=n2-highmem-16 \ --image-family=rocky-linux-9 \ --image-project=rocky-linux-cloud \ --boot-disk-size=20GB \ --boot-disk-type=pd-balanced \ --no-address - Une fois la VM créée, vérifiez son état.
gcloud compute instances list --filter="name=$INSTANCE_NAME" --project=$PROJECT
4. Préparer la VM
Dans cette section, vous allez vous connecter à la VM que vous venez de créer et préparer l'environnement du système d'exploitation.
- Connectez-vous à la VM via SSH à l'aide d'IAP. Comme la VM ne possède pas d'adresse IP publique,
gcloudtunnelise automatiquement la connexion SSH via IAP.gcloud compute ssh $INSTANCE_NAME --zone=$ZONE --project=$PROJECT --tunnel-through-iap - Définissez une variable d'environnement pour le répertoire de données de base.
export BASE_PGDATA="/var/lib/alloydbomni" - Créez le répertoire de données de base.
sudo mkdir -p $BASE_PGDATA - Installez le package
policycoreutils-python-utilspour pouvoir configurer la règle SELinux.sudo dnf install -y policycoreutils-python-utils
5. Installer AlloyDB Omni
Une fois la VM préparée, vous pouvez configurer le dépôt de packages et installer le package RPM AlloyDB Omni.
- Configurez le dépôt YUM sur votre VM en créant le fichier de configuration du dépôt. Remplacez
$ALLOYDB_OMNI_REPOSITORY_URLpar l'URL que vous avez reçue.export ALLOYDB_OMNI_REPOSITORY_URL="..." sudo tee /etc/yum.repos.d/alloydbomni.repo << EOF [alloydbomni] name=alloydbomni baseurl=$ALLOYDB_OMNI_REPOSITORY_URL enabled=1 repo_gpgcheck=0 gpgcheck=1 gpgkey=https://dl.google.com/linux/linux_signing_key.pub EOF - Mettez à jour le cache YUM.
sudo yum makecache - Installez la version 18 du package RPM AlloyDB Omni.
sudo dnf install -y alloydbomni18
6. Configurer plusieurs instances
Dans cette section, configurez deux instances : inst1 et inst2.
- Pour prendre en charge plusieurs instances, créez le fichier de service de modèle
systemdalloydbomni18@.service.sudo tee /etc/systemd/system/alloydbomni18@.service << EOF [Unit] Description=AlloyDB Omni Database server instance %I After=syslog.target After=network-online.target [Service] SyslogIdentifier=alloydbomni-%I Type=notify User=postgres Group=postgres # Load configuration for the instance EnvironmentFile=/etc/alloydbomni/%I.conf OOMScoreAdjust=-1000 Environment=PG_OOM_ADJUST_FILE=/proc/self/oom_score_adj Environment=PG_OOM_ADJUST_VALUE=0 ExecStartPre=/usr/lib/postgresql/18/bin/alloydbomni18-check-db-dir \${PGDATA} ExecStart=/usr/lib/postgresql/18/bin/postgres -D \${PGDATA} ExecReload=/bin/kill -HUP \$MAINPID KillMode=mixed KillSignal=SIGINT TimeoutSec=0 TimeoutStartSec=0 TimeoutStopSec=1h [Install] WantedBy=multi-user.target EOF - Rechargez la configuration du gestionnaire
systemdpour reconnaître le nouveau service de modèle.sudo systemctl daemon-reload - Créez le répertoire de configuration pour les instances AlloyDB Omni.
sudo mkdir -p /etc/alloydbomni - Configurez le répertoire de données pour
inst1.sudo tee /etc/alloydbomni/inst1.conf << EOF PGDATA=/var/lib/alloydbomni/inst1 EOF - Configurez le répertoire de données pour
inst2.sudo tee /etc/alloydbomni/inst2.conf << EOF PGDATA=/var/lib/alloydbomni/inst2 EOF - Définissez les autorisations appropriées sur les fichiers de configuration.
sudo chmod 640 /etc/alloydbomni/*.conf sudo chown postgres:postgres /etc/alloydbomni/*.conf - Créez les répertoires de données pour les deux instances et définissez le bon propriétaire.
sudo mkdir -p /var/lib/alloydbomni/inst1 sudo mkdir -p /var/lib/alloydbomni/inst2 sudo chown -R postgres:postgres /var/lib/alloydbomni sudo chmod 750 /var/lib/alloydbomni/inst1 /var/lib/alloydbomni/inst2 - Facultatif : Définissez des limites de ressources pour chaque instance. Cela empêche une instance de consommer toutes les ressources de VM. Créez des répertoires et des fichiers de remplacement
systemdpour les deux instances.Remarque : Les limites de ressources utilisées dans les configurations suivantes (40%) sont des exemples de valeurs. Ajustez les limites en fonction de votre charge de travail spécifique et de la capacité de la VM.Pourinst1: Poursudo mkdir -p /etc/systemd/system/alloydbomni18@inst1.service.d sudo tee /etc/systemd/system/alloydbomni18@inst1.service.d/override.conf << EOF [Service] CPUQuota=40% MemoryMax=40% EOFinst2:sudo mkdir -p /etc/systemd/system/alloydbomni18@inst2.service.d sudo tee /etc/systemd/system/alloydbomni18@inst2.service.d/override.conf << EOF [Service] CPUQuota=40% MemoryMax=40% EOF
7. Initialiser et préparer les bases de données
Initialisez et préparez chaque instance de base de données séparément.
- Configurez SELinux sur le mode permissif pour la configuration.
Attention : Définir SELinux sur le mode permissif désactive l'application et doit être utilisé avec prudence. Il est utilisé dans cet atelier de programmation pour simplifier l'installation. En production, configurez les règles SELinux appropriées pour qu'AlloyDB Omni s'exécute en mode d'application. Vous pouvez réactiver l'application après la configuration en exécutantsudo setenforce 0sudo setenforce 1. - Définissez un mot de passe sécurisé pour l'utilisateur administrateur PostgreSQL
postgres. Ce mot de passe est utilisé pour les deux instances dans cet atelier de programmation. Remarque : La transmission de mots de passe à l'aide de variables d'environnement sur la ligne de commande (par exemple,export PGPASSWORD="YourStrongPassword123!"PGPASSWORD=$PGPASSWORD) est utilisée ici par souci de simplicité dans l'atelier de programmation, mais elle peut exposer le mot de passe dans les listes de processus. En production, utilisez des méthodes plus sécurisées, comme un fichier.pgpassou un gestionnaire de secrets.
Configurer inst1
- Initialisez le répertoire de base de données pour
inst1.sudo PGPASSWORD=$PGPASSWORD \ PGDATA=/var/lib/alloydbomni/inst1 \ /usr/lib/postgresql/18/bin/alloydbomni18-setup initdb - Configurez l'instance pour qu'elle écoute sur le port
5433en mettant à jour son fichierpostgresql.conf.sudo sed -i \ "s/^#*[[:space:]]*port[[:space:]]*=[[:space:]]*[0-9]*/port = 5433/" \ /var/lib/alloydbomni/inst1/postgresql.conf - Préparez l'instance de base de données pour AlloyDB Omni.
sudo PGPASSWORD=$PGPASSWORD \ PGDATA=/var/lib/alloydbomni/inst1 \ PGPORT=5433 \ /usr/lib/postgresql/18/bin/alloydbomni18-setup preparedb
Configurer inst2
- Initialisez le répertoire de base de données pour
inst2.sudo PGPASSWORD=$PGPASSWORD \ PGDATA=/var/lib/alloydbomni/inst2 \ /usr/lib/postgresql/18/bin/alloydbomni18-setup initdb - Configurez l'instance pour qu'elle écoute sur le port
5434.sudo sed -i \ "s/^#*[[:space:]]*port[[:space:]]*=[[:space:]]*[0-9]*/port = 5434/" \ /var/lib/alloydbomni/inst2/postgresql.conf - Préparez l'instance de base de données.
sudo PGPASSWORD=$PGPASSWORD \ PGDATA=/var/lib/alloydbomni/inst2 \ PGPORT=5434 \ /usr/lib/postgresql/18/bin/alloydbomni18-setup preparedb
8. Démarrer les services AlloyDB Omni
Vous pouvez maintenant démarrer les services systemd pour les deux instances.
- Pour que la nouvelle configuration et les nouveaux remplacements soient reconnus, rechargez la configuration du gestionnaire
systemd.sudo systemctl daemon-reload - Activez et démarrez le service pour
inst1.sudo systemctl enable alloydbomni18@inst1 sudo systemctl start alloydbomni18@inst1 - Activez et démarrez le service pour
inst2.sudo systemctl enable alloydbomni18@inst2 sudo systemctl start alloydbomni18@inst2 - Vérifiez que les deux services sont actifs et en cours d'exécution.
Vérifiez que le résultat pour les deux indiquesudo systemctl status alloydbomni18@inst1 sudo systemctl status alloydbomni18@inst2Active: active (running).
9. Vérifier les instances AlloyDB Omni
Vérifiez que les deux instances fonctionnent correctement et sont indépendantes.
- Connectez-vous à
inst1(port 5433). Vous êtes invité à saisir le mot de passe que vous avez configuré dans Initialiser et préparer les bases de données./usr/lib/postgresql/18/bin/psql -h localhost -p 5433 -U postgres -W - Exécutez une requête pour vérifier la connexion.
postgres=# SELECT version(); - Déconnectez-vous de l'instance.
postgres=# \q - Connectez-vous à
inst2(port 5434)./usr/lib/postgresql/18/bin/psql -h localhost -p 5434 -U postgres -W - Exécutez une requête pour vérifier la connexion.
postgres=# SELECT version(); - Déconnectez-vous de l'instance.
postgres=# \q
10. Configurer la réplication pglogical
Configurez la réplication logique entre les deux instances à l'aide de l'extension pglogical. Dans ce scénario, inst1 agit en tant que fournisseur et inst2 en tant qu'abonné.
Remarque : Cet atelier de programmation utilise le superutilisateur postgres pour les connexions de réplication. Dans un environnement de production, créez un utilisateur de réplication dédié avec des droits REPLICATION et accordez-lui l'accès uniquement aux tables répliquées.
Configurer les instances pour pglogical
- Activez
pglogicaldansshared_preload_librarieset configurez d'autres paramètres de réplication danspostgresql.confpourinst1.# Append pglogical to shared_preload_libraries sudo sed -i \ "s/\(shared_preload_libraries\s*=\s*'\)\([^']*\)'/\1\2,pglogical'/" \ /var/lib/alloydbomni/inst1/postgresql.conf # Append replication settings sudo tee -a /var/lib/alloydbomni/inst1/postgresql.conf << EOF wal_level = logical max_replication_slots = 10 max_wal_senders = 10 max_worker_processes = 20 track_commit_timestamp = on alloydb.enable_pglogical = on alloydb.logical_decoding = on EOF - Configurez les paramètres de
inst2que vous avez configurés pourinst1.# Append pglogical to shared_preload_libraries sudo sed -i \ "s/\(shared_preload_libraries\s*=\s*'\)\([^']*\)'/\1\2,pglogical'/" \ /var/lib/alloydbomni/inst2/postgresql.conf # Append replication settings sudo tee -a /var/lib/alloydbomni/inst2/postgresql.conf << EOF wal_level = logical max_replication_slots = 10 max_wal_senders = 10 max_worker_processes = 20 track_commit_timestamp = on alloydb.enable_pglogical = on alloydb.logical_decoding = on EOF - Pour appliquer les modifications de configuration, redémarrez les deux instances.
sudo systemctl restart alloydbomni18@inst1 sudo systemctl restart alloydbomni18@inst2
Configurer les rôles et les tables de réplication
- Sur
inst1(fournisseur, port 5433), créez un rôle de réplication et la table à répliquer./usr/lib/postgresql/18/bin/psql -h localhost -p 5433 \ -U postgres -d postgres -c " DO \$\$ BEGIN IF NOT EXISTS (SELECT FROM pg_catalog.pg_roles WHERE rolname = 'app_owner') THEN CREATE ROLE app_owner WITH LOGIN PASSWORD 'Password123'; END IF; END \$\$; GRANT ALL ON SCHEMA public TO app_owner; CREATE TABLE IF NOT EXISTS replication_test ( id SERIAL PRIMARY KEY, data TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); ALTER TABLE replication_test OWNER TO app_owner; " - Sur
inst2(abonné, port 5434), créez le même rôle et la même structure de table./usr/lib/postgresql/18/bin/psql -h localhost -p 5434 \ -U postgres -d postgres -c " DO \$\$ BEGIN IF NOT EXISTS (SELECT FROM pg_catalog.pg_roles WHERE rolname = 'app_owner') THEN CREATE ROLE app_owner WITH LOGIN PASSWORD 'Password123'; END IF; END \$\$; GRANT ALL ON SCHEMA public TO app_owner; CREATE TABLE IF NOT EXISTS replication_test ( id SERIAL PRIMARY KEY, data TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); ALTER TABLE replication_test OWNER TO app_owner; "
Configurer les nœuds et l'abonnement pglogical
- Initialisez le nœud du fournisseur pglogical sur
inst1./usr/lib/postgresql/18/bin/psql -h localhost -p 5433 \ -U postgres -d postgres -c " CREATE EXTENSION IF NOT EXISTS pglogical; SELECT pglogical.create_node( node_name := 'provider', dsn := 'host=127.0.0.1 port=5433 dbname=postgres user=postgres password=YourStrongPassword123!' ); SELECT pglogical.replication_set_add_table('default', 'replication_test'); " - Initialisez le nœud abonné pglogical et créez l'abonnement sur
inst2. Remarque : Une fois l'abonnement créé, la synchronisation initiale peut prendre un certain temps./usr/lib/postgresql/18/bin/psql -h localhost -p 5434 \ -U postgres -d postgres -c " CREATE EXTENSION IF NOT EXISTS pglogical; SELECT pglogical.create_node( node_name := 'subscriber', dsn := 'host=127.0.0.1 port=5434 dbname=postgres user=postgres password=YourStrongPassword123!' ); SELECT pglogical.create_subscription( subscription_name := 'test_subscription', provider_dsn := 'host=127.0.0.1 port=5433 dbname=postgres user=postgres password=YourStrongPassword123!' ); "
11. Vérifier la réplication pglogical
Vérifiez que la réplication fonctionne comme prévu en insérant des données sur le fournisseur et en les interrogeant sur l'abonné.
- Vérifiez que l'abonnement est actif. Le passage à
replicatingpeut prendre quelques secondes./usr/lib/postgresql/18/bin/psql -t -A -h localhost -p 5434 \ -U postgres -d postgres -c " SELECT status FROM pglogical.show_subscription_status() WHERE subscription_name = 'test_subscription'; " - Avant de continuer, vérifiez que le résultat affiche
replicating. - Insérez une ligne de test dans le fournisseur (
inst1)./usr/lib/postgresql/18/bin/psql -h localhost -p 5433 \ -U postgres -d postgres -c " INSERT INTO replication_test (data) VALUES ('Hello from replication provider!'); " - Pour vérifier que les données ont été répliquées, interrogez la table sur
inst2. Vérifiez que la ligne insérée le/usr/lib/postgresql/18/bin/psql -h localhost -p 5434 \ -U postgres -d postgres -c "SELECT * FROM replication_test;"inst1s'affiche.
12. Nettoyage
Nettoyer les ressources. Commencez par détruire les instances AlloyDB Omni sur la VM, puis supprimez les ressources Google Cloud.
Détruire des instances AlloyDB Omni
Avant de supprimer la VM, vous pouvez nettoyer les instances AlloyDB Omni en arrêtant et en désactivant les services, et en supprimant leur configuration et leurs données.
- Arrêtez et désactivez le service pour
inst1, puis supprimez ses données et sa configuration.sudo systemctl stop alloydbomni18@inst1 sudo systemctl disable alloydbomni18@inst1 sudo rm -rf /var/lib/alloydbomni/inst1 sudo rm -f /etc/alloydbomni/inst1.conf - Arrêtez et désactivez le service pour
inst2, puis supprimez ses données et sa configuration.sudo systemctl stop alloydbomni18@inst2 sudo systemctl disable alloydbomni18@inst2 sudo rm -rf /var/lib/alloydbomni/inst2 sudo rm -f /etc/alloydbomni/inst2.conf - Rechargez la configuration du gestionnaire systemd et réinitialisez les unités défaillantes.
sudo systemctl daemon-reload sudo systemctl reset-failed
Nettoyer les ressources Google Cloud
Une fois les instances nettoyées, supprimez la VM Compute Engine et les autres ressources.
- Déconnectez-vous de la session SSH.
exit - Supprimez l'instance de VM Compute Engine.
gcloud compute instances delete $INSTANCE_NAME --zone=$ZONE --project=$PROJECT --quiet - Supprimez la règle de pare-feu.
gcloud compute firewall-rules delete allow-ssh-alloydb-omni --project=$PROJECT --quiet - Supprimez Cloud NAT et le routeur.
gcloud compute routers nats delete alloydb-omni-nat --router=alloydb-omni-router --region=$REGION --project=$PROJECT --quiet gcloud compute routers delete alloydb-omni-router --region=$REGION --project=$PROJECT --quiet - Supprimez la route Internet par défaut.
gcloud compute routes delete default-internet-route --project=$PROJECT --quiet
13. Félicitations
Vous avez déployé et configuré plusieurs instances AlloyDB Omni sur une seule VM Compute Engine.
Points abordés
- Découvrez comment provisionner et préparer une VM Compute Engine.
- Découvrez comment installer les RPM AlloyDB Omni.
- Configurer des modèles
systemdpour plusieurs instances - Comment initialiser, configurer et démarrer plusieurs services indépendants sur différents ports.
- Comment vérifier l'indépendance de chaque instance
En savoir plus
- Pour en savoir plus sur l'installation et la configuration, consultez la documentation AlloyDB Omni.
- Pour en savoir plus sur l'extension de réplication utilisée dans cet atelier de programmation, consultez la documentation pglogical.