【发布时间】:2016-08-13 06:57:10
【问题描述】:
我有一个存储 SSD 1000GB 的 RDS(Postgres) 实例,但数据只有 100GB 大小。
如何轻松缩减RDS的存储资源?
【问题讨论】:
标签: postgresql amazon-web-services amazon-rds
我有一个存储 SSD 1000GB 的 RDS(Postgres) 实例,但数据只有 100GB 大小。
如何轻松缩减RDS的存储资源?
【问题讨论】:
标签: postgresql amazon-web-services amazon-rds
RDS 不允许您减少分配给数据库实例的存储量,只能增加它。
要将数据库移动到更少的存储空间,您必须创建一个具有所需存储空间的新 RDS 实例,然后使用 pg_dump/pg_restore 之类的东西将数据从旧数据库移动到新数据库。
另请注意,具有 1000GB SSD 存储的 RDS 实例的基本 IOPS 为 3000。具有 100GB SSD 存储的 RDS 实例的基本 IOPS 为 300,偶尔突发高达 3,000。
【讨论】:
根据 AWS 的帮助 here,这是对我有用的完整过程:
1) 将数据库转储到文件:在可以通过网络访问数据库的机器上运行:
pg_dump -Fc -v -h your-rds-endpoint.us-west-2.rds.amazonaws.com -U your-username your-databasename > your-databasename.dump
2) 在 AWS 控制台中,创建一个具有较小存储空间的新 RDS 实例。 (您可能希望使用相同的用户名、密码和数据库名称进行设置。)
3) 在新的 RDS 实例上恢复数据库:运行此命令(显然与上一个命令在同一台机器上):
pg_restore -v -h the-new-rds-endpoint.us-west-2.rds.amazonaws.com -U your-username -d your-databasename your-databasename.dump
(请注意,在第 3 步中,我使用的是新 RDS 实例的端点。另请注意,端点地址末尾没有 :5432。)
【讨论】:
Amazon 不允许减小 RDS 实例的 HDD 大小,您可以有两种选择来减小存储大小。
1:-如果你能承受停机时间,那么旧实例的mysqldump备份可以恢复到具有较小存储大小的新实例。
2:- 您可以使用数据库迁移服务将数据从一个实例移动到另一个实例,而无需停机。
【讨论】:
使用 RDS 时,您无需进行典型的硬件“容量规划”,只需为短期或中期(取决于)配置足够的磁盘空间,并在需要时进行扩展。
正如@Mark B 提到的,您还需要注意 IOPS。如果您需要高性能数据库,可以使用“预置 IOPS”。
在进入磁盘空间存储部分之前,您应该进行成本与性能调整。 例如。如果您将 1000GB 减少到 120GB,对于美国西部,您将节省 0.125x 880GB = 110/月。但最大 IOPS 将是 120x 3 = 360IOPS
预置额外的 IOPS 以提高性能将花费您 0.10 美元。假设您确实需要 800IOPS 才能获得更高的在线用户响应,
(800-360) x 0.10 = 44 美元。所以实际节省的可能最终会“减少”。如果您的 RDS 需要恒定的 1100 IOPS,您将不会节省任何资金。其他折扣因素也可能发挥作用。
【讨论】:
您可以通过将数据库迁移到 Aurora 来做到这一点。
如果您不想要 Aurora,我认为数据迁移服务是最佳选择。我们正在将生产转移到 Aurora,所以这无关紧要,我们总是可以使用 pg_dump 或 DMS 将其从 Aurora 中恢复。 (我认为这也适用于 MySQL,但尚未测试。)
我的具体目标是在停用一些最初使用 1TB+ 存储创建的实例后减少 RDS Postgres 最终快照大小。
如果需要,您可以在 3 点停止,然后继续使用 Aurora DB。
【讨论】: