1. Wprowadzenie
To ćwiczenie pokazuje, jak skonfigurować replikację logiczną między niezależnymi instancjami AlloyDB Omni. Wdrożysz kilka instancji AlloyDB Omni na jednej maszynie wirtualnej Compute Engine i skonfigurujesz między nimi replikację za pomocą rozszerzenia pglogical.
Uruchamianie wielu instancji na jednym węźle jest przydatne w przypadku tworzenia, testowania lub symulowania środowisk replikacji. Po ukończeniu tego ćwiczenia będziesz mieć działającą konfigurację replikacji z jedną instancją działającą jako dostawca i drugą jako subskrybent.
Wymagania wstępne
- Dostęp do projektu Google Cloud i Cloud Shell z konsoli Google Cloud.
- Zainstalowany i skonfigurowany pakiet SDK Google Cloud (
gcloud). Szczegółowe informacje o instalowaniu gcloud znajdziesz w artykule gcloud-install.
Czego się nauczysz
- Jak utworzyć i przygotować maszynę wirtualną Compute Engine dla wielu instancji AlloyDB Omni za pomocą
gcloud. - Jak zainstalować pakiety RPM AlloyDB Omni.
- Jak skonfigurować i zainicjować wiele instancji AlloyDB Omni za pomocą szablonów
systemd. - Jak skonfigurować replikację logiczną między instancjami AlloyDB Omni za pomocą
pglogical. - Jak zweryfikować replikację przez replikowanie danych od dostawcy do subskrybenta.
Czego potrzebujesz
- Uzyskaj link URL do pakietów RPM AlloyDB Omni. Link zostanie wysłany na Twój adres e-mail, w tym link do serwera URL repozytorium. Zainicjuj tę zmienną środowiskową, aby adres URL był gotowy do użycia podczas ćwiczeń z programowania.
export ALLOYDB_OMNI_REPOSITORY_URL="..." - działający terminal z dostępem do Google Cloud; Możesz do tego użyć Cloud Shell.
2. Konfiguracja i wymagania
Konfigurowanie projektu
Tworzenie projektu Google Cloud
- W konsoli Google Cloud na stronie wyboru projektu wybierz lub utwórz projekt Google Cloud.
- Sprawdź, czy w projekcie Cloud włączone są płatności. Dowiedz się, jak sprawdzić, czy w projekcie są włączone płatności.
Uruchamianie Cloud Shell
Chociaż możesz zdalnie korzystać z Google Cloud na laptopie, w tym ćwiczeniu użyjesz Google Cloud Shell, czyli środowiska wiersza poleceń działającego w chmurze.

- Otwórz konsolę Google Cloud i kliknij ikonę Cloud Shell na pasku narzędzi w prawym górnym rogu.Cloud Shell możesz też otworzyć w jeden z tych sposobów:
- Jeśli używasz konsoli Google Cloud, naciśnij G, a potem S.
- Kliknij ten link.
Udostępnienie środowiska Cloud Shell i połączenie się z nim zajmuje zwykle kilka chwil. Po zakończeniu tej operacji zobaczysz dane wyjściowe podobne do tych:

3. Tworzenie maszyny wirtualnej Compute Engine
W tej sekcji utworzysz jedną maszynę wirtualną Compute Engine za pomocą narzędzia wiersza poleceń gcloud. Użyj obrazu Rocky Linux 9, który jest w pełni zgodny z pakietami RPM AlloyDB Omni.
- Zdefiniuj zmienne środowiskowe dla identyfikatora projektu, nazwy maszyny wirtualnej, strefy i regionu.
export PROJECT="your-project-id" export INSTANCE_NAME="alloydb-omni-multi-vm" export ZONE="us-central1-c" export REGION="us-central1" - Zaloguj się, używając konta Google Cloud, i skonfiguruj domyślny projekt.
gcloud auth login gcloud config set project $PROJECT - Aby zezwolić na połączenia SSH z maszyną wirtualną za pomocą Identity-Aware Proxy (IAP), utwórz regułę zapory sieciowej.
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" - Ponieważ maszyna wirtualna jest tworzona bez publicznego adresu IP, skonfiguruj router Cloud Router i bramę Cloud NAT, aby umożliwić maszynie wirtualnej dostęp do zewnętrznych repozytoriów pakietów i pobieranie wymaganego oprogramowania.
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 - Sprawdź, czy sieć prywatnego środowiska wirtualnego w chmurze (VPC) ma prawidłową domyślną trasę bramy internetowej. Ta trasa jest wymagana, aby usługa Cloud NAT mogła przekazywać ruch wychodzący do internetu.
gcloud compute routes create default-internet-route \ --project=$PROJECT \ --network=default \ --destination-range=0.0.0.0/0 \ --next-hop-gateway=default-internet-gateway - Utwórz instancję maszyny wirtualnej Compute Engine o wymaganych specyfikacjach (16 procesorów wirtualnych, 20 GB zrównoważonego dysku stałego, Rocky Linux 9). Aby zwiększyć bezpieczeństwo, użyj flagi
--no-address, aby mieć pewność, że maszynie wirtualnej nie zostanie przypisany publiczny adres IP.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 - Po utworzeniu maszyny wirtualnej sprawdź jej stan.
gcloud compute instances list --filter="name=$INSTANCE_NAME" --project=$PROJECT
4. Przygotowywanie maszyny wirtualnej
W tej sekcji połączysz się z nowo utworzoną maszyną wirtualną i przygotujesz środowisko systemu operacyjnego.
- Połącz się z maszyną wirtualną przez SSH za pomocą IAP. Ponieważ maszyna wirtualna nie ma publicznego adresu IP,
gcloudautomatycznie tuneluje połączenie SSH przez IAP.gcloud compute ssh $INSTANCE_NAME --zone=$ZONE --project=$PROJECT --tunnel-through-iap - Zdefiniuj zmienną środowiskową dla podstawowego katalogu danych.
export BASE_PGDATA="/var/lib/alloydbomni" - Utwórz podstawowy katalog danych.
sudo mkdir -p $BASE_PGDATA - Zainstaluj pakiet
policycoreutils-python-utils, aby można było skonfigurować zasady SELinux.sudo dnf install -y policycoreutils-python-utils
5. Zainstaluj AlloyDB Omni
Po przygotowaniu maszyny wirtualnej możesz skonfigurować repozytorium pakietów i zainstalować pakiet RPM AlloyDB Omni.
- Skonfiguruj repozytorium YUM na maszynie wirtualnej, tworząc plik konfiguracji repozytorium. Zastąp
$ALLOYDB_OMNI_REPOSITORY_URLotrzymanym adresem URL.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 - Zaktualizuj pamięć podręczną YUM.
sudo yum makecache - Zainstaluj wersję 18 pakietu RPM AlloyDB Omni.
sudo dnf install -y alloydbomni18
6. Konfigurowanie wielu instancji
W tej sekcji skonfiguruj 2 instancje: inst1 i inst2.
- Aby obsługiwać wiele instancji, utwórz
systemdplik usługi szablonualloydbomni18@.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 - Ponownie wczytaj konfigurację menedżera
systemd, aby rozpoznać nową usługę szablonu.sudo systemctl daemon-reload - Utwórz katalog konfiguracji instancji AlloyDB Omni.
sudo mkdir -p /etc/alloydbomni - Skonfiguruj katalog danych dla
inst1.sudo tee /etc/alloydbomni/inst1.conf << EOF PGDATA=/var/lib/alloydbomni/inst1 EOF - Skonfiguruj katalog danych dla
inst2.sudo tee /etc/alloydbomni/inst2.conf << EOF PGDATA=/var/lib/alloydbomni/inst2 EOF - Ustaw odpowiednie uprawnienia do plików konfiguracyjnych.
sudo chmod 640 /etc/alloydbomni/*.conf sudo chown postgres:postgres /etc/alloydbomni/*.conf - Utwórz katalogi danych dla obu instancji i ustaw prawidłową własność.
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 - Opcjonalnie: ustaw limity zasobów dla każdej instancji. Zapobiega to wykorzystywaniu wszystkich zasobów maszyny wirtualnej przez jedną instancję. Utwórz
systemdkatalogi i pliki zastąpień dla obu instancji.Uwaga: limity zasobów użyte w konfiguracjach poniżej (40%) to wartości przykładowe. Dostosuj limity do konkretnego zbioru zadań i pojemności maszyny wirtualnej.W przypadkuinst1: Dlasudo 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. Inicjowanie i przygotowywanie baz danych
Zainicjuj i przygotuj każdą instancję bazy danych osobno.
- Na potrzeby konfiguracji ustaw SELinux w trybie zezwalającym.
Ostrzeżenie: ustawienie SELinux w trybie zezwalającym wyłącza egzekwowanie i należy go używać z ostrożnością. W tym ćwiczeniu jest on używany, aby uprościć instalację. W środowisku produkcyjnym skonfiguruj odpowiednie zasady SELinux, aby AlloyDB Omni działał w trybie egzekwowania. Po skonfigurowaniu możesz ponownie włączyć egzekwowanie, uruchamiając poleceniesudo setenforce 0sudo setenforce 1. - Zdefiniuj silne hasło dla użytkownika administratora PostgreSQL
postgres. To hasło jest używane w obu instancjach w tym laboratorium. Uwaga: przekazywanie haseł za pomocą zmiennych środowiskowych w wierszu poleceń (np.export PGPASSWORD="YourStrongPassword123!"PGPASSWORD=$PGPASSWORD) jest tu używane dla uproszczenia w tym samouczku, ale może ujawnić hasło na listach procesów. W środowisku produkcyjnym używaj bezpieczniejszych metod, takich jak plik.pgpasslub menedżer obiektów tajnych.
Konfigurowanie inst1
- Zainicjuj katalog bazy danych dla
inst1.sudo PGPASSWORD=$PGPASSWORD \ PGDATA=/var/lib/alloydbomni/inst1 \ /usr/lib/postgresql/18/bin/alloydbomni18-setup initdb - Skonfiguruj instancję tak, aby nasłuchiwała na porcie
5433, aktualizując plikpostgresql.conf.sudo sed -i \ "s/^#*[[:space:]]*port[[:space:]]*=[[:space:]]*[0-9]*/port = 5433/" \ /var/lib/alloydbomni/inst1/postgresql.conf - Przygotuj instancję bazy danych do AlloyDB Omni.
sudo PGPASSWORD=$PGPASSWORD \ PGDATA=/var/lib/alloydbomni/inst1 \ PGPORT=5433 \ /usr/lib/postgresql/18/bin/alloydbomni18-setup preparedb
Konfigurowanie inst2
- Zainicjuj katalog bazy danych dla
inst2.sudo PGPASSWORD=$PGPASSWORD \ PGDATA=/var/lib/alloydbomni/inst2 \ /usr/lib/postgresql/18/bin/alloydbomni18-setup initdb - Skonfiguruj instancję tak, aby nasłuchiwała na porcie
5434.sudo sed -i \ "s/^#*[[:space:]]*port[[:space:]]*=[[:space:]]*[0-9]*/port = 5434/" \ /var/lib/alloydbomni/inst2/postgresql.conf - Przygotuj instancję bazy danych.
sudo PGPASSWORD=$PGPASSWORD \ PGDATA=/var/lib/alloydbomni/inst2 \ PGPORT=5434 \ /usr/lib/postgresql/18/bin/alloydbomni18-setup preparedb
8. Uruchamianie usług AlloyDB Omni
Teraz możesz uruchomić usługi systemd na obu instancjach.
- Aby rozpoznać nową konfigurację i zastąpienia, ponownie załaduj konfigurację menedżera
systemd.sudo systemctl daemon-reload - Włącz i uruchom usługę
inst1.sudo systemctl enable alloydbomni18@inst1 sudo systemctl start alloydbomni18@inst1 - Włącz i uruchom usługę
inst2.sudo systemctl enable alloydbomni18@inst2 sudo systemctl start alloydbomni18@inst2 - Sprawdź, czy obie usługi są aktywne i działają.
Sprawdź, czy w danych wyjściowych obu poleceń widnieje wartośćsudo systemctl status alloydbomni18@inst1 sudo systemctl status alloydbomni18@inst2Active: active (running).
9. Weryfikowanie instancji AlloyDB Omni
Sprawdź, czy oba wystąpienia działają prawidłowo i niezależnie od siebie.
- Połącz się z serwerem
inst1(port 5433). Wyświetli się prośba o podanie hasła skonfigurowanego w sekcji Inicjowanie i przygotowywanie baz danych./usr/lib/postgresql/18/bin/psql -h localhost -p 5433 -U postgres -W - Uruchom zapytanie, aby zweryfikować połączenie.
postgres=# SELECT version(); - Odłącz się od instancji.
postgres=# \q - Połącz się z serwerem
inst2(port 5434)./usr/lib/postgresql/18/bin/psql -h localhost -p 5434 -U postgres -W - Uruchom zapytanie, aby zweryfikować połączenie.
postgres=# SELECT version(); - Odłącz się od instancji.
postgres=# \q
10. Konfigurowanie replikacji pglogical
Skonfiguruj replikację logiczną między 2 instancjami za pomocą rozszerzenia pglogical. W tym przypadku inst1 jest dostawcą, a inst2 – subskrybentem.
Uwaga: w tym samouczku do połączeń replikacji używamy postgres superużytkownika. W środowisku produkcyjnym utwórz dedykowanego użytkownika replikacji z uprawnieniami REPLICATION i przyznaj mu dostęp tylko do replikowanych tabel.
Konfigurowanie instancji na potrzeby pglogical
- Włącz
pglogicalwshared_preload_librariesi skonfiguruj inne parametry replikacji wpostgresql.confdlainst1.# 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 - Skonfiguruj ustawienia dla
inst2, które zostały skonfigurowane dlainst1.# 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 - Aby zastosować zmiany konfiguracji, uruchom ponownie obie instancje.
sudo systemctl restart alloydbomni18@inst1 sudo systemctl restart alloydbomni18@inst2
Konfigurowanie ról i tabel replikacji
- Na serwerze
inst1(dostawca, port 5433) utwórz rolę replikacji i tabelę do replikacji./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; " - Na
inst2(subskrybent, port 5434) utwórz tę samą rolę i strukturę tabeli./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; "
Konfigurowanie węzłów pglogical i subskrypcji
- Zainicjuj węzeł dostawcy pglogical na serwerze
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'); " - Zainicjuj węzeł subskrybenta pglogical i utwórz subskrypcję na
inst2. Uwaga: po utworzeniu subskrypcji może minąć chwila, zanim zakończy się początkowa synchronizacja./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. Weryfikacja replikacji pglogical
Sprawdź, czy replikacja działa zgodnie z oczekiwaniami, wstawiając dane u dostawcy i wysyłając do niego zapytanie u subskrybenta.
- Sprawdź, czy subskrypcja jest aktywna. Przejście do stanu
replicatingmoże potrwać kilka sekund./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'; " - Zanim przejdziesz dalej, sprawdź, czy w danych wyjściowych znajduje się
replicating. - Wstaw wiersz testowy u dostawcy (
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!'); " - Aby sprawdzić, czy dane zostały zreplikowane, wykonaj zapytanie na tabeli w
inst2. Sprawdź, czy wstawiony wiersz jest widoczny w arkuszu/usr/lib/postgresql/18/bin/psql -h localhost -p 5434 \ -U postgres -d postgres -c "SELECT * FROM replication_test;"inst1.
12. Czyszczenie
Zwolnij miejsce, usuwając zasoby. Najpierw zniszcz instancje AlloyDB Omni na maszynie wirtualnej, a potem usuń zasoby Google Cloud.
Usuwanie instancji AlloyDB Omni
Zanim usuniesz maszynę wirtualną, możesz zwolnić miejsce w instancjach AlloyDB Omni, zatrzymując i wyłączając usługi oraz usuwając ich konfigurację i dane.
- Zatrzymaj i wyłącz usługę
inst1oraz usuń jej dane i konfigurację.sudo systemctl stop alloydbomni18@inst1 sudo systemctl disable alloydbomni18@inst1 sudo rm -rf /var/lib/alloydbomni/inst1 sudo rm -f /etc/alloydbomni/inst1.conf - Zatrzymaj i wyłącz usługę
inst2oraz usuń jej dane i konfigurację.sudo systemctl stop alloydbomni18@inst2 sudo systemctl disable alloydbomni18@inst2 sudo rm -rf /var/lib/alloydbomni/inst2 sudo rm -f /etc/alloydbomni/inst2.conf - Ponownie wczytaj konfigurację menedżera systemd i zresetuj jednostki, w przypadku których wystąpił błąd.
sudo systemctl daemon-reload sudo systemctl reset-failed
Zwalnianie miejsca w zasobach Google Cloud
Po zwolnieniu miejsca w instancjach usuń maszynę wirtualną Compute Engine i inne zasoby.
- Odłącz się od sesji SSH.
exit - Usuń instancję maszyny wirtualnej Compute Engine.
gcloud compute instances delete $INSTANCE_NAME --zone=$ZONE --project=$PROJECT --quiet - Usuń regułę zapory sieciowej.
gcloud compute firewall-rules delete allow-ssh-alloydb-omni --project=$PROJECT --quiet - Usuń Cloud NAT i 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 - Usuń domyślną trasę internetową.
gcloud compute routes delete default-internet-route --project=$PROJECT --quiet
13. Gratulacje
Udało Ci się wdrożyć i skonfigurować wiele instancji AlloyDB Omni na jednej maszynie wirtualnej Compute Engine.
Omówione zagadnienia
- Jak udostępnić i przygotować maszynę wirtualną Compute Engine.
- Jak zainstalować pakiety RPM AlloyDB Omni.
- Jak skonfigurować
systemdszablony dla wielu instancji. - Jak zainicjować, skonfigurować i uruchomić wiele niezależnych usług na różnych portach.
- Jak sprawdzić niezależność każdej instancji.
Więcej informacji
- Więcej informacji o instalacji i konfiguracji znajdziesz w dokumentacji AlloyDB Omni.
- Szczegółowe informacje o rozszerzeniu replikacji używanym w tym laboratorium znajdziesz w dokumentacji pglogical.