增加 AWS RDS 存储的停机时间?

And*_*inn 26 amazon-web-services amazon-rds

我希望增加两个 RDS 实例的存储(只是分配的存储空间,而不是实例类型或其他参数)。https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PIOPS.StorageTypes.html#USER_PIOPS.ModifyingExisting 上的文档建议:

您可以从标准存储更改为预置 IOPS 存储,或从预置 IOPS 更改为标准存储,以及增加存储,几乎没有停机时间。

我肯定会在执行更改之前安排一个维护窗口。但是文档在这方面似乎有点模糊。对于以前可能这样做过的人来说,什么是“几乎没有停机时间”?我可以期待 5 秒还是更像是 5 分钟?

2019 年 7 月更新:

我已经更新了指向正确和更新的 AWS 文档(已损坏)的链接。较新的文档有一个简介也有助于回答原始问题:

在大多数情况下,扩展存储不需要任何中断,也不会降低服务器的性能。修改数据库实例的存储大小后,数据库实例的状态为存储优化。数据库实例在存储修改后完全可运行。但是,您无法在 6 小时内或在数据库实例状态为存储优化时(以较长者为准)进行进一步的存储修改。

但是,一种特殊情况是,如果您有一个 SQL Server 数据库实例并且自 2017 年 11 月以来没有修改存储配置。在这种情况下,当您修改数据库实例以增加分配的内存时,您可能会遇到几分钟的短暂中断贮存。中断后,数据库实例在线但处于存储优化状态。在存储优化期间性能可能会下降。

Ant*_*ace 23

首先,请注意您可能正在查看不正确的操作——您描述了要更改存储大小,但引用了描述存储类型的文档。这是一个重要的区别:RDS 建议您不会因更改存储大小而遇到中断,但会因更改存储类型而遇到中断。

预计更改存储大小会导致性能下降,其持续时间和影响将取决于以下几个因素:

  • 您的 RDS 实例类型
  • 配置
    • 维护期间会出现这种情况吗?
    • 这些更改会首先发生在您的多可用区从属设备上,然后是故障转移吗?
  • 当前数据库大小
  • 候选数据库大小
  • AWS 在您请求的时间、请求的可用区、请求的区域处理此请求的能力
  • 引擎类型(对于Amazon Aurora 用户,存储添加由 RDS 根据需要以 10 GB 的增量进行管理,因此此讨论没有实际意义)

考虑到这一点,您可以通过自己、在您的环境中并按照您的条件进行测试,从而为您提供更好的服务。尝试尝试以下操作:

  • 从现有实例的快照恢复新的 RDS 实例,并在新克隆上执行此操作。
  • 有了这个克隆:
    • 在一天中的不同时间增加大小,当您期望 AWS 上的负载不同时。
    • 增加到不同的大小。
    • 尝试使用多可用区。查看与不启用多可用区相比,您的实际停机时间是否发生变化。
    • 在维护窗口期间尝试,并将其与立即应用更改进行比较。

这将花费更多(它不必......您可以在 1-3 个实例小时内完成大部分工作),但您会得到一个更清晰的答案,而不是在无数不同的 RDS 中兜售我们的经验环境。

如果您仍在寻找“大致”答案,我建议您至少计划在几分钟而不是几秒钟的范围内降低性能——同样非常依赖于您的环境和配置。

作为参考,我最近应用了这个精确的操作,在星期六下午(在美国东部时间)将 10GB 添加到 40GB db.m1.small 类型实例。实例保持在“修改”状态大约 17 分钟。请注意,修改状态不描述实际停机时间,而是描述应用操作的持续时间。您将无法对实际实例应用其他更改(尽管您仍然可以访问数据库本身),并且这也是您可以预期发生任何性能下降的持续时间。

如果您只打算更改存储大小,则会出现意外中断,但请注意,如果此更改与其他操作(例如更改实例标识符/类或存储类型)一起进行,则可能会发生中断。

  • 我花了一个多小时才在凌晨 3 点在几乎没有流量的情况下将 10GB 添加到 10GB m3.xlarge 数据库。 (3认同)
  • 又一个数据点,确认~线性。将 100G 添加到 300G 的 DB 需要 2 小时 50 分钟。 (2认同)
  • 在具有通用 (SSD) 和 MultiAZ 的 db.t2.small 上,将 10G 容量增加到 100G 容量对我来说只需要 23 分钟。另请注意,如果您因为数据库已满而增加大小,则在操作完成之前它将保持不起作用。 (2认同)
  • 在太平洋时间上午 10 点左右,在负载下将 PIOPS 存储从 100 GB 增加到 200 GB 大约需要 30 分钟,并且没有显着影响吞吐量/延迟。(读/写 IOPS 在此期间显着增加。) (2认同)

小智 9

由于您只是增加存储大小而不更改实例类型或其他任何内容,因此不应有任何停机时间,但在执行操作时可能会出现“性能下降”。

您引用的参考资料不明确,因为它在讨论更改存储大小的同时讨论更改存储类型。如果您改为查看此处表中的“分配的存储”:

http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.DBInstance.Modifying.html

你会看到它只说“性能可能会下降”,而没有说停电(它说在某些情况下切换存储类型时会发生这种情况)。

作为参考,在工作日将 eu-west-1 中的 15GB db.m3.medium MySQL 数据库更改为 20GB 时,我的应用程序与数据库的连接没有中断。但是,读/写 IOPS 在不到 20 分钟的时间内都增加到 400-700/s 之间,因此我认为这是对性能下降的引用。这是针对单可用区和多可用区数据库实例报告的。(该实例被报告为“正在修改”的时间比这要长一点——大约 25 分钟。)

自然地,您可以在与生产数据库相同的数据库实例上试用它,然后再在生产数据库实例上执行此操作,这样您就可以在真正执行之前安全地查看它在您的情况下的行为。