如需提高读取吞吐量和可用性,您可以为现有 AlloyDB Omni 服务器创建 AlloyDB Omni 副本服务器。副本服务器提供主数据库服务器的只读克隆。它会持续更新自己的数据,以反映主服务器数据的更改。
以下部分介绍了配置 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"
输出表中,每个连接到主数据库服务器的副本都占一行。
设置复制后,对主数据库服务器中行执行的所有插入、更新和删除操作都会在几秒钟内在副本上变为可读。