只读副本
Databases for PostgreSQL 只读副本通过异步复制将所有数据从领导者部署复制到副本部署。 顾名思义,只读副本支持读事务,可用于平衡既有重写操作又有重读操作的数据库。 只读副本只有一个 PostgreSQL 数据成员,按 与领先者的人均消费率相同 计费。
高可用性只读副本
高可用性 Databases for PostgreSQL 只读副本具有以下优势:改善读取可扩展性、提高可用性、减少读取延迟、提供备份和灾难恢复功能,以及有效分配读取流量。 它有助于为您的应用程序提供更强大、反应更迅速的数据库基础架构。 有关详细信息,请参阅 Databases for PostgreSQL 高可用性只读副本。
领导者
在Databases for PostgreSQL部署的_只读_副本选项卡上,在提供任何只读副本之前,中心窗格会指出不存在任何读副本,并提供一个创建按钮。
如果一个部署是领导者,并且已经有一个只读副本连接到它,那么 Replication 窗格中就会显示副本部署的列表以及指向每个副本的链接。 单击只读副本部署名称右侧的齿轮图标对其进行管理。
配置只读副本
PostgreSQL 部署的资源按部署分配,正常部署有两个成员。 由于只读副本只有一个成员,而当前调配使用的内存和存储值是请求值的一半,因此调配可能会失败。 网络用户界面无法修改存储值,它会自动使用领导者部署的值--该值减半。 如果您的数据不够用,您需要使用 API 或 CLI 两次指定您要配置的存储空间。 (内存的情况也是如此,尽管内存容量较小可能不会妨碍还原成功) 目前正在进行更新,以纠正这种情况。
通过用户界面进行调配
单击 创建只读副本,在领导_读取副本_选项卡中提供只读副本。 源实例自动完成。 只读副本的名称会在 Service name 字段中自动生成,但您可以自由重命名。 您可以选择要部署它的区域,以及它的初始内存分配。 磁盘大小、版本以及公共或专用端点都会自动配置,以匹配领导者部署的设置。
如果使用 Key Protect,则只有在通过 CLI 和 API 进行调配时才支持自带密钥 (BYOK)。 否则,只读副本将使用生成的密钥加密。
通过 CLI 进行调配
通过 CLI 和 API 提供只读副本的工作原理与 配置标准 Databases for PostgreSQL 部署 类似。 供应由资源控制器处理,它使用一个参数 {"remote_leader_id": "crn:v1:..."}
来指定要供应的副本的领导者。
要通过 CLI 配置只读副本,请使用以下命令:
ibmcloud resource service-instance-create <REPLICA_NAME_OR_CRN> databases-for-postgresql standard <REGION> \
-p \ '{
"remote_leader_id": "crn:v1:bluemix:public:databases-for-postgresql:us-south:a/54e8ffe85dcedf470db5b5ee6ac4a8d8:1b8f53db-fc2d-4e24-8470-f82b15c71819::",
"members_memory_allocation_mb": "2048",
"members_disk_allocation_mb": "10240"
}'
您必须指定内存和磁盘的容量,记住最小容量为 2 GB 内存和 10 GB 磁盘。 您可以选择指定只读副本使用公共端点还是专用端点。 无法为只读副本指定版本。 版本会自动设置为与领导者部署相同的主要版本。
通过应用程序接口进行调配
通过 API 提供只读副本的工作原理与 提供标准 Databases for PostgreSQL 部署类似。 供应由资源控制器处理,它使用一个参数 {"remote_leader_id": "crn:v1:..."}
来指定要供应的副本的领导者。
要通过应用程序接口配置只读副本,请使用以下命令:
curl -X POST \
https://resource-controller.cloud.ibm.com/v2/resource_instances \
-H 'Authorization: Bearer <>' \
-H 'Content-Type: application/json' \
-d '{
"name": "<REPLICA_NAME_OR_CRN>",
"target": "<REGION>",
"resource_group": "<RESOURCE_GROUP_ID>",
"resource_plan_id": "databases-for-postgresql-standard",
"parameters": {
"remote_leader_id": "crn:v1:bluemix:public:databases-for-postgresql:us-south:a/54e8ffe85dcedf470db5b5ee6ac4a8d8:1b8f53db-fc2d-4e24-8470-f82b15c71819::",
"members_memory_allocation_mb": "2048",
"members_disk_allocation_mb": "10240"
}
}'
您必须指定内存和磁盘的容量,记住最小容量为 2 GB 内存和 10 GB 磁盘。 您可以选择指定只读副本使用公共端点还是专用端点。 无法为只读副本指定版本。 版本会自动设置为与领导者部署相同的主要版本。
只读副本
在只读副本的 Read replicas 选项卡上,Replication 包含其名称和区域,以及其领导者的名称和区域。 它还有重新同步只读副本和推广副本的按钮。
检查复制状态
您必须监控复制,因为复制状态不会自动受到监控。
使用 psql
查看只读副本的复制状态,但只能从其领导者处查看。 使用 psql
连接到领导者部署 使用 管理员证书。
连接后运行
- 对于 PostgreSQL 10 及更新版本,
SELECT * from pg_stat_replication;
。
或
- 对于PostgreSQL版本9.x和更早版本,
SELECT * FROM get_pg_stat_replication();
。
只读复制用户和权限
-
领导者上的任何用户,即使是在只读副本提供之前就已存在的用户,都可以登录并在只读副本上运行读取,其对对象的权限与他们在领导者上所拥有的权限相同。
-
如果有多个只读副本连接到领导者,那么在领导者上创建的用户也会在所有其他只读副本上创建。
-
当领导者晋升为独立部署时,在只读副本上创建的用户(包括
admin
用户)将持续存在。 只读副本升级后,领导者上所有用户的用户和权限都会转移到升级后的部署中。 -
对所有用户的只读副本进行的写操作不会被过滤或拒绝,但会在数据库级别失败。
您还可以创建用户,让他们可以访问只读副本,但不能从只读副本访问领导者。 如果有多个只读副本连接到领导者,那么在任何一个只读副本上创建的用户也会在所有其他只读副本上创建。
在只读副本上创建的只读副本用户可以连接到副本并运行读取。 只读副本用户无法连接并在领导者上运行操作。 当只读副本升级为独立部署时,它们也不会持续存在。
只读复制创建的用户由领导者分配权限,并被分配 ibm-cloud-base-user-ro
角色,同时也是 ibm-cloud-base-user
组的成员。 他们可以访问该组其他成员创建的所有对象,包括通过 服务证书、CLI 或 API 创建的领导者上的任何用户。 与 ibm-cloud-base-user
的权限一致,只读复制创建的用户无法访问 admin 用户或通过 psql
创建的其他用户创建的对象。 有关详细信息,请参阅 PostgreSQL 角色和权限 页。
重新同步只读副本
如果需要重新同步只读副本,请单击 Resync 只读副本按钮。 重新同步是一项破坏性操作,执行重新同步会破坏和重建只读副本中的数据。 在重新同步运行期间,只读副本无法执行任何其他操作或运行任何查询。 查询不会重新路由到领导者,因此对只读副本的任何连接都会失败,直到它完成重新同步。
重新同步只读副本所需的时间各不相同,但这一过程可能会持续很长时间。
通过 CLI 重新同步只读副本
要通过 CLI 启动重新同步,请使用 cdb read-replica-resync
命令。
ibmcloud cdb read-replica-resync <DEPLOYMENT_NAME_OR_CRN>
通过 API 重新同步只读副本
要通过 API 启动重新同步,请向 /deployments/{id}/remotes/resync
端点发送 POST。
curl -X POST \
https://api.{region}.databases.cloud.ibm.com/v4/ibm/deployments/{id}/remotes/resync \
-H 'Authorization: Bearer <>'
推广只读副本
只读副本可晋升为独立群集,既可接受写操作,也可接受读操作。 如果领导者部署发生意外,只读副本可以升级为独立群集,并开始接受应用程序的写入。 如果读取复制群集已有一个以上的数据成员,则将读取复制群集升级为独立群集会更快。
升级后,只读副本将终止与领导者的连接,成为独立的 Databases for PostgreSQL 部署。 部署可以开始接受和运行读写操作、启用备份,并发布自己的管理员用户。 添加一个新的数据成员后,部署就变成了一个有两个数据成员的群集。 这就增加了成本,因为它是按每个成员相同的消费费率计费的,但部署的成员是两个而不是一个。
推广只读副本时,可以跳过通常在推广时进行的初始备份。 跳过初始备份意味着你的副本可以更快地可用,但没有即时备份可用。 推广过程完成后,您就可以开始按需备份。
只读副本晋升为独立部署后,就无法将其恢复为只读副本或重新加入领导者。
在用户界面中推广只读副本
要从用户界面推广只读副本,请单击 推广只读副本。
在 CLI 中升级只读副本
要通过 CLI 进行升级,请使用 cdb read-replica-promote
命令。
ibmcloud cdb read-replica-promote <DEPLOYMENT_NAME_OR_CRN>
通过应用程序接口推广只读副本
要通过 API 进行推广,请向 /deployments/{id}/remotes/promotion
端点发送 POST。
curl -X POST \
https://api.{region}.databases.cloud.ibm.com/v4/ibm/deployments/{id}/remotes/promotion \
-H 'Authorization: Bearer <>' \
-H 'Content-Type: application/json' \
-d '{"promotion": {}}' \
要在升级后跳过初始备份,还需在 JSON 主体中设置 skip_initial_backup
。
curl -X POST \
https://api.{region}.databases.cloud.ibm.com/v4/ibm/deployments/{id}/remotes/promotion \
-H 'Authorization: Bearer <>' \
-H 'Content-Type: application/json' \
-d '{"promotion": {"skip_initial_backup": true}}' \
完成时间
只有当数据库高度可用时,推广任务才会完成。 不过,读/写可用性会在大约 10 分钟后出现,但有一个主要的注意事项:在任务完成之前,数据库不是高度可用的。
读取复制的全部推广时间由数据大小决定,有两种可能的方式:
- 读取副本是单一成员。 晋升后,编队规格变为两个成员,从而创建第二个副本。 副本的创建时间取决于数据的大小。 该副本的创建速度为 25 MB/秒,以避免网络饱和。 随着数据库的增长,创建数据库可能需要大量时间。 在完成创建副本之前,任务不会结束。
- 如果您选择将备份作为晋升的一部分,则备份的完成也需要在任务完成前完成。 这同样取决于数据库的大小。
在推广任务完成之前,没有高可用性成员。 同样,如果您选择了初始备份,则在第二点完成或创建手动备份之前不存在备份。
边推广边升级
如果需要升级到数据库的新主版本,可以在将只读副本推广到独立部署时进行升级。 有关详细信息,请参阅 升级到新的主要版本。
只读复制的注意事项
-
只读副本可以与源形成存在于同一区域,也可以存在于不同区域,从而实现跨区域复制数据。
-
只读副本的主要版本必须与其领导版本相同。
-
只读副本上禁用备份。 仅在领导者部署时进行备份。
-
副本可还原到其他区域,但启用欧盟云的区域(目前为
eu-de
和par-01
)除外,这些区域只能相互还原(例如,par-01
副本可还原到eu-de
,反之亦然)。 -
每个领导者最多只能有五个只读副本。
-
只读副本不参与领导者群集的领导者->跟随者选举,也不会自动故障切换到只读副本。 将只读副本升级为完整部署是一项由用户手动启动的任务。
-
只读副本的最小大小为 2 GB 内存和 10 GB 磁盘。 即使您的领导部署规模较小,情况也是如此。
-
只读副本不会自动缩放以匹配领导者。 如果存储的数据量超出了分配给部署的磁盘,请先扩展只读副本的磁盘,然后再扩展领导者的磁盘。 先扩展只读副本可确保只读副本的空间不会耗尽。 如果你是为了性能而不是空间来扩展领导者磁盘,那么就没有必要扩展只读副本。
-
复制是异步的,可能会出现复制滞后。 默认情况下,主服务器和副本之间没有一致的通信。 只读副本有可能落后到需要重新同步的程度。 当副本所在区域与其领导者的地理位置相距甚远时,复制滞后可能会更大。
-
只读副本是一种只有单一数据成员的部署,不具备任何内部高可用性。 在维护期间,容易出现临时中断和停机。 如果您的应用程序依赖只读副本,请确保有重试失败查询的逻辑,或在多个只读副本上进行负载平衡。