

# 为 Aurora PostgreSQL 数据库集群设置逻辑复制
<a name="AuroraPostgreSQL.Replication.Logical.Configure"></a>

设置逻辑复制需要 `rds_superuser` 权限。Aurora PostgreSQL 数据库集群必须配置为使用自定义数据库集群参数组，以便您可以设置必要的参数，详见以下过程。有关更多信息，请参阅 [Amazon Aurora 数据库集群的数据库集群参数组](USER_WorkingWithDBClusterParamGroups.md)。

**为 Aurora PostgreSQL 数据库集群设置 PostgreSQL 逻辑复制**

1. 登录 AWS 管理控制台 并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

1. 在导航窗格中，选择您的 Aurora PostgreSQL 数据库集群。

1. 打开 **Configuration**（配置）选项卡。在实例详细信息中，找到包含**类型**为**数据库集群参数组**的**参数组**链接。

1. 选择此链接以打开与 Aurora PostgreSQL 数据库集群关联的自定义参数。

1. 在 **Parameters**（参数）搜索字段中，键入 `rds` 以查找 `rds.logical_replication` 参数。此参数的原定设置值为 `0`，这意味着它在原定设置情况下处于关闭状态。

1. 选择 **Edit parameters**（编辑参数）以访问属性值，然后从选择器中选择 `1` 以开启该功能。根据您的预期使用情况，您可能还需要更改以下参数的设置。但是，在许多情况下，原定设置值就足够了。
   + `max_replication_slots` – 将此参数设置为至少等于您计划的逻辑复制发布和订阅总数的值。如果您正在使用 AWS DMS，则此参数应至少等于集群中计划的更改数据捕获任务数加上逻辑复制发布和订阅数。
   + `max_wal_senders` 和 `max_logical_replication_workers` – 将这些参数设置为至少与您打算激活的逻辑复制插槽数量或更改数据捕获的活动 AWS DMS 任务数量相等的值。使逻辑复制插槽处于非活动状态可防止 vacuum 从表中删除过时的元组，因此，我们建议您监视复制插槽，并根据需要删除非活动的插槽。
   + `max_worker_processes` – 将此参数设置为至少等于 `max_logical_replication_workers`、`autovacuum_max_workers` 和 `max_parallel_workers` 值的总和的值。在小型数据库实例类上，后台工件进程可能会影响应用程序工作负载，因此，如果将 `max_worker_processes` 设置为高于原定设置值，请监控数据库的性能。（原定设置值是 `GREATEST(${DBInstanceVCPU*2},8}` 的结果，这意味着，在原定设置情况下，这是 8 或数据库实例类的 CPU 等效量的 2 倍，以较大者为准）。
**注意**  
您可以修改客户创建的数据库参数组中的参数值，但不能更改原定设置数据库参数组中的参数值。

1. 选择**保存更改**。

1. 重启 Aurora PostgreSQL 数据库集群的写入器实例，以使更改生效。在 Amazon RDS 控制台中，选择集群的主数据库实例，然后从 **Actions**（操作）菜单中选择 **Reboot**（重启）。

1. 当实例可用时，您可以验证逻辑复制是否已开启，如下所示。

   1. 使用 `psql` 连接到 Aurora PostgreSQL 数据库集群的写入器实例。

      ```
      psql --host=your-db-cluster-instance-1.aws-region.rds.amazonaws.com --port=5432 --username=postgres --password --dbname=labdb
      ```

   1. 使用以下命令验证逻辑复制是否已启用。

      ```
      labdb=> SHOW rds.logical_replication;
       rds.logical_replication
      -------------------------
       on
      (1 row)
      ```

   1. 验证 `wal_level` 设置为 `logical`。

      ```
      labdb=> SHOW wal_level;
        wal_level
      -----------
       logical
      (1 row)
      ```

有关使用逻辑复制使数据库表与来自源 Aurora PostgreSQL 数据库集群的更改保持同步的示例，请参阅 [示例：将逻辑复制与 Aurora PostgreSQL 数据库集群结合使用](AuroraPostgreSQL.Replication.Logical.PostgreSQL-Example.md)。