最近测试发现,之前AWS RDS可以创建cross-region replica的选项没有了.(北京和宁夏区域都不可以了)。这个功能经常是时有时无。据说是考虑合规性原因,该功能不在Console中直接可见了。

办法总是比困难多。没有console,我们还有cli,方法总还是有的。
经测试,方法如下:
首先参考官方cli文档
创建cross-region replica 命令行方式
https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance-read-replica.html
如果跨region,其中有arn部分的填写要求
构建 Amazon RDS 的 ARN
https://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/USER_Tagging.ARN.html#USER_Tagging.ARN.Constructing
RDS example:arn:aws:rds:<region>:<account number>:<resourcetype>:<name>
注意,中国区是arn:aws-cn..... 这里是个小坑。最好根据自己已有的RDS,在configuration中查找arn,进行修改。
aws rds create-db-instance-read-replica \--db-instance-identifier cli-create-xx \--source-db-instance-identifier arn:aws-cn:rds:cn-northwest-1:027807615311:db:testdb \--db-instance-class db.m4.large \--source-region cn-northwest-1
结果截图:
4. 如果创建同region的replica,就简单一些,不用写arn,只要写master和replica的名字即可
aws rds create-db-instance-read-replica \--db-instance-identifier cli-create-testdb2 \--source-db-instance-identifier mysql57 \--db-instance-class db.m4.large \--source-region cn-north-1

注释:aws cli方式创建cross-region replica,需要设定aws configure环境,连接到计划创建replica的region(我就是连接的北京,replica也就创建在北京)。原因是由于db-instance-identifier不能指定arn,而source-db-instance-identifier 可以指定arn。 而只有通过arn,在配合source-region参数,才能跨region去寻找资源。
实际操作:
aws configure配置中,选择连接北京
aws configure AWS Access Key ID [****************ZFFF]: AWS Secret Access Key [****************HfnD]: Default region name [cn-north-1]: Default output format [None]:
然后开始执行第3步的创建命令。
以下是更多VPC,security group,db-subnet-group等参数的添加测,更全的参数选择和指定,才具有生产实际使用的价值
指定VPC,安全组
aws rds create-db-instance-read-replica \--db-instance-identifier replica-zhy-1 \--source-db-instance-identifier arn:aws-cn:rds:cn-northwest-1:027807615311:db:testdb \--db-instance-class db.m4.large \--source-region cn-northwest-1 \--availability-zone cn-north-1b \--vpc-security-group-ids sg-0df896e1034f08331 \--db-subnet-group-name replica-subnet-group
创建完成截图,
注释:图中红框内信息,都是需要在命令行中使用的。

增加公网访问,存储类型,multi-AZ等
aws rds create-db-instance-read-replica \--db-instance-identifier replica-zhy-2 \--source-db-instance-identifier arn:aws-cn:rds:cn-northwest-1:027807615311:db:testdb \--db-instance-class db.m4.large \--source-region cn-northwest-1 \--availability-zone cn-north-1b,cn-north-1a \--vpc-security-group-ids sg-0df896e1034f08331 \--db-subnet-group-name replica-subnet-group \--vpc-security-group-ids sg-0df896e1034f08331 \--multi-az \--publicly-accessible \--storage-type standard \--deletion-protection \--tags Key=Name,Value=test-OK
遇到错误
An error occurred (InvalidVPCNetworkStateFault) when calling the CreateDBInstanceReadReplica operation: Cannot create a publicly accessible DBInstance. The specified VPC does not support DNS resolution, DNS hostnames, or both. Update the VPC and then try again
上面的错误,以下参考文档,需要启用 Amazon VPC 的 DNS 主机名和 DNS 解析属性。
VPC 网络属性 enableDnsHostnames 和 enableDnsSupport 必须设置为 true.要查看和修改这些属性,请转到位于
https://console.aws.amazon.com/vpc/ 的 VPC 控制台。
https://aws.amazon.com/cn/premiumsupport/knowledge-center/rds-launch-in-vpc/?nc1=h_ls
https://docs.aws.amazon.com/zh_cn/vpc/latest/userguide/vpc-dns.html
aws rds create-db-instance-read-replica \--db-instance-identifier replica-zhy-2 \--source-db-instance-identifier arn:aws-cn:rds:cn-northwest-1:027807615311:db:testdb \--db-instance-class db.m4.large \--source-region cn-northwest-1 \--availability-zone cn-north-1b,cn-north-1a \--vpc-security-group-ids sg-0df896e1034f08331 \--db-subnet-group-name replica-subnet-group \--vpc-security-group-ids sg-0df896e1034f08331 \--multi-az \--publicly-accessible \--storage-type standard \--deletion-protection \--tags Key=Name,Value=test-OK
An error occurred (InvalidParameterCombination) when calling the CreateDBInstanceReadReplica operation: Requesting a specific availability zone is not valid for Multi-AZ instances.
8.去掉availability-zone参数,执行成功
aws rds create-db-instance-read-replica \--db-instance-identifier replica-zhy-2 \--source-db-instance-identifier arn:aws-cn:rds:cn-northwest-1:027807615311:db:testdb \--db-instance-class db.m4.large \--source-region cn-northwest-1 \--vpc-security-group-ids sg-0df896e1034f08331 \--db-subnet-group-name replica-subnet-group \--multi-az \--publicly-accessible \--vpc-security-group-ids sg-0df896e1034f08331 \--storage-type standard \--deletion-protection \--tags Key=Name,Value=test-OK

增加磁盘类型IO1,IOPS参数,option-group-name测试
aws rds create-db-instance-read-replica \--db-instance-identifier replica-zhy-5 \--source-db-instance-identifier arn:aws-cn:rds:cn-northwest-1:027807615311:db:testdb \--db-instance-class db.m4.large \--source-region cn-northwest-1 \--vpc-security-group-ids sg-0df896e1034f08331 \--db-subnet-group-name replica-subnet-group \--no-multi-az \--port 3316 \--publicly-accessible \--vpc-security-group-ids sg-0df896e1034f08331 \--storage-type io1 \--iops 1000 \--deletion-protection \--tags Key=Name,Value=test-OK \--option-group-name mysql8-replica
输出可以看到port修改是有效的
选项组也是有效的

aws rds create-db-instance-read-replica \--db-instance-identifier replica-zhy-6 \--source-db-instance-identifier arn:aws-cn:rds:cn-northwest-1:027807615311:db:testdb \--db-instance-class db.m4.large \--source-region cn-northwest-1 \--vpc-security-group-ids sg-0df896e1034f08331 \--db-subnet-group-name replica-subnet-group \--multi-az \--port 3316 \--publicly-accessible \--vpc-security-group-ids sg-0df896e1034f08331 \--storage-type gp2 \--deletion-protection \--tags Key=Name,Value=test-OK \--option-group-name mysql8-replica
输出如下,经过多次测试,--storage-type无论设置什么值(包括不设置),都是使用IO1的磁盘,100G,1000IOPS的默认设置。
总结,通过命令行创建replica,很快就能创建完成,但是有很多参数,是在replica创建完成之后,再次modify的,需要一段时间调整。
下面几个参数,是后面再改的(当然,都是系统自动完成的)。
--multi-az --port 3316--storage-type gp2
经过多次测试,--storage-type无论设置什么值(包括不设置),都是使用IO1的磁盘,100G,1000IOPS的默认设置。最后会修改为--storage-type指定的类型。
参考下截图,最终完成时间,主要是看数据量大小.
至此,就完成replica的创建。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69991762/viewspace-2745588/ ,如需转载,请注明出处,否则将追究法律责任。