配置外部副本

本页面介绍了如何使用 pglogical 扩展程序logical decoding 配置复制到 Cloud SQL 外部副本的 Cloud SQL 实例。

如需详细了解复制,请参阅 Cloud SQL 中的复制简介

设置外部副本配置

准备工作

在开始此任务之前,您必须有一个 Cloud SQL 实例和一个符合外部副本要求的外部 PostgreSQL 实例。

源实例要求

外部读取副本的源实例必须是主实例或独立实例。您无法将 Cloud SQL 读取副本用作外部读取副本的源实例。有时,读取副本会根据其主实例的磁盘克隆重新创建,并且读取副本无法维护其到外部读取副本的复制状态。

配置主实例

  1. 在 Google Cloud 控制台中前往“Cloud SQL 实例”页面。
  2. 为外部副本的 IP 地址启用对主实例的访问权限。

    如需了解如何启用 IP 访问权限,请参阅为 IP 连接配置访问权限

  3. 记录主实例的公共 IP 地址和公共传出 IP 地址以备后用。您可以在实例的概览页面上找到这些值。
  4. 点击右上角的 Cloud Shell 图标 ()。
  5. 在 Cloud Shell 提示符处,使用内置的 PostgreSQL 客户端连接到您的主实例:
       
    gcloud sql connect PRIMARY_INSTANCE_NAME \
    --user=postgres
       
       
  6. 输入您的根密码。 您随后应该会看到 postgres 提示符。
  7. 使用 REPLICATION 特性创建 PostgreSQL 用户。
    CREATE USER REPLICATION_USER WITH REPLICATION IN ROLE cloudsqlsuperuser LOGIN PASSWORD 'REPLICATION_USER_PASSWORD';
       
  8. 安装并配置 pglogical 扩展程序:

    修改 Cloud SQL 实例以添加和设置以下标志:

    • cloudsql.enable_pglogical
    • cloudsql.logical_decoding
    • max_replication_slots
    • max_worker_processes
    • max_wal_senders
    • 如需详细了解这些标志,请参阅 PostgreSQL 资源页面。

    重启数据库,然后登录并更改为 Replication_user,然后创建 pglogical 扩展程序:

    CREATE EXTENSION pglogical;
       
  9. 创建 pglogical 节点:

    pglogical _node_ 表示物理 PostgreSQL 实例,并存储该实例的连接详细信息。

    SELECT pglogical.create_node(
      node_name := 'provider',
      dsn := 'host=PRIMARY_PUBLIC_IP_ADDRESS port=5432 dbname=DATABASE_NAME user=REPLICATION_USER password=REPLICATION_USER_PASSWORD'
       );
       
  10. 如果要开始使用新数据库,请在主实例和副本实例上创建相同的数据库和表。例如:
    CREATE DATABASE test;
    
    \connect test;
    
    CREATE TABLE replica_test (id SERIAL PRIMARY KEY, data text);
    INSERT INTO replica_test (data) VALUES ('apple'), ('banana'), ('cherry');
    
    CREATE EXTENSION pglogical;
  11. 如果主实例上已有数据库,您必须在副本上创建该数据库。为此,请将主实例中的数据库导出到一个 Cloud Storage 存储桶,并将其导入副本。详细了解如何将 Cloud SQL 中的数据导出到 Cloud Storage 中的 SQL 转储文件
  12. 为了支持将不同的数据集复制到不同的目标位置,pglogical 提供了复制集的概念。例如,如需将表添加到默认复制集,请执行以下操作:
    SELECT pglogical.replication_set_add_table('default', 'replica_test', true);
       

配置外部副本

  1. 创建一个特殊用户以用于实现复制功能并授予复制权限:
    CREATE USER REPLICATION_USER WITH REPLICATION SUPERUSER LOGIN PASSWORD 'REPLICATION_USER_PASSWORD';
       
  2. 如果要开始使用新数据库,请使用 REPLICATION_USER 在主实例和副本实例上创建相同的数据库和表。例如:
    CREATE DATABASE test;
    \connect test;
    CREATE TABLE replica_test (id SERIAL PRIMARY KEY, data text);
    INSERT INTO replica_test (data) VALUES ('apple'