ITPub博客

首页 > Linux操作系统 > Linux操作系统 > AWS RDS 跨区域 Replica 命令行创建方法

AWS RDS 跨区域 Replica 命令行创建方法

原创 Linux操作系统 作者:48573554 时间:2020-12-26 13:08:02 0 删除 编辑

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

办法总是比困难多。没有console,我们还有cli,方法总还是有的。
经测试,方法如下:

  1. 首先参考官方cli文档
    创建cross-region replica 命令行方式
    https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance-read-replica.html

  2. 如果跨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,进行修改。

  3. 实际测试有效的输出:
    下面命令,是aws cli连接到cn-north-1(北京),远程调同账号下的cn-northwest-1(宁夏)的数据库testdb,创建replica到北京。
    测试为目的,更多可选参数,我没有添加,计划后续通过控制台修改。
    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

结果截图:
AWS RDS 跨区域 Replica 命令行创建方法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 RDS 跨区域 Replica 命令行创建方法

注释:aws cli方式创建cross-region replica,需要设定aws configure环境,连接到计划创建replica的region(我就是连接的北京,replica也就创建在北京)。原因是由于db-instance-identifier不能指定arn,而source-db-instance-identifier 可以指定arn。 而只有通过arn,在配合source-region参数,才能跨region去寻找资源。

  1. 举例说明:
    需求:
    Master 在北京
    Replica在宁夏

实际操作:
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等参数的添加测,更全的参数选择和指定,才具有生产实际使用的价值

  1. 指定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

    创建完成截图,
    注释:图中红框内信息,都是需要在命令行中使用的。
    AWS RDS 跨区域 Replica 命令行创建方法

    增加公网访问,存储类型,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

  2. 解决完VPC问题,重新执行,继续发现错误。--multi-az和--availability-zone不能同时出现,即使我吧两个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 (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

AWS RDS 跨区域 Replica 命令行创建方法
AWS RDS 跨区域 Replica 命令行创建方法

  1. 增加磁盘类型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 跨区域 Replica 命令行创建方法
    选项组也是有效的
    AWS RDS 跨区域 Replica 命令行创建方法

  2. 使用gp2存储测试。
    注释:如果设置--storage-type standard,默认使用io1,iops 1000的设定了。其实,即使在aws console控制台,也是不能选择普通磁盘了。(如果有哪位大神测试过好用的设置方法,欢迎在文章底部留言,谢了)
    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指定的类型。

参考下截图,最终完成时间,主要是看数据量大小.
AWS RDS 跨区域 Replica 命令行创建方法
AWS RDS 跨区域 Replica 命令行创建方法
至此,就完成replica的创建。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69991762/viewspace-2745588/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2020-12-26

  • 博文量
    12
  • 访问量
    6076