我在我的Aurora RDS实例上标记了总共允许的90个连接,现在我有了比以前更多的重型站点。我决定升级实例,并这样做了,但在下一个维护窗口之前,升级一直处于挂起状态,没有考虑在群集中添加只读副本。我已经添加了复制副本,一切都很好。我想取消从db.t2.中型Aurora到db.r3.大型Aurora实例的挂起升级。我找不到清除挂起的修改队列的方法。
我安装了AWS CLI并进行了配置。我只是找不到关于清除挂起的修改队列的文档。提前感谢大家。
正如@gileri所描述的,现在有一种方法可以撤消挂起的修改。
我用RDS/Aurora实例对它进行了多次测试,即使没有--apply-immediately
参数(至少对于实例类修改),它也能按预期工作。
完整示例
让我们将名为database-2-instance-1
的Aurora实例的实例类从db.t3.medium
更改为db.r4.large
,然后再次撤消它。这些命令都不会影响数据库的可用性。
注:此处使用jq
仅输出重要部分。
检查实例类
$ aws rds describe-db-instances --db-instance-identifier database-2-instance-1 | jq '.DBInstances[].DBInstanceClass'
"db.t3.medium"
验证是否没有挂起的修改
$ aws rds describe-db-instances --db-instance-identifier database-2-instance-1 | jq '.DBInstances[].PendingModifiedValues'
{}
修改实例类
此修改将导致在下一个维护窗口中更改实例类。
$ aws rds modify-db-instance --db-instance-identifier database-2-instance-1 --db-instance-class db.r4.large | jq '.DBInstance.PendingModifiedValues'
{
"DBInstanceClass": "db.r4.large"
}
再次验证
只是为了确定,检查一下一切是否如预期。
$ aws rds describe-db-instances --db-instance-identifier database-2-instance-1 | jq '.DBInstances[].PendingModifiedValues'
{
"DBInstanceClass": "db.r4.large"
}
撤消对实例类的修改
这是将实例类修改回旧值的重要部分。文档中描述了--apply-immediately
是必需的,但事实并非如此。至少在这个例子中是这样。
$ aws rds modify-db-instance --db-instance-identifier database-2-instance-1 --db-instance-class db.t3.medium | jq '.DBInstance.PendingModifiedValues'
{}
验证已删除的挂起的修改
$ aws rds describe-db-instances --db-instance-identifier database-2-instance-1 | jq '.DBInstances[].PendingModifiedValues'
{}
此时,待处理的修改已不存在。
自2019年2月以来,有文档表明您可以取消此类挂起的修改。我已经用一个挂起的DB实例类修改测试了这一点。
如果不希望在下一个维护窗口中应用挂起的更改,可以使用AWS CLI修改DB实例以恢复更改,并指定--apply immediate选项。
没有记录在案的方法可以取消挂起的修改。
不过,请注意,在Aurora集群中,主节点并不像您想象的那样扮演重要的角色。它与其他设置不同,因为您的数据实际上并不存在于主实例上——它存在于Aurora群集卷上,而Aurora集群卷不是任何实例的一部分——并且副本与物理数据存储的关系与传统复制不同。
当您创建AmazonAurora实例时,您将创建一个DB集群。DB集群由一个或多个DB实例以及管理这些实例的数据的集群卷组成。Aurora集群卷是一个跨多个可用性区域的虚拟数据库存储卷,每个可用性区域都有一个DB集群数据的副本。
https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Aurora.Overview.html
因此,节点不包含数据——它是独立的,这是Aurora内部强大的功能之一。事实上,Aurora副本没有自己的数据副本,因此从严格/字面/迂腐的意义上讲,从技术上讲,它们甚至不是正确的"副本">(尽管该术语仍在使用)——它们只是集群中的只读节点。
因此,您可能只需要使用故障转移进行重新启动,即可将另一个实例(您的新副本)切换为主实例。然后创建一个新的复制副本并销毁原始实例。
请注意,如果您在aurora集群中有副本,则需要使用集群端点连接到写入器节点或其中一个读卡器节点,因为如果您的写入器("master")出现故障,aurora通常会交换角色(或者可能总是交换角色,尽管有时可能不会)。你可能已经在这么做了。
检查您的未决修改:
# aws --profile example_profile rds describe-db-clusters --db-cluster-identifier example_globalcluster --region example_region | jq '.DBClusters[].PendingModifiedValues'
{
"EngineVersion": "12.7"
}
接下来,停止全局数据库(从而停止写入程序节点或您的任何设置),并再次检查挂起的修改:
# aws --profile example_profile rds describe-db-clusters --db-cluster-identifier example_globalcluster --region example_region | jq '.DBClusters[].PendingModifiedValues'
null
当您再次启动全局数据库时,您将看到那些挂起的修改已经消失。我已经解决了两次这个问题。
文档中提到,
如果不希望在下一个维护窗口中应用挂起的更改,可以使用AWS CLI修改DB实例以恢复更改,并指定--apply immediate选项。
但是,请注意,--立即应用将导致实例重新启动,即使您正在恢复更改,rds可能会关闭约一分钟。