首页 > 解决方案 > 使用 Cloud Formation 将 MySQL RDS 存储类型从磁性更改为 SSD/预置 IOPS

问题描述

我有一个具有以下规格的 RDS 实例:

InstanceClass: db.m5.12xlarge
AllocatedStorage: 500 - (GiB)
MultiAZ: No
ReadReplica: True - (with same specs)
StorageType: standard - (magnetic)

我需要修改主服务器和副本服务器以使用具有更多空间 (2 TiB) 的 SSD 存储类型 (gp2),并且这必须通过 CloudFormation 模板完成,因为上述 RDS 实例是堆栈的一部分。但问题是这些是生产数据库,长时间停机 [超过 2 小时] 不是一种选择。

仅存储大小变化是可以的,但从磁性到 SSD 的类型变化是一个灰色区域。没有办法(至少我知道)我可以确定它会在 2 个多小时内完成,或者需要多少时间。我想向社区询问这里的最佳实践,或者是否有人以前做过任何变通办法(可能是手动),不会使数据库与 cloudformation 堆栈不同步(比如手动制作一个新副本)例如,想要的规格并将其推广到掌握)?

标签: mysqlarchitectureamazon-cloudformationamazon-rdsdevops

解决方案


根据您的解释,我假设您有一个 RDS - MySQL 数据库集群(如果您没有 RDS 集群,您如何将数据复制到只读副本?)而不是 Aurora-MySQL 数据库集群(在这种情况下,您将'没有磁性存储类型,因此我的假设)

在这种情况下,从 UI 手动创建只读副本,基本上去

RDS -> 数据库 -> 选择 RDS 集群 ->(右上角)选择操作 -> 添加阅读器

选择读取器后,选择所需的存储类型和要从中复制的只读副本。

这显然需要时间,但是一旦您的新副本与主实例同步,生成另一个只读副本(这次使用您创建的新副本)

一旦你有 2 个具有所需存储类型的副本,你可以做 2 件事:

  1. 如果您只想快速读取,请保持原样,从主服务器复制只读副本的初始复制会有点慢,但读取查询应该很快。
  2. 否则,杀死主实例,RDS 应该自动选择一个只读副本作为新的主实例。

对于这样的生产系统,我想不出更优雅的方式,希望对你有用。


推荐阅读