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

上次更新时间:2020 年 10 月 21 日

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

简短描述

Amazon Redshift 允许您在集群大小调整期间迁移到特定数量的节点。默认情况下,Amazon Redshift 旨在保持目标集群中相同数量的切片。通过切片映射,调整集群大小所需的时间会减少。在切片映射过程中,Amazon Redshift 会将集群切片重新分配至目标集群中的新计算节点。

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

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

解决方法

弹性大小调整的工作原理

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

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

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

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

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

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

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

DC2 和 DS2 节点计数建议

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

  • 对于 dc2.large 或 ds2.xlarge 节点类型,请使用当前节点数量的一半或两倍数量。例如,6 节点集群可以调整为 12 个节点或 6 个节点。
  • 对于 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 CLI 命令获取大小调整操作的可能节点配置。
    注意:如果在运行 AWS CLI 命令时收到错误,请确保您使用的是最新版本的 CLI
  • 在执行大小调整之前,先对集群运行 VACUUM 命令。弹性大小调整不会自动删除标记为删除的行。
  • 使用 resize-cluster 命令调整集群的大小。 

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

aws redshift describe-node-configuration-options --action-type resize-cluster --cluster <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 集群执行经典大小调整。例如,在将大小调整为单节点集群时,您只能执行经典大小调整。或者,如果希望节点切片与目标节点类型中的切片数匹配,请执行经典大小调整。