

# 在 Aurora PostgreSQL 中使用本地写入转发
<a name="aurora-postgresql-write-forwarding-understanding"></a>

使用以下部分，您可以检查数据库集群是否启用了本地写入转发，查看兼容性注意事项，并查看可配置参数和身份验证设置。这些信息详细介绍了如何有效利用 Aurora PostgreSQL 中的本地写入转发功能。

**注意**  
当使用本地写入转发的集群中的写入器实例重启时，使用本地写入转发的读取器实例上任何活跃的转发事务和查询都将自动关闭。在写入器实例再次可用后，您可以重试这些事务。

## 检查数据库集群是否启用了本地写入转发
<a name="aurora-postgresql-write-forwarding-describing"></a>

要确定是否可以在数据库集群中使用本地写入转发，请确认该集群的属性 `LocalWriteForwardingStatus` 是否设置为 `enabled`。

在 AWS 管理控制台中，在集群详细信息页面的**配置**选项卡上，您可以看到**本地只读副本写入转发**的状态为**已启用**。

要查看所有集群的本地写入转发设置的状态，请运行以下 AWS CLI 命令。

**Example**  

```
aws rds describe-db-clusters \
--query '*[].{DBClusterIdentifier:DBClusterIdentifier,LocalWriteForwardingStatus:LocalWriteForwardingStatus}'

[
{
"LocalWriteForwardingStatus": "enabled",
"DBClusterIdentifier": "write-forwarding-test-cluster-1"
},
{
"LocalWriteForwardingStatus": "disabled",
"DBClusterIdentifier": "write-forwarding-test-cluster-2"
},
{
"LocalWriteForwardingStatus": "requested",
"DBClusterIdentifier": "test-global-cluster-2"
},
{
"LocalWriteForwardingStatus": "null",
"DBClusterIdentifier": "aurora-postgresql-v2-cluster"
}
]
```

对于 `LocalWriteForwardingStatus`，数据库集群可以具有以下值：
+ `disabled` – 本地写入转发已禁用。
+ `disabling` – 正在禁用本地写入转发。
+ `enabled` – 本地写入转发已启用。
+ `enabling` – 正在启用本地写入转发。
+ `null` – 本地写入转发不适用于此数据库集群。
+ `requested` – 已请求本地写入转发，但尚未激活。

## 写入转发的默认参数设置
<a name="aurora-postgresql-write-forwarding-params"></a>

Aurora 集群参数组包含本地写入转发功能的设置。由于这些是集群参数，因此每个集群中的所有数据库实例对于这些变量具有相同的值。下表汇总了有关这些参数的详细信息，表后附有使用说明。


| 参数 | 范围 | 类型 | 默认值 | 有效值 | 
| --- | --- | --- | --- | --- | 
| apg\$1write\$1forward.connect\$1timeout | 会话 | 秒 | 30 | 0–2147483647 | 
| apg\$1write\$1forward.consistency\$1mode | Session | enum | 会话 | SESSION、EVENTUAL、GLOBAL 和 OFF | 
| apg\$1write\$1forward.idle\$1in\$1transaction\$1session\$1timeout | 会话 | 毫秒 | 86400000 | 0–2147483647 | 
| apg\$1write\$1forward.idle\$1session\$1timeout | 会话 | 毫秒 | 300000 | 0–2147483647 | 
| apg\$1write\$1forward.max\$1forwarding\$1connections\$1percent | 全局 | 整数 | 25 | 1–100 | 

`apg_write_forward.max_forwarding_connections_percent` 参数是可以用于处理从读取器转发的查询的数据库连接插槽上限。它表示为写入器数据库实例的 `max_connections` 设置的百分比。例如，如果 `max_connections` 是 `800`，而 `apg_write_forward.max_forwarding_connections_percent` 是 `10`，则写入器最多允许 80 个同时转发会话。这些连接来自由 `max_connections` 设置管理的同一连接池。此设置仅在集群启用了本地写入转发时适用于写入器数据库实例。

使用以下设置来控制本地写入转发请求：
+ `apg_write_forward.consistency_mode` – 会话级参数，用于控制只读副本上的读取一致性程度。有效值为 `SESSION`、`EVENTUAL`、`GLOBAL` 或 `OFF`。默认情况下，值设为 `SESSION`。将该值设置为 `OFF` 将在会话中禁用本地写入转发。要了解有关一致性级别的更多信息，请参阅[Aurora PostgreSQL 中本地写入转发的一致性和隔离](aurora-postgresql-write-forwarding-configuring.md#aurora-postgresql-write-forwarding-isolation)。此参数仅适用于启用了本地写入转发的读取器实例。
+ `apg_write_forward.connect_timeout` – 只读副本在与写入器数据库实例建立连接时在放弃之前等待的最大秒数。值 `0` 表示无限期等待。
+ `apg_write_forward.idle_in_transaction_session_timeout` – 写入器数据库实例在关闭从具有未处理事务的只读副本转发的连接之前等待活动的毫秒数。如果在此段时间之后，会话在事务中仍处于空闲状态，则 Aurora 会终止会话。`0` 值禁用超时。
+ `apg_write_forward.idle_session_timeout` – 写入器数据库实例在关闭从只读副本转发的连接之前等待活动的毫秒数。如果会话在这段时间之后仍处于空闲状态，则 Aurora 会终止会话。值 `0` 禁用超时。

## rdswriteforwarduser
<a name="aurora-postgresql-write-forwarding-rdswriteforwarduser"></a>

 `rdswriteforwarduser` 是我们将用于在只读副本和写入器数据库实例之间建立连接的用户。

**注意**  
`rdswriteforwarduser` 通过 PUBLIC 角色继承其对客户数据库的 CONNECT 权限。如果撤销 PUBLIC 角色的权限，则需要为将写入转发到的数据库授予 CONNECT 权限。