Amazon Redshift
集群管理指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

在 Amazon Redshift 中调整集群大小

随着您的数据仓库容量和性能需求的变化或增长,您可以调整集群大小,以便充分利用 Amazon Redshift 服务所提供的计算和存储选项。您可以使用弹性调整大小通过更改节点数来扩展集群。或者,您可以使用经典调整大小通过指定不同的节点类型来扩展集群。您可以使用下列方法之一来调整集群大小:

  • 弹性调整大小 – 要在集群中快速添加或删除节点,请使用弹性调整大小。集群会在短时间内(通常只有几分钟)不可用。Amazon Redshift 尝试将连接保持打开状态,而查询将暂时暂停。

  • 经典调整大小 – 要更改节点类型和/或节点数量,请使用经典调整大小。在经典调整大小操作期间,集群将处于只读状态,这可能需要几个小时到几天的时间。

  • 快照、还原和调整大小 – 要使集群在经典调整大小期间可用,请先创建现有集群的副本,然后调整新集群的大小。

弹性调整大小

弹性调整大小是调整集群大小的最快方法。弹性调整大小会在现有集群上添加或删除节点,然后自动将数据重新分配到新节点。因为它不会创建新集群,所以弹性调整大小操作通常会在几分钟内快速完成。在后台重新分配数据时,您可能会发现某些查询的执行时间略有增加。

弹性调整大小操作在以下阶段发生:

  1. 弹性调整大小操作将为集群制作快照。

    弹性调整大小操作创建的快照包含无备份表。如果您的集群因禁用了自动快照而没有最近的快照,则备份操作将花费更长时间。要最大程度地减少调整大小操作开始前的时间,我们建议您在开始弹性调整大小操作之前启用自动快照或创建手动快照。有关更多信息,请参阅Amazon Redshift 快照

  2. 当弹性调整大小操作迁移集群元数据时,集群将暂时不可用。

    此阶段很短,最多只有几分钟。Amazon Redshift 将保持会话连接,并且查询保持已排队状态。一些会话和查询可能会超时。

  3. 会话连接将恢复,并且查询将继续。

  4. 弹性调整大小操作在后台数据重新分配到节点切片。

    集群可用于读取和写入操作,但是一些查询可能需要更长的时间来执行。

要使用 Amazon Redshift 控制台监控弹性调整大小操作的进度,请选择集群详细信息页面上的 Status (状态) 选项卡。

您无法在单节点集群上使用弹性调整大小操作,也无法更改节点类型。在此类情况下,您可以使用经典调整大小操作。

弹性调整大小操作不会对表进行排序或回收磁盘空间,因此,它不能替代 vacuum 操作。经典调整大小操作将表复制到新的集群,以便减少对 vacuum 的需求。有关更多信息,请参阅对表执行 vacuum 操作

弹性调整大小操作具有以下限制:

  • 弹性调整大小操作仅适用于使用 EC2-VPC 平台的集群。有关更多信息,请参阅 用于启动集群的受支持平台

  • 新的节点配置必须为现有数据提供足够的存储空间。甚至在添加节点时,由于数据的重新分配方式,新配置可能没有足够的存储空间。

  • 对于 dc2.large 或 ds2.xlarge 节点类型,您可以将原始群集的节点数量增加一倍或一半。例如,一个 4 节点集群可以增加到 8 个节点,或者通过弹性调整大小减少到两个节点。要调整为不同的节点数,您必须使用 经典调整大小

  • 对于 dc2.8xlarge 或 ds2.8xlarge 节点类型,您可以将节点数更改为当前节点数的一半至当前节点数的两倍之间的任意数值。例如,一个 4 节点群集是否可以调整为 2、3、5、6、7 或 8 节点。

注意

使用 经典调整大小 重置节点上限。例如,要从 4 增加到 10 个节点,首先使用经典调整大小操作更改为 5 节点。

经典调整大小

利用经典调整大小操作,您的数据会从源集群中的一个或多个计算节点并行复制到目标集群中的一个或多个计算节点。调整大小所需要的时间取决于较小集群中的数据量和节点数。因此,时间从几小时到几天不等。

当您开始执行调整大小操作时,Amazon Redshift 会将现有集群置于只读模式,直到调整完毕为止。在此期间,您只能运行从数据库读取的查询,而无法运行写入数据库的任何查询,包括读写查询。有关更多信息,请参阅 Amazon Redshift Database Developer Guide 中的写入和读写操作

注意

要调整大小并最大程度地减小对生产的影响,可以使用下一部分(即快照、还原和调整大小)中的步骤。您可以使用这些步骤为您的集群创建一个副本并调整副本的大小,然后在调整大小操作完成后将连接终端节点切换到调整大小后的集群。

经典调整大小方法以及快照和还原方法都会将用户表和数据复制到新集群中;它们不会保留系统表和数据。借助经典调整大小操作或快照和还原操作,如果您在源集群中启用了审计日志记录,则能继续访问 Amazon S3 中的日志。使用这些方法,您仍可在删除源集群后访问日志。您可以根据数据策略的规定保留或删除这些日志。弹性调整大小操作将保留系统日志表。

在 Amazon Redshift 将源集群置于只读模式后,它会预配置新集群(即目标集群)。它使用您为节点类型、集群类型和节点数量指定的信息来完成此操作。然后,Amazon Redshift 会将相关数据从源集群复制到目标集群中。完成这一操作后,所有连接都会切换为使用目标集群。如果您在该切换过程中有任何正在进行的查询,则您的连接将会丢失,且您必须在目标集群上重新启动相关查询。您可以访问 Amazon Redshift console,在集群的 Status 选项卡上查看调整进度。

Amazon Redshift 在执行调整操作时不会对表进行排序,因此现有的排列顺序将保持不变。在您调整集群大小时,Amazon Redshift 会根据数据库表的分配方式将其分配至新的节点,然后运行 ANALYZE 命令来更新统计数据。该服务不会传输标记为删除的行,因此,如果您需要重新对表进行排序,则只需运行 VACUUM 命令即可。有关更多信息,请参阅 Amazon Redshift Database Developer Guide 中的对表执行 vacuum 操作

在调整大小操作完成前,您可以在 Amazon Redshift 控制台中,从集群列表中选择 cancel resize (取消调整大小) 来取消此操作。取消调整大小操作所需的时间取决于取消时调整大小操作所处的阶段。在取消调整大小操作完成前,集群将不可用。如果调整大小操作处于最后阶段,则无法取消该操作。

有关更多信息,请参阅使用控制台调整集群大小

快照、还原和调整大小

如上一部分中所述,使用经典调整大小操作调整集群大小所需要的时间在很大程度上取决于集群中的数据量。

弹性调整大小是调整 Amazon Redshift 集群大小的最快方法。如果弹性调整大小操作不适合您,并且您需要对集群进行近乎持续的写入访问,则可以使用下一部分中所述的快照和还原操作。如果采用此方法,在切换后,您必须手动将在制作快照后写入源集群的所有数据都复制到目标集群中。根据复制用时,您可能需要重复执行此操作多次,直到两个集群中的数据相同。然后,您可以切换到目标集群。在目标集群拥有完整数据集之前,此过程可能会对现有查询产生负面影响。不过,它能最大程度地缩短您无法写入数据库的时间。

快照、还原和调整大小方法使用以下流程:

  1. 为您的现有集群制作快照。现有集群就是源集群。

  2. 记下制作快照的时间。这样做意味着,您稍后可确定需要重新运行提取、事务处理和加载 (ETL) 流程的时间点,从而将制作快照后写入的所有数据都加载到目标数据库中。

  3. 将快照还原到新集群中。这个新集群就是目标集群。验证目标集群中包含示例数据。

  4. 调整目标集群的大小。为目标集群选择新的节点类型、节点数和其他设置。

  5. 查看为源集群制作快照后通过 ETL 流程加载的数据。请确保按相同顺序将相同的数据重新加载到目标集群中。如果您的数据正在不断加载,请重复执行此流程多次,直到源集群和目标集群中的数据相同为止。

  6. 停止在源集群上运行的所有查询。为此,您可以重启集群,或以超级用户的身份登录并使用 PG_CANCEL_BACKENDPG_TERMINATE_BACKEND 命令。重启集群是确保集群不可用的最简单方法。

  7. 重命名源集群。例如,将其从 examplecluster 重命名为 examplecluster-source

  8. 重命名目标集群,使用源集群在重命名之前的名称。例如,将目标集群从之前的名称重命名为 examplecluster。此后,使用包含 examplecluster 的终端节点的所有应用程序都会连接到目标集群。

  9. 在切换到目标集群后删除源集群,并验证所有流程均可按预期正常工作。

或者,您可以在将数据重新加载到目标集群之前重命名源集群和目标集群。如果您不要求任何关联系统和报告立即与目标集群中的相应内容保持同步,则此方法将有效。在这种情况下,步骤 6 将移至前述流程的最后。

仅当您希望应用程序继续使用相同的终端节点连接到集群时,才需要执行重命名流程。如果您没有此要求,则可以更新连接到集群的任何应用程序,以使用目标集群的终端节点,而无需重命名集群。

重新使用集群名称具有诸多优势。首先,您无需更新应用程序的连接字符串,因为终端节点始终保持不变,即使基础集群发生改变也是如此。其次,相关项(例如 Amazon CloudWatch 警报和 Amazon Simple Notification Service (Amazon SNS) 通知)与集群名称相关联。这种关联意味着,您可以继续使用已为集群设置的相同警报和通知。在您希望灵活调整集群大小而无需重新配置相关项目(如警报和通知)的生产环境中,继续使用集群名称关系重大。

使用控制台调整集群大小

您可以使用弹性调整大小或经典调整大小来调整集群的大小。有关调整大小类型的更多信息,请参阅在 Amazon Redshift 中调整集群大小

要使用控制台调整集群大小,请执行以下操作:

  1. 打开 Amazon Redshift console.

  2. 在导航窗格中,选择集群,然后选择要调整大小的集群。

  3. 选择集群,然后选择调整大小

  4. 对于调整大小类型,选择以下任一值:

    • 弹性调整大小

      如果集群配置不支持弹性调整大小,则弹性调整大小将不可用。

    • 经典调整大小

  5. 对于节点数量,选择新的节点计数。对于弹性调整大小,仅有效节点计数可用。

  6. 选择调整大小

  7. 监控集群状态以了解调整大小进度。

使用 CLI 和 API 调整集群大小

要使用 CLI 调整集群大小,请运行 resize-cluster 命令。

要使用 API 调整集群大小,请使用 ResizeCluster 操作。