如何在Amazon Aurora RDS上删除/撤消/删除挂起的修改



我在我的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可能会关闭约一分钟。

最新更新