以下各節將說明如何設定 AlloyDB Omni 主要伺服器以進行複製、設定副本伺服器,以及驗證主要伺服器上的複製狀態。
詳情請參閱「在 Kubernetes 上安裝 AlloyDB Omni」。
設定主要伺服器以進行複製
更新主要伺服器主機的網路或防火牆設定,允許從副本伺服器主機透過主要伺服器的 Postgres 連接埠傳入流量。
建立複製使用者:
Docker
docker exec CONTAINER_NAME psql -h localhost -U postgres -c "create user REPLICA_USER with replication password 'PASSWORD'"
更改下列內容:
REPLICA_USER
:副本使用者的名稱。PASSWORD
:副本使用者的密碼。CONTAINER_NAME
:您在安裝 AlloyDB Omni 時指派給容器的名稱。
Podman
podman exec CONTAINER_NAME psql -h localhost -U postgres -c "create user REPLICA_USER with replication password 'PASSWORD'"
更改下列內容:
REPLICA_USER
:副本使用者的名稱。PASSWORD
:副本使用者的密碼。CONTAINER_NAME
:您在安裝 AlloyDB Omni 時指派給容器的名稱。
在主要伺服器的
/DATA_DIR/pg_hba.conf
檔案中,於檔案中現有的host all all all scram-sha-256
之前新增下列幾行:host alloydbmetadata alloydbmetadata IP_RANGE trust host replication REPLICA_USER IP_RANGE scram-sha-256
更改下列內容:
IP_RANGE
:副本機所在子網路的 IP 範圍 (以 CIDR 標記法表示)。例如:203.0.113.0/24
。DATA_DIR
:主要伺服器的資料目錄路徑。
重新啟動主要伺服器:
Docker
docker restart CONTAINER_NAME
Podman
podman restart CONTAINER_NAME
建立及設定副本伺服器
如要建立及設定 AlloyDB Omni 副本伺服器,請完成下列步驟:
確認副本與主要伺服器之間有網路連線:
ping SOURCE_IP
將
SOURCE_IP
替換為要從中複製資料的 AlloyDB Omni 主要執行個體 IP 位址。確認副本可以連線至主要伺服器:
Docker
docker run -it --rm google/alloydbomni psql "host=SOURCE_IP user=REPLICA_USER replication=1" -c "IDENTIFY_SYSTEM;"
Podman
podman run -it --rm google/alloydbomni psql "host=SOURCE_IP user=REPLICA_USER replication=1" -c "IDENTIFY_SYSTEM;"
輸出內容應如下所示:
systemid | timeline | xlogpos | dbname ---------------------+----------+-----------+-------- 7376500460465963036 | 1 | 0/454B670 | (1 row)
副本必須在磁碟上具有永久儲存位置:
Docker
mkdir alloydb && docker run --rm -it \ -e PGDATA=/var/lib/postgresql/data/pgdata \ -v "$PWD/alloydb":/var/lib/postgresql/data \ -p 5432:5432 \ --user $(id -u):$(id -g) \ google/alloydbomni \ /usr/lib/postgresql/15/bin/pg_basebackup \ --pgdata=/var/lib/postgresql/data/pgdata \ --checkpoint=fast \ --host="SOURCE_IP" \ --port="SOURCE_PORT" \ --username=REPLICA_USER \ --create-slot \ --write-recovery-conf \ --slot="SLOT_NAME"
更改下列內容:
SOURCE_PORT
:主要 AlloyDB Omni 執行個體的 TCP 通訊埠,用於複製資料。如未提供這個值,AlloyDB Omni 會套用預設值5432
。SLOT_NAME
:複製運算單元名稱的標籤。
Podman
mkdir alloydb && podman run --rm -it \ -e PGDATA=/var/lib/postgresql/data/pgdata \ -v "$PWD/alloydb":/var/lib/postgresql/data \ -p 5432:5432 \ --user $(id -u):$(id -g) \ google/alloydbomni \ /usr/lib/postgresql/15/bin/pg_basebackup \ --pgdata=/var/lib/postgresql/data/pgdata \ --checkpoint=fast \ --host="SOURCE_IP" \ --port="SOURCE_PORT" \ --username=REPLICA_USER \ --create-slot \ --write-recovery-conf \ --slot="SLOT_NAME"
更改下列內容:
SOURCE_PORT
:主要 AlloyDB Omni 執行個體的 TCP 通訊埠,用於複製資料。如未提供這個值,AlloyDB Omni 會套用預設值5432
。SLOT_NAME
:複製運算單元名稱的標籤。
啟動備用資源執行個體:
Docker
docker run --detach \ --name pg-service \ -e POSTGRES_PASSWORD=a \ -e PGDATA=/var/lib/postgresql/data/pgdata \ -v "$PWD/alloydb":/var/lib/postgresql/data \ -v /dev/shm:/dev/shm \ -p 5432:5432 \ --user $(id -u):$(id -g) \ google/alloydbomni
Podman
podman run --detach \ --name pg-service \ -e POSTGRES_PASSWORD=a \ -e PGDATA=/var/lib/postgresql/data/pgdata \ -v "$PWD/alloydb":/var/lib/postgresql/data \ -v /dev/shm:/dev/shm \ -p 5432:5432 \ --user $(id -u):$(id -g) \ google/alloydbomni
在主要伺服器上驗證複製狀態
如要確認複寫設定是否正確,請在主要伺服器的主機上執行下列指令:
Docker
docker exec -it CONTAINER_NAME psql -h localhost -U postgres -c "select * from pg_stat_replication"
Podman
podman exec -it CONTAINER_NAME psql -h localhost -U postgres -c "select * from pg_stat_replication"
輸出資料表中的每個資料列,都代表一個連線至主要資料庫伺服器的副本。
設定複寫後,主要資料庫伺服器中所有插入、更新及刪除的資料列,都會在幾秒內顯示在副本中。