1. Pengantar
Codelab ini menunjukkan cara mengonfigurasi replikasi logis antara instance AlloyDB Omni yang independen. Anda akan men-deploy beberapa instance AlloyDB Omni di satu VM Compute Engine dan menyiapkan replikasi di antara instance tersebut menggunakan ekstensi pglogical.
Menjalankan beberapa instance pada satu node berguna untuk pengembangan, pengujian, atau simulasi lingkungan replikasi. Di akhir codelab ini, Anda akan memiliki penyiapan replikasi yang berfungsi dengan satu instance yang bertindak sebagai penyedia dan instance lainnya sebagai pelanggan.
Prasyarat
- Akses ke project Google Cloud dan Cloud Shell dari konsol Google Cloud.
- Google Cloud SDK (
gcloud) diinstal dan dikonfigurasi. Untuk mengetahui detail tentang cara menginstal gcloud, lihat gcloud-install
Yang akan Anda pelajari
- Cara membuat dan menyiapkan VM Compute Engine untuk beberapa instance AlloyDB Omni menggunakan
gcloud. - Cara menginstal RPM AlloyDB Omni.
- Cara mengonfigurasi dan menginisialisasi beberapa instance AlloyDB Omni menggunakan template
systemd. - Cara mengonfigurasi replikasi logis antara instance AlloyDB Omni menggunakan
pglogical. - Cara memverifikasi replikasi dengan mereplikasi data dari penyedia ke pelanggan.
Yang Anda butuhkan
- Dapatkan link URL ke RPM AlloyDB Omni. Link dikirim ke email Anda, termasuk link ke server URL repositori. Lakukan inisialisasi variabel lingkungan berikut agar URL siap digunakan selama codelab.
export ALLOYDB_OMNI_REPOSITORY_URL="..." - Terminal yang berfungsi dengan akses ke Google Cloud. Anda dapat menggunakan Cloud Shell untuk tujuan ini.
2. Penyiapan dan Persyaratan
Penyiapan project
Membuat project Google Cloud
- Di Konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
- Pastikan penagihan diaktifkan untuk project Cloud Anda. Pelajari cara memeriksa apakah penagihan telah diaktifkan pada suatu project.
Mulai Cloud Shell
Meskipun Anda dapat mengoperasikan Google Cloud dari jarak jauh menggunakan laptop, dalam codelab ini, Anda akan menggunakan Google Cloud Shell, lingkungan command line yang berjalan di cloud.

- Buka Konsol Google Cloud, lalu klik ikon Cloud Shell di toolbar kanan atas.Anda juga dapat membuka Cloud Shell dengan salah satu cara berikut:
- Jika Anda menggunakan Konsol Google Cloud, tekan G, lalu S.
- Klik link ini.
Cloud Shell biasanya memerlukan waktu beberapa saat untuk melakukan penyediaan dan terhubung ke lingkungan. Setelah operasi ini selesai, Anda akan melihat output yang mirip dengan berikut ini:

3. Membuat VM Compute Engine
Di bagian ini, buat satu virtual machine (VM) Compute Engine menggunakan alat command line gcloud. Gunakan image Rocky Linux 9, yang sepenuhnya kompatibel dengan RPM AlloyDB Omni.
- Tentukan variabel lingkungan untuk project ID, nama VM, zona, dan region Anda.
export PROJECT="your-project-id" export INSTANCE_NAME="alloydb-omni-multi-vm" export ZONE="us-central1-c" export REGION="us-central1" - Login menggunakan akun Google Cloud Anda, dan konfigurasi project default.
gcloud auth login gcloud config set project $PROJECT - Untuk mengizinkan koneksi SSH ke VM Anda menggunakan Identity-Aware Proxy (IAP), buat aturan firewall.
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" - Karena VM dibuat tanpa alamat IP publik, konfigurasi gateway Cloud Router dan Cloud NAT agar VM dapat mengakses repositori paket eksternal dan mendownload software yang diperlukan.
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 - Pastikan jaringan virtual private cloud (VPC) Anda memiliki rute gateway internet default yang valid. Rute ini diperlukan agar Cloud NAT meneruskan traffic keluar ke 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 - Buat instance VM Compute Engine dengan spesifikasi yang diperlukan (16 vCPU, persistent disk seimbang 20 GB, Rocky Linux 9). Untuk meningkatkan keamanan, gunakan flag
--no-addressuntuk memastikan bahwa VM tidak diberi alamat IP publik.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 - Setelah VM dibuat, verifikasi status VM.
gcloud compute instances list --filter="name=$INSTANCE_NAME" --project=$PROJECT
4. Mempersiapkan VM
Di bagian ini, Anda akan terhubung ke VM yang baru dibuat dan menyiapkan lingkungan sistem operasi.
- Hubungkan ke VM melalui SSH menggunakan IAP. Karena VM tidak memiliki alamat IP publik,
gcloudotomatis membuat tunnel koneksi SSH melalui IAP.gcloud compute ssh $INSTANCE_NAME --zone=$ZONE --project=$PROJECT --tunnel-through-iap - Tentukan variabel lingkungan untuk direktori data dasar.
export BASE_PGDATA="/var/lib/alloydbomni" - Buat direktori data dasar.
sudo mkdir -p $BASE_PGDATA - Instal paket
policycoreutils-python-utilsagar kebijakan SELinux dapat dikonfigurasi.sudo dnf install -y policycoreutils-python-utils
5. Menginstal AlloyDB Omni
Setelah VM disiapkan, Anda kini dapat mengonfigurasi repositori paket dan menginstal paket RPM AlloyDB Omni.
- Konfigurasi repositori YUM di VM Anda dengan membuat file konfigurasi repositori. Ganti
$ALLOYDB_OMNI_REPOSITORY_URLdengan URL yang Anda terima.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 - Perbarui cache YUM.
sudo yum makecache - Instal paket RPM AlloyDB Omni versi 18.
sudo dnf install -y alloydbomni18
6. Mengonfigurasi beberapa instance
Di bagian ini, konfigurasikan dua instance: inst1 dan inst2.
- Untuk mendukung beberapa instance, buat file layanan template
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 - Muat ulang konfigurasi pengelola
systemduntuk mengenali layanan template baru.sudo systemctl daemon-reload - Buat direktori konfigurasi untuk instance AlloyDB Omni.
sudo mkdir -p /etc/alloydbomni - Konfigurasi direktori data untuk
inst1.sudo tee /etc/alloydbomni/inst1.conf << EOF PGDATA=/var/lib/alloydbomni/inst1 EOF - Konfigurasi direktori data untuk
inst2.sudo tee /etc/alloydbomni/inst2.conf << EOF PGDATA=/var/lib/alloydbomni/inst2 EOF - Tetapkan izin yang sesuai pada file konfigurasi.
sudo chmod 640 /etc/alloydbomni/*.conf sudo chown postgres:postgres /etc/alloydbomni/*.conf - Buat direktori data untuk kedua instance dan tetapkan kepemilikan yang benar.
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 - Opsional: Tetapkan batas resource untuk setiap instance. Hal ini mencegah satu instance menggunakan semua resource VM. Buat direktori dan file penggantian
systemduntuk kedua instance.Catatan: Batas resource yang digunakan dalam konfigurasi berikut (40%) adalah nilai contoh. Sesuaikan batas berdasarkan workload dan kapasitas VM tertentu Anda.Untukinst1: Untuksudo 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. Melakukan inisialisasi dan menyiapkan database
Lakukan inisialisasi dan siapkan setiap instance database secara terpisah.
- Konfigurasi SELinux ke mode permisif untuk penyiapan.
Perhatian: Menetapkan SELinux ke mode permisif akan menonaktifkan penegakan dan harus digunakan dengan hati-hati. Digunakan dalam codelab ini untuk menyederhanakan penginstalan. Dalam produksi, konfigurasi kebijakan SELinux yang sesuai agar AlloyDB Omni dapat berjalan dalam mode pemberlakuan. Anda dapat mengaktifkan kembali penerapan setelah penyiapan dengan menjalankansudo setenforce 0sudo setenforce 1. - Tentukan sandi yang kuat untuk pengguna administrator
postgresPostgreSQL. Sandi ini digunakan untuk kedua instance dalam codelab ini. Catatan: Penerusan sandi menggunakan variabel lingkungan di command line (misalnya,export PGPASSWORD="YourStrongPassword123!"PGPASSWORD=$PGPASSWORD) digunakan di sini untuk menyederhanakan codelab, tetapi dapat mengekspos sandi dalam listingan proses. Dalam produksi, gunakan metode yang lebih aman seperti file.pgpassatau pengelola rahasia.
Menyiapkan inst1
- Lakukan inisialisasi direktori database untuk
inst1.sudo PGPASSWORD=$PGPASSWORD \ PGDATA=/var/lib/alloydbomni/inst1 \ /usr/lib/postgresql/18/bin/alloydbomni18-setup initdb - Konfigurasi instance untuk memproses port
5433dengan memperbarui filepostgresql.conf-nya.sudo sed -i \ "s/^#*[[:space:]]*port[[:space:]]*=[[:space:]]*[0-9]*/port = 5433/" \ /var/lib/alloydbomni/inst1/postgresql.conf - Siapkan instance database untuk AlloyDB Omni.
sudo PGPASSWORD=$PGPASSWORD \ PGDATA=/var/lib/alloydbomni/inst1 \ PGPORT=5433 \ /usr/lib/postgresql/18/bin/alloydbomni18-setup preparedb
Menyiapkan inst2
- Lakukan inisialisasi direktori database untuk
inst2.sudo PGPASSWORD=$PGPASSWORD \ PGDATA=/var/lib/alloydbomni/inst2 \ /usr/lib/postgresql/18/bin/alloydbomni18-setup initdb - Konfigurasi instance untuk memproses port
5434.sudo sed -i \ "s/^#*[[:space:]]*port[[:space:]]*=[[:space:]]*[0-9]*/port = 5434/" \ /var/lib/alloydbomni/inst2/postgresql.conf - Siapkan instance database.
sudo PGPASSWORD=$PGPASSWORD \ PGDATA=/var/lib/alloydbomni/inst2 \ PGPORT=5434 \ /usr/lib/postgresql/18/bin/alloydbomni18-setup preparedb
8. Mulai layanan AlloyDB Omni
Sekarang Anda dapat memulai layanan systemd untuk kedua instance.
- Untuk mengenali konfigurasi dan penggantian baru, muat ulang konfigurasi pengelola
systemd.sudo systemctl daemon-reload - Aktifkan dan mulai layanan untuk
inst1.sudo systemctl enable alloydbomni18@inst1 sudo systemctl start alloydbomni18@inst1 - Aktifkan dan mulai layanan untuk
inst2.sudo systemctl enable alloydbomni18@inst2 sudo systemctl start alloydbomni18@inst2 - Pastikan kedua layanan aktif dan berjalan.
Pastikan output untuk keduanya menunjukkansudo systemctl status alloydbomni18@inst1 sudo systemctl status alloydbomni18@inst2Active: active (running).
9. Memverifikasi Instance AlloyDB Omni
Pastikan kedua instance berfungsi dengan benar dan independen.
- Hubungkan ke
inst1(port 5433). Anda akan diminta memasukkan sandi yang Anda konfigurasi di bagian Lakukan inisialisasi dan siapkan database./usr/lib/postgresql/18/bin/psql -h localhost -p 5433 -U postgres -W - Jalankan kueri untuk memverifikasi koneksi.
postgres=# SELECT version(); - Putuskan koneksi dari instance.
postgres=# \q - Hubungkan ke
inst2(port 5434)./usr/lib/postgresql/18/bin/psql -h localhost -p 5434 -U postgres -W - Jalankan kueri untuk memverifikasi koneksi.
postgres=# SELECT version(); - Putuskan koneksi dari instance.
postgres=# \q
10. Mengonfigurasi untuk replikasi pglogical
Konfigurasi replikasi logis antara dua instance menggunakan ekstensi pglogical. Dalam skenario ini, inst1 bertindak sebagai penyedia dan inst2 bertindak sebagai pelanggan.
Catatan: Codelab ini menggunakan superuser postgres untuk koneksi replikasi. Di lingkungan produksi, buat pengguna replikasi khusus dengan hak istimewa REPLICATION dan berikan akses hanya ke tabel yang direplikasi.
Mengonfigurasi instance untuk pglogical
- Aktifkan
pglogicaldishared_preload_librariesdan konfigurasi parameter replikasi lainnya dipostgresql.confuntukinst1.# 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 - Konfigurasi setelan untuk
inst2yang Anda konfigurasi untukinst1.# 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 - Untuk menerapkan perubahan konfigurasi, mulai ulang kedua instance.
sudo systemctl restart alloydbomni18@inst1 sudo systemctl restart alloydbomni18@inst2
Menyiapkan peran dan tabel replikasi
- Di
inst1(penyedia, port 5433), buat peran replikasi dan tabel yang akan direplikasi./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; " - Di
inst2(pelanggan, port 5434), buat struktur tabel dan peran yang sama./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; "
Mengonfigurasi node dan langganan pglogical
- Inisialisasi node penyedia pglogical di
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'); " - Lakukan inisialisasi node pelanggan pglogical dan buat langganan di
inst2. Catatan: Setelah membuat langganan, mungkin perlu waktu beberapa saat hingga sinkronisasi awal selesai./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. Memverifikasi replikasi pglogical
Pastikan replikasi berfungsi seperti yang diharapkan dengan menyisipkan data di penyedia dan membuat kueri di pelanggan.
- Pastikan langganan aktif. Mungkin perlu waktu beberapa detik untuk beralih ke
replicating./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'; " - Konfirmasi bahwa output menampilkan
replicatingsebelum Anda melanjutkan. - Masukkan baris pengujian pada penyedia (
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!'); " - Untuk memverifikasi bahwa data telah direplikasi, buat kueri tabel di
inst2. Konfirmasi bahwa Anda dapat melihat baris yang disisipkan di/usr/lib/postgresql/18/bin/psql -h localhost -p 5434 \ -U postgres -d postgres -c "SELECT * FROM replication_test;"inst1.
12. Pembersihan
Bersihkan resource. Pertama, hancurkan instance AlloyDB Omni di VM, lalu hapus resource Google Cloud.
Menghancurkan Instance AlloyDB Omni
Sebelum menghapus VM, Anda dapat membersihkan instance AlloyDB Omni dengan menghentikan dan menonaktifkan layanan, serta menghapus konfigurasi dan datanya.
- Hentikan dan nonaktifkan layanan untuk
inst1, lalu hapus data dan konfigurasinya.sudo systemctl stop alloydbomni18@inst1 sudo systemctl disable alloydbomni18@inst1 sudo rm -rf /var/lib/alloydbomni/inst1 sudo rm -f /etc/alloydbomni/inst1.conf - Hentikan dan nonaktifkan layanan untuk
inst2, lalu hapus data dan konfigurasinya.sudo systemctl stop alloydbomni18@inst2 sudo systemctl disable alloydbomni18@inst2 sudo rm -rf /var/lib/alloydbomni/inst2 sudo rm -f /etc/alloydbomni/inst2.conf - Muat ulang konfigurasi pengelola systemd dan reset unit yang gagal.
sudo systemctl daemon-reload sudo systemctl reset-failed
Membersihkan Resource Google Cloud
Setelah Anda membersihkan instance, hapus VM Compute Engine dan resource lainnya.
- Putuskan koneksi dari sesi SSH.
exit - Hapus instance VM Compute Engine.
gcloud compute instances delete $INSTANCE_NAME --zone=$ZONE --project=$PROJECT --quiet - Hapus aturan firewall.
gcloud compute firewall-rules delete allow-ssh-alloydb-omni --project=$PROJECT --quiet - Hapus Cloud NAT dan Router.
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 - Hapus rute internet default.
gcloud compute routes delete default-internet-route --project=$PROJECT --quiet
13. Selamat
Anda telah berhasil men-deploy dan mengonfigurasi beberapa instance AlloyDB Omni di satu VM Compute Engine.
Yang telah kita bahas
- Cara menyediakan dan menyiapkan VM Compute Engine.
- Cara menginstal RPM AlloyDB Omni.
- Cara mengonfigurasi template
systemduntuk beberapa instance. - Cara menginisialisasi, mengonfigurasi, dan memulai beberapa layanan independen di port yang berbeda.
- Cara memverifikasi independensi setiap instance.
Pelajari lebih lanjut
- Lihat dokumentasi AlloyDB Omni untuk mengetahui informasi selengkapnya tentang penginstalan dan konfigurasi.
- Untuk mengetahui detail tentang ekstensi replikasi yang digunakan dalam codelab ini, lihat dokumentasi pglogical.