AWS RDS 跨區域 Replica 命令行建立方法

最近測試發現,以前AWS RDS能夠建立cross-region replica的選項沒有了.(北京和寧夏區域都不能夠了)。這個功能常常是時有時無。聽說是考慮合規性緣由,該功能不在Console中直接可見了。
AWS RDS 跨區域 Replica 命令行建立方法html

辦法老是比困難多。沒有console,咱們還有cli,方法總仍是有的。
經測試,方法以下:mysql

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

  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去尋找資源。ide

  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步的建立命令。ui

如下是更多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的建立。

相關文章
相關標籤/搜索