目前,在AWS的console中,无法创建跨区的只读库
类似上图所示,只能创建本区内的只读库。
其实AWS RDS是支持跨区创建只读库的,但我们需要从AWSCLI命令行中操作。
需要注意的是:
要在与源数据库实例不同的 AWS 区域中创建一个加密的只读副本,源数据库实例必须加密。
还需要额外注意以下事项:
- 您只有在使用以下 Amazon RDS 数据库实例时,才能在 AWS 区域之间进行复制:
MariaDB(所有版本)。
MySQL 版本 5.6 及更高版本。
Oracle Enterprise Edition (EE) 引擎版本 12.1.0.2.v10 和更高的 12.1 版本、12.2 的所有版本以及 18.0 的所有版本。
需要有效的 Data Guard 许可。有关 Oracle 跨区域只读副本的限制的信息,请参阅 只读副本限制 (Oracle)。
PostgreSQL 版本 9.4.7 及更高版本。 - 源数据库实例可在多个 AWS 区域具有跨区域只读副本。
- 您只能从未作为其他 Amazon RDS 数据库实例的只读副本的源 Amazon RDS 数据库实例创建跨区域的 Amazon RDS 只读副本。
- 不能在 AWS GovCloud (US-West)区域内外设置复制通道。
- 对于所在 AWS 区域与源实例不同的任何只读副本,其滞后时间将更长。产生此滞后时间是因为区域数据中心之间的网络通道更长。
- 在一个 AWS 区域内,从同一源数据库实例创建的所有跨区域只读副本必须位于同一 Amazon VPC 内部或任一 VPC 外部。对于跨区域只读副本,所有指定 --db-subnet-group-name 参数的只读副本创建命令必须从同一 VPC 指定数据库子网组。
- 可以从其他 AWS 区域的 VPC 中的源数据库实例在 VPC 内部创建跨区域只读副本。还可以从 VPC 外部的源数据库实例在 VPC 内部创建跨区域只读副本。也可以从 VPC 内部的源数据库实例在 VPC 外部创建跨区域只读副本。
- 由于 VPC 对访问控制列表 (ACL) 条目数有限制,我们无法保证 5 个以上的跨区域只读副本实例。
- 只读副本使用指定数据库引擎的默认数据库参数组。
- 只读副本使用默认安全组。
- 对于 Oracle 数据库实例,删除跨区域只读副本的源时,将提升只读副本。对于 MariaDB、MySQL 和 PostgreSQL 数据库实例,删除跨区域只读副本的源时,只读副本的复制状态将设置为 terminated。但是,不会提升只读副本。
创建步骤:
- 首先要在目标区有KMS,应用于对数据库的加密。
- 在命令行执行
aws rds create-db-instance-read-replica \
--db-instance-identifier test-m8-rep --region cn-north-1 \
--source-db-instance-identifier arn:aws-cn:rds:cn-northwest-1:XXXXXX:db:test-m8 \
--source-region cn-northwest-1
[--kms-key-id XXXXXX]
解释:
source-db-instance-identifier 原库的ARN,可以在页面的configuration标签中查到
如果目标库要加密,则原库必须加密, kms-key-id 目标端用来加密的密钥ID
官方文档:
https://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/USER_ReadRepl.html#USER_ReadRepl.XRgn