弹性大小调整在 Amazon Redshift 中是如何工作的?

上次更新日期:2022 年 7 月 7 日

我想在我的 Amazon Redshift 集群上执行弹性大小调整。弹性大小调整是如何工作的,使用弹性大小调整的一些注意事项是什么?

简短描述

Amazon Redshift 允许您在集群大小调整期间迁移到特定数量的节点。默认情况下,Amazon Redshift 旨在保持目标集群中存在相同数量的数据切片。切片映射缩短了调整集群大小所需的时间。在切片映射过程中,Amazon Redshift 会将集群数据切片重新分配至目标集群中的新计算节点。对于经典大小调整,所有行都将复制到集群中,从而根据分配设置将它们映射到切片。对于弹性大小调整,您可以将整个数据片复制到映射该切片的节点。

如果您计划在 Amazon Redshift 集群上执行弹性大小调整,请考虑以下事项:

  • 弹性大小调整不会对表进行排序,也不会回收磁盘空间。运行 VACUUM 命令可对表进行排序并回收磁盘空间。
  • 弹性大小调整仅适用于使用 EC2-VPC 平台的 Amazon Redshift 集群。
  • 与经典大小调整相比,弹性大小调整需要的时间通常更少。相较之下,经典大小调整操作会预置一个新的集群,同时从源集群复制数据。经典的大小调整操作首先根据分配方式将数据分配到新的节点。然后,它会运行 ANALYZE 命令更新表统计数据。这意味着,与执行弹性大小调整操作相比,在 Amazon Redshift 集群上执行经典大小调整操作需要更长的时间。

解决方法

弹性大小调整的工作原理

在 Amazon Redshift 中,根据目标节点类型,弹性大小调整的工作方式可能会有所不同。检查目标节点类型是否与源节点类型相同。

要检查您的节点类型,请登录 Amazon Redshift 控制台。从导航菜单中选择 Clusters (集群)Clusters (集群) 页面会在每个集群名称下指示节点类型。或者,您可以使用 describe-clusters AWS Command Line Interface (AWS CLI) 命令来获取有关 Amazon Redshift 集群的更多信息:

aws redshift describe-clusters --region <Cluster Region>

示例 1:目标节点类型与现有节点类型相同

当您使用弹性大小调整在 Amazon Redshift 中调整集群大小(不更改节点类型)时,Amazon Redshift 会自动将数据重新分配到新节点。与经典大小调整(预置新集群并向其传输数据)不同,弹性大小调整不会创建新集群。弹性大小调整通常可在几分钟内完成。在弹性大小调整完成后台数据重新分配的同时,预计查询运行时间会稍微有所增加。

注意:在元数据迁移期间,您的 Amazon Redshift 集群会在几分钟内暂时不可用。有关 Amazon Redshift 弹性大小调整流程的更多信息,请参阅弹性大小调整

示例 2:目标节点类型与现有节点类型不同

如果您的节点类型已更改,Amazon Redshift 将创建一个新集群,并将数据从最新的快照复制到此集群。在数据传输过程中,您的 Amazon Redshift 集群以只读模式运行,并且所有写入操作都会被阻止。大小调整操作完成后,Amazon Redshift 会自动更新新集群的终端节点,使之与现有集群的终端节点匹配。随后,所有与原始集群的连接都将关闭。

DC2 和 DS2 节点计数限制

如果您在 Amazon Redshift 集群上执行弹性大小调整,请注意针对 DC2 和 DS2 节点类型的以下限制:

  • 对于 dc2.large 或 ds2.xlarge 节点类型,请使用当前节点数量的一半或两倍数量。例如,6 节点集群的大小可以调整为 12 个节点或 3 个节点。
  • 对于 dc2.8xlarge、ds2.8xlarge、ra3.4xlarge 或 ra3.16xlarge 节点类型,请使用当前节点数量的一半到两倍之间的数量。例如,6 节点集群的大小可以调整为 3、4、5、7、8、9、10、11 或 12 个节点。

弹性大小调整最佳实践

在 Amazon Redshift 集群上执行弹性大小调整时,请考虑以下最佳做法:

以下是展示如何使用 describe-node-configuration-options 命令的示例:

aws redshift describe-node-configuration-options --action-type resize-cluster --cluster-identifier <Cluster Name> --region <Cluster Region>

以下是展示如何使用 resize-cluster 命令的示例:

aws redshift resize-cluster --cluster-identifier  <Cluster Name> --cluster-type multi-node --node-type <Target Node Type> --number-of-nodes <Number of Target Nodes> --no-classic —region <Cluster Region>

其他注意事项

在 Amazon Redshift 集群上执行弹性大小调整时,请查看以下其他注意事项:

  • 弹性大小调整需要集群快照。您可以使用控制台管理快照,也可以使用 Amazon Redshift CLI 和 API 来管理。注意:如果在运行 AWS CLI 命令时收到错误,请确保您使用的是最新版本的 CLI
  • 在 Amazon Redshift 中启动弹性大小调整操作后,就无法再取消该操作。请等待大小调整操作完成,然后再执行另一项大小调整操作或者重新启动集群。
  • 新节点配置必须有足够的存储空间来存储现有数据。即使在添加节点的时候,新配置也可能因重新分配数据的方式而没有足够的存储空间有关存储空间的更多信息,请参阅为什么 Amazon Redshift 集群中的表使用的磁盘存储空间高于或低于预期?
  • 如果您在 Amazon Redshift 集群上执行了弹性大小调整,可能会因数据切片分配不均而导致节点之间出现数据偏差。如果您发现 Amazon Redshift 集群中存在数据偏差,请改为执行经典大小调整。
  • 如果经典大小调整对您的使用案例而言为最佳方案,请对 Amazon Redshift 集群执行经典大小调整。例如,要将大小调整为单节点集群时,您可以执行经典大小调整。弹性大小调整允许您通过保留原始配置的切片数,在集群中添加或移除节点。但可能会带来性能差异。如果希望节点切片与目标节点类型中的切片数匹配,则请使用经典大小调整。有关更多信息,请参阅在 Amazon Redshift 中调整集群大小