如何调整 Amazon Redshift 集群的大小?

上次更新日期:2022 年 9 月 30 日

我想调整 Amazon Redshift 集群的大小。这对性和计费会产生何种影响?

解决方法

可通过以下四种方式调整 Amazon Redshift 集群的大小:

  • 弹性调整大小:如果存在弹性调整大小这一选项,请使用它来更改节点类型和/或节点数量。请注意,当您仅更改节点数量时,查询将暂时暂停并且连接将保持断开状态。弹性调整大小需要 10-15 分钟。在进行调整大小操作期间,该集群为只读状态。
  • 经典调整大小:可使用经典调整大小来更改节点类型和/或节点数量。当您要调整为无法使用弹性调整大小选项的配置时,请选择此选项。调整大小操作需要两个小时或更长时间,最久或可持续几天,具体取决于您的数据的大小。在进行调整大小操作期间,源集群为只读状态。
  • 快照、还原和调整大小:要确保集群在经典调整大小操作期间可用,请复制现有集群。然后,调整新集群的大小。如果要在拍摄快照后将数据写入源集群,则必须手动复制数据。必须在迁移完成后手动将数据复制到新创建的目标集群。
  • 快速经典调整大小:快速经典调整大小与弹性调整大小一样快,其功能类似于经典调整大小。在此调整大小操作中,有两个主要阶段。在第 1 阶段(关键路径)中,数据从源集群迁移到目标集群,且集群处于只读模式。在第 2 阶段(非关键路径)中,以先前的数据分发方式完成的数据重新分发在后台完成。此阶段的持续时间取决于要分发的容量和集群工作负载。

有关更多信息,请参阅在 Amazon Redshift 中管理集群的概述

调整大小的先决条件

要验证您的集群是否有资格进行弹性调整大小,请运行以下 AWS CLIAWS CloudShell 命令:

aws redshift describe-node-configuration-options --cluster-identifier <cluster-id> --action-type resize-cluster

注意:如果您在运行 AWS 命令行界面(AWS CLI)命令时遇到错误,请确保您使用的是最新版本的 AWS CLI

如果集群有资格进行弹性调整大小,则输出与 AWS CLI 中的以下内容类似:

{
    "NodeConfigurationOptionList": [
        {
            "NodeType": "dc2.large",
            "NumberOfNodes": 2,
            "EstimatedDiskUtilizationPercent": 0.01
      },
        {
            "NodeType": "ra3.16xlarge",
            "NumberOfNodes": 2,
            "EstimatedDiskUtilizationPercent": 0.01
        }
]    
    }

如果集群没有资格进行弹性调整大小,则输出与 AWS CLI 中的以下内容类似:

{
    "NodeConfigurationOptionList": []
}

性能基准

在调整大小之前,您可以对现有集群工作负载和目标集群工作负载进行基准测试,以做出调整大小决策。

调整大小操作的速度

使用弹性调整大小操作对具有相同节点类型的集群调整大小时,该操作不会创建新集群。因此,操作很快便会完成。完成经典调整大小或快照和还原操作所需的时间可能会有所不同,具体取决于以下因素:

  • 源集群上的工作负载。
  • 正在从源集群传输到目标集群的表的数量和大小。
  • 在计算节点和切片之间分布数据的均匀程度。
  • 源集群和目标集群中的节点配置。

注意:如果您在包含大量数据的集群上执行经典调整大小,而节点不是 RA3,则数据迁移速度可能会很慢。迁移包含多兆兆字节(TB)数据的集群可能需要几天时间。RA3 节点的数据传输完成速度更快。

优化操作速度

要减少经典调整大小或快照和还原操作所需的时间:

有关优化大小调整性能的更多信息,请参阅 Top 10 performance tuning techniques for Amazon Redshift

要使用 Amazon Redshift 控制台检查调整大小操作的状态,请选择集群详细信息页面上的 Status(状态)选项卡。Status(状态)选项卡会显示平均传输速率、已用时间和剩余时间。

问题排查

  • 在进行调整大小操作期间,表的大小会增加或减小。此行为属于预期行为。有关更多信息,请参阅为什么 Amazon Redshift 集群中的表使用的磁盘存储空间高于预期?
  • 如果集群在 AWS CLI 中的状态显示为 NONE(无),则说明目标集群的预调配仍在进行中。当您的目标集群正在被预调配时,则还尚未被复制。目标集群完成预调配后,状态会更改为 IN_PROGRESS
  • 如果您的 AWS CloudFormation StackSets 未能调整大小,且发生错误“出现内部错误。请稍后重试您的查询”。检查集群是否符合弹性调整大小的条件。CloudFormation 堆栈在默认情况下设置 Classic:false 时使用弹性调整大小。
  • 如果您收到错误消息,提示您“请选择大型目标集群”,则表明您的数据不适合目标集群。使用更多节点或不同的节点类型来调整 Amazon Redshift 集群的大小。
  • 要在调整大小操作完成前进行取消操作,请从 Amazon Redshift 控制台的集群列表中选择cancel resize(取消调整大小)。有关更多信息,请参阅快照、还原和调整大小

为已调整过大小的集群付费

  • 在进行调整大小操作期间,您需要为所有可供您使用的集群付费。例如,在调整大小操作期间,您需要为源配置付费。在调整大小操作完成后,则不再需要为源配置付费。一旦集群状态更改为 Available(可用),即开始对目标配置收费。
  • 若将较小节点类型(large、xlarge)调整为较大节点类型(8xlarge),您的集群中的每个节点都需要更多存储空间。每个节点的存储空间越多,在运行 COMMIT(提交)时,写入的元数据便会更多。因此,单一 COMMIT(提交)操作的基本成本比较大节点的成本更高。如果同时运行多个小 COMMIT(提交)操作,则可能会看到性能下降。为了获得更好的性能,请将多个更改分组为单一 COMMIT(提交)操作。
  • 如果您购买了预留实例,则计费取决于已调整大小的集群配置、预留节点类型和预留节点数量。有关更多信息,请参阅预留节点的工作原理