我在 EC2-Classic 中有一个使用率很高的 RDS 实例 (MySQL),其中包含三个只读副本实例。我们计划将一些微服务迁移到 VPC,其中一些微服务需要读取这些副本实例(我们中期没有计划将这些 RDS 实例完全迁移到 VPC)。我首先想到的是创建一个 VPC 内的只读副本(我已经创建了一个子网组),但我收到了一条错误消息:
At least one security group 'xxxxx' (Non-VPC) and subnet group 'dbsubnetgroup' (in VPC 'vpc-123456') are not in common VPC. (Service: AmazonRDS; Status Code: 400; Error Code: InvalidParameterCombination; Request ID: 5a8f57fb-f5b4-11e5-996f-d16e3527730f)
我尝试使用 AWS CLI 实现此目的:
aws rds create-db-instance-read-replica --db-instance-identifier replica-name --source-db-instance-identifier spurce-name --db-subnet-group-name sbsubnetgroup-name --region us-east-1
A client error (DBSubnetGroupNotAllowedFault) occurred when calling the CreateDBInstanceReadReplica operation: DbSubnetGroupName should not be specified for read replicas that are created in the same region as the master
那么,据我所知,这种复制不允许在同一区域内进行,而只能以跨区域方式进行?
有办法解决吗?
提前致谢
答案1
是的,它在区域内有效,但在区域内它不起作用,除非在单个 VPC 内。
不过,还是有解决办法的。
您无需创建副本,而是创建主服务器。使用原始主服务器的转储加载副本,然后自行配置副本,以便临时从“外部”主服务器进行复制。每个 RDS 实例上都有存储过程允许执行此操作,因为如果没有权限SUPER
,则无法执行此操作。
看使用在 Amazon RDS 外部运行的 MySQL 或 MariaDB 实例进行复制。
您必须跳过步骤 1 和 4,并找到另一种方法来阻止在启动转储文件时对主服务器的所有写入,因为 RDS 不允许FLUSH TABLES WITH READ LOCK;
。