创建只读副本

选择文档版本:

如需提高读取吞吐量和可用性,您可以为现有的 AlloyDB Omni 服务器创建 AlloyDB Omni 副本服务器。副本服务器提供主数据库服务器的只读克隆。它会持续更新自己的数据,以反映主服务器数据的变化。

以下部分提供了相关步骤,用于配置 AlloyDB Omni 主服务器以进行复制、配置副本服务器以及验证主服务器上的复制状态。

准备工作

在继续操作之前,请使用 RPM 软件包安装和设置 AlloyDB Omni。如需了解详情,请参阅 使用 RPM 安装 AlloyDB Omni。

配置主服务器以进行复制

  1. 更新主服务器主机的网络或防火墙设置,以便允许通过主服务器的 Postgres 端口从副本服务器主机发送入站流量。

  2. 创建复制用户:

    psql -h localhost -U postgres -c "create user REPLICA_USER with replication password 'PASSWORD';
    grant pg_read_all_settings to REPLICA_USER;"
  3. 在主服务器的 /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:主服务器的数据目录路径。
  4. 重启主服务器:

    sudo systemctl restart alloydbomni18

创建和配置副本服务器

如需创建和配置 AlloyDB Omni 副本服务器,请完成以下步骤:

  1. 确保副本与主服务器之间建立了网络连接:

    ping SOURCE_IP

    将 SOURCE_IP 替换为要从中复制的 AlloyDB Omni 主实例的 IP 地址。

  2. 确保副本可以连接到主服务器:

    psql "host=SOURCE_IP user=REPLICA_USER replication=1" -c "IDENTIFY_SYSTEM;"

    输出应类似如下所示:

           systemid       | timeline |  xlogpos  | dbname
     ---------------------+----------+-----------+--------
      7376500460465963036 |        1 | 0/454B670 |
      (1 row)
    
  3. 副本必须在磁盘上具有永久性存储位置:

    sudo -u postgres pg_basebackup \
      --pgdata=DATA_DIR \
      --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:复制槽名称的标签。
    • DATA_DIR:副本服务器的数据目录路径。
  4. 启动副本实例:

    sudo systemctl start alloydbomni18

验证主服务器上的复制状态

如需验证复制是否已正确配置,请在主服务器的主机上运行以下命令:

psql -h localhost -U postgres -c "select * from pg_stat_replication"

对于连接到主数据库服务器的每个副本,输出表中都包含对应的一行。

设置复制后,几秒钟内便可在副本上读取对主数据库服务器中的行执行的所有插入、更新和删除操作。

使用读取池扩缩读取工作负载

如需扩缩报告和只读要求,您可以预配多个异步流式复制副本以形成读取池。您可以通过直接连接到副本节点的 IP 地址来访问读取池。

准备工作

确保您已在主服务器上使用 REPLICATION 权限创建了 REPLICA_USER。您还必须确保主服务器的 pg_hba.conf 文件已配置为允许来自副本节点的 IP 地址的复制连接。

预配多个只读副本

如需创建多个副本,请对池中所需的每个副本节点重复执行这些步骤。

在每个副本节点上,执行 pg_basebackup 命令,并确保为每个节点提供唯一的复制槽名称:

  sudo -u postgres pg_basebackup \
   --pgdata=DATA_DIR \
   --checkpoint=fast \
   --host="SOURCE_IP" \
   --port="SOURCE_PORT" \
   --username=REPLICA_USER \
   --create-slot \
   --write-recovery-conf \
   --slot="UNIQUE_SLOT_NAME_PER_NODE"
   ```
Once the backup is complete, start the database service on each replica:
  ```posix-terminal
  sudo systemctl start alloydbomni18