PostgreSQL 只读副本配置 - Amazon Relational Database Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

PostgreSQL 只读副本配置

RDS for PostgreSQL 使用 PostgreSQL 本机流式复制来创建源数据库实例的只读副本。此只读副本数据库实例是源数据库实例的异步创建的物理副本。该副本是通过在源数据库实例和只读副本之间传输预写日志(WAL)数据的特殊连接创建。有关更多信息,请参阅 PostgreSQL 文档中的流式复制

在源数据库实例上进行更改时,PostgreSQL 会通过此安全连接异步流式传输数据库更改。您可以通过将 ssl 参数设置为 1,来加密从客户端应用程序到源数据库实例或任何只读副本的通信。有关更多信息,请参阅 将 SSL 与 PostgreSQL 数据库实例结合使用

PostgreSQL 使用复制角色执行流式复制。该角色拥有特权,但不能用于修改任何数据。PostgreSQL 使用处理复制的单个过程。

您可以在不影响源数据库实例的操作或用户的情况下创建 PostgreSQL 只读副本。Amazon RDS 为您在源数据库实例和只读副本上设置必要的参数和权限,而不会影响服务。为源数据库实例拍摄快照,该快照用于创建只读副本。如果您在将来某个时间点删除只读副本,则不会发生中断。

您可以从同一区域内的一个源数据库实例创建最多 15 个只读副本。自 RDS for PostgreSQL 14.1 起,您还可以从源数据库实例在链(级联)中创建最多三个级别的只读副本。有关更多信息,请参阅 将级联只读副本用于 RDS for PostgreSQL。在所有情况下,源数据库实例都需要配置自动备份。为此,您可以将数据库实例上的备份保留期设置为非 0 值。有关更多信息,请参阅 创建只读副本

您可以在与源数据库实例相同的 Amazon Web Services 区域中为您的 RDS for PostgreSQL 数据库实例创建只读副本。这称为区域内复制。您还可以在与源数据库实例不同的 Amazon Web Services 区域中创建只读副本。这称为跨区域复制。有关设置跨区域只读副本的更多信息,请参阅在不同的 中创建只读副本Amazon Web Services 区域。根据 RDS for PostgreSQL 版本,支持区域内和跨区域复制过程的各种机制略有不同,如流式复制如何适用于不同的 RDS for PostgreSQL 版本中所述。

为了有效地进行复制,每个只读副本具有的计算和存储资源的量应与源数据库实例的一样多。如果扩展源数据库实例,则还应确保扩展只读副本。

如果 Amazon RDS 从一开始就阻止只读副本,它将覆盖只读副本上的任何不兼容参数。例如,假定源数据库实例上的 max_connections 参数值高于只读副本上的此参数值。在这种情况下,Amazon RDS 将只读副本上的参数更新为与源数据库实例上的参数相同的值。

RDS for PostgreSQL 只读副本可以访问通过源数据库实例上的外部数据包装器(FDW)提供的外部数据库。例如,假设您的 RDS for PostgreSQL 数据库实例使用 mysql_fdw 包装器从 RDS for MySQL 访问数据。如果是这样,只读副本也可以访问该数据。其他支持的 FDW 包括 oracle_fdwpostgres_fdwtds_fdw。有关更多信息,请参阅 使用 Amazon RDS for PostgreSQL 支持的外部数据包装器

将 RDS for PostgreSQL 只读副本用于多可用区配置

您可从单可用区或多可用区数据库实例中创建只读副本。您可以借助备用副本,使用多可用区部署提高关键数据的持久性和可用性。备用副本是专用的只读副本,可以在源数据库发生故障转移时承担工作负载。您不能使用备用副本来提供读取流量。但是,可以从大流量、多可用区数据库实例创建只读副本以分流只读查询的负载。要了解关于多可用区部署的更多信息,请参阅 Amazon RDS 的多可用区数据库实例部署

如果多可用区部署的源数据库实例故障转移到备用可用区,则关联的只读副本将切换为使用备用可用区(现在为主可用区)作为其复制源。只读副本可能需要重新启动,具体取决于 RDS for PostgreSQL 版本,如下所示:

  • PostgreSQL 13 及更高版本 – 不需要重新启动。只读副本将自动与新的主副本同步。但是,在某些情况下,您的客户端应用程序可能会缓存只读副本的域名服务(DNS)详细信息。如果是这样,请将生存时间(TTL)值设置为小于 30 秒。这样做可以防止只读副本继续留在陈旧的 IP 地址(因此可以防止它与新的主副本同步)。要了解有关此用法和其他最佳实践的更多信息,请参阅Amazon RDS 基本操作指导方针

  • PostgreSQL 12 和所有早期版本 – 只读副本在故障转移到备用副本后自动重新启动,因为备用副本(现为主)具有不同的 IP 地址和不同的实例名称。重启操作会将只读副本与新的主副本同步。

要详细了解失效转移,请参阅对 Amazon RDS 的多可用区数据库实例执行失效转移。要了解关于只读副本如何在多可用区部署中工作的更多信息,请参阅 使用数据库实例只读副本

要为只读副本提供失效转移支持,您可以将只读副本创建为多可用区数据库实例,以便 Amazon RDS 在另一个可用区(AZ)中创建备用副本。创建您的只读副本作为多可用区数据库实例与源数据库是否为多可用区数据库实例无关。