Amazon Redshift
管理指南 (API Version 2012-12-01)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

教程:使用快照、还原和调整大小操作调整群集大小

本部分将向您介绍在调整大小的过程中使用快照和还原操作来调整 Amazon Redshift 群集的大小的流程。这是高级流程,在下述环境中很有用:您无法或不希望在调整群集大小的某个时间段内停止数据库中的写入和读写操作。如果您不确定调整群集大小需要多长时间,则可以使用此流程为群集拍摄快照并将其还原至新群集中,然后调整其大小以得出估算值。本部分将进一步介绍该流程,说明如何在目标群集完成大小调整后从源群集切换到目标群集。

重要

您需要为所有未删除的群集支付费用。

请通过执行以下流程中的步骤来完成本教程:

先决条件

在开始本教程之前,请确保您具有以下先决条件:

  • 示例群集。在此示例中,您将从您在 Amazon Redshift 入门练习中创建的示例群集入手。如果您没有可用于本教程的示例群集,请完成入门练习以创建一个示例群集,然后再返回到本教程。

  • 用于连接到群集的 SQL 客户端工具或应用程序。本教程将使用您在执行 Amazon Redshift 入门练习中的步骤时安装的 SQL Workbench/J。如果您没有 SQL Workbench/J 或其他 SQL 客户端工具,请参阅使用 SQL Workbench/J 连接到您的群集

  • 示例数据。在本教程中,您将为自己的群集拍摄快照,然后在数据库中执行一些写入查询(它们会导致源群集与您将在其中还原快照的新群集出现数据差异)。在开始本教程之前,请按照 Amazon Redshift 入门练习中所述,从 Amazon S3 中加载包含示例数据的群集。

步骤 1:拍摄快照

  1. 打开 Amazon Redshift console。

  2. 在导航窗格中,单击 Clusters,然后单击相应群集以将其打开。如果您使用的群集与 Amazon Redshift 入门练习中的相同,请单击 examplecluster

  3. Cluster 详细信息页面中的 Configuration 选项卡上,单击 Backup 列表中的 Take Snapshot

  4. Create Snapshot 窗口中,在 Snapshot Identifier 框中键入 examplecluster-source,然后单击 Create

  5. 在导航窗格中,单击 Snapshots,并验证正在新建的手动快照。该快照的状态将显示为 creating

步骤 2:将快照还原到目标群集中

  1. 在导航窗格中,单击 Snapshots,然后选择 examplecluster-source 快照。

  2. 单击 Restore From Snapshot

  3. Choose Platform 窗口中,选择您要将群集还原到其中的平台。如果您的账户和您所在的区域会继续支持 EC2-Classic 平台,请选择 EC2-Classic。否则,请选择 EC2-VPC。然后,单击 Continue

    注意

    如果您选择 EC2-VPC,那么您必须具有群集子网组。有关更多信息,请参阅 创建群集子网组

  4. Restore Cluster From Snapshot 窗口中,请执行以下操作:

    • Snapshot Identifier:检查快照名称 examplecluster-source

    • Cluster Identifier:键入 examplecluster-target

    • Port:保留端口号不变。

    • Allow Version Upgrade:保留此选项设置为 Yes

    • Availability Zone:选择可用区。

    • Cluster Parameter Group:选择要使用的参数组。

    • Cluster Security Group:选择要使用的一个或多个安全组。

  5. 在导航窗格中,单击 Clusters。系统将会根据源群集的快照创建一个新群集 examplecluster-target

    首先,创建目标群集。此时,Cluster Status 的值为 creating, restoring

    在目标群集创建完毕后,Cluster Status 的值会变为 available, restoring

  6. 单击 examplecluster-target 以将其打开。此时,Cluster Status 的值应显示为 availableRestore Status 的值应显示为 completed

步骤 3:验证目标群集中的数据

在还原操作完成后,您可以验证目标群集中的数据是否与您在源群集快照中拥有的数据一致。您可以使用 SQL 客户端工具连接到目标群集并运行查询来验证新群集中的数据。例如,您可以运行您在 Amazon Redshift 入门练习中运行的相同查询:

Copy
-- Get definition for the sales table. SELECT * FROM pg_table_def WHERE tablename = 'sales'; -- Find total sales on a given calendar date. SELECT sum(qtysold) FROM sales, date WHERE sales.dateid = date.dateid AND caldate = '2008-01-05'; -- Find top 10 buyers by quantity. SELECT firstname, lastname, total_quantity FROM (SELECT buyerid, sum(qtysold) total_quantity FROM sales GROUP BY buyerid ORDER BY total_quantity desc limit 10) Q, users WHERE Q.buyerid = userid ORDER BY Q.total_quantity desc; -- Find events in the 99.9 percentile in terms of all-time gross sales. SELECT eventname, total_price FROM (SELECT eventid, total_price, ntile(1000) over(order by total_price desc) as percentile FROM (SELECT eventid, sum(pricepaid) total_price FROM sales GROUP BY eventid)) Q, event E WHERE Q.eventid = E.eventid AND percentile = 1 ORDER BY total_price desc;

步骤 4:调整目标群集的大小

在验证目标群集可按预期正常运行后,您可以调整目标群集的大小。您可以继续允许源群集中的写入和读写操作,因为在本教程的后面部分,您需要将在拍摄快照后加载的所有数据都复制到目标群集中。

  1. 打开 Amazon Redshift console。

  2. 在导航窗格中,单击 Clusters,然后单击相应群集以将其打开。如果您使用的群集与本教程中的相同,请单击 examplecluster-target

  3. Cluster 详细信息页面中的 Configuration 选项卡上,单击 Cluster 列表中的 Resize

  4. Resize Cluster 窗口中,选择以下值:

    • Node Typedc1.large

    • Cluster TypeMulti Node

    • Number of Nodes2

  5. 单击 Resize

  6. 单击 Status,查看调整状态信息以了解调整进度。

步骤 5:将拍摄快照后加载的数据从源群集复制到目标群集

在本教程的此步骤中,我们提供了一组简单的 COPY 语句,用于将数据从 Amazon S3 加载到 Amazon Redshift 中。您可以通过此步骤模拟如何使目标群集与源群集中的相同数据保持同步。这并不意味着应努力使源群集和目标群集之间的实际生产环境保持一致。在生产环境中,您的 ETL 流程会确定如何加载目标群集,以使其拥有源群集在拍摄快照后所拥有的全部数据。

如果您在拍摄快照后有多个加载项,则需确保自己能够按照相关加载项在源数据库中的运行顺序,在目标数据库中重新运行这些加载项。此外,如果在您更新目标群集时仍有其他数据在向源数据库中加载,则您需要重复执行此流程,直到目标与源数据一致为止;同时,您需要找个合适的时间重命名这些群集,并将应用程序切换为连接到目标数据库。

在此示例中,假设您的 ETL 流程在拍摄快照后会将数据加载到源群集中。此时,Amazon Redshift 可能仍在从快照还原目标群集或调整目标群集的大小。TICKIT 数据库中将会添加一些新类别、事件、日期和地点。您现在需要将这些相同的数据加载到目标群集中,然后再切换为使用目标群集。

首先,您需要使用以下 COPY 语句将新数据从 Amazon S3 加载到目标群集中 Amazon Redshift TICKIT 数据库内的相应表中。

本教程的示例数据由 Amazon Redshift 所拥有的 Amazon S3 存储桶提供。存储桶权限经过配置,为所有已通过身份验证的 AWS 用户授予示例数据文件的读取访问权限。要加载示例数据,请确保您的 IAM 用户具备以下条件:

  • 您的访问密钥和秘密访问密钥。如果您不知道这些密钥,则可以创建新的密钥。有关更多信息,请转到 IAM 用户指南 中的管理 IAM 用户的访问密钥

  • 至少拥有对 Amazon S3 资源的 LISTGET 权限。通过将 AmazonS3ReadOnlyAccess 托管策略挂载到 IAM 用户或 IAM 用户所属的组,您可以向 IAM 用户授予这些权限。有关挂载策略的更多信息,请转到 IAM 用户指南 中的使用托管策略

    注意

    如果没有适当的 Amazon S3 权限,在运行 COPY 命令时,您会收到以下错误消息:S3ServiceException: Access Denied

为 IAM 用户将 <access-key-id><secret-access-key> 替换为访问密钥和秘密访问密钥。然后,在您的 SQL 客户端工具中运行命令。

Copy
copy venue from 's3://awssampledb/resize/etl_venue_pipe.txt' CREDENTIALS 'aws_access_key_id=<Your-Access-Key-ID>;aws_secret_access_key=<Your-Secret-Access-Key>' delimiter '|' region 'us-east-1'; copy category from 's3://awssampledb/resize/etl_category_pipe.txt' CREDENTIALS 'aws_access_key_id=<Your-Access-Key-ID>;aws_secret_access_key=<Your-Secret-Access-Key>' delimiter '|' region 'us-east-1'; copy date from 's3://awssampledb/resize/etl_date_pipe.txt' CREDENTIALS 'aws_access_key_id=<Your-Access-Key-ID>;aws_secret_access_key=<Your-Secret-Access-Key>' delimiter '|' region 'us-east-1'; copy event from 's3://awssampledb/resize/etl_events_pipe.txt' CREDENTIALS 'aws_access_key_id=<Your-Access-Key-ID>;aws_secret_access_key=<Your-Secret-Access-Key>' delimiter '|' timeformat 'YYYY-MM-DD HH:MI:SS' region 'us-east-1';

步骤 6:重命名源群集和目标群集

在验证目标群集已与 ETL 流程中所需的全部数据保持同步后,您可以切换到目标群集。如果您需要使用源群集的名称,则需手动完成一些步骤才能切换。这些步骤包括重命名源群集和目标群集。在此期间,这两种群集在短时间内将不可用。不过,如果您能够通过更新任何数据源来使用新的目标群集,则可跳过这一部分。

  1. 打开 Amazon Redshift console。

  2. 在导航窗格中,单击 Clusters,然后单击相应群集以将其打开。如果您使用的群集与本教程中的相同,请单击 examplecluster

  3. Cluster 详细信息页面中的 Configuration 选项卡上,单击 Cluster 列表中的 Modify

  4. Modify Cluster 窗口中,在 New Cluster Identifier 框中键入 examplecluster-source,然后单击 Modify

  5. 在导航窗格中,单击 Clusters,然后单击 examplecluster-target

  6. Cluster 详细信息页面中的 Configuration 选项卡上,单击 Cluster 列表中的 Modify

  7. Modify Cluster 窗口中,在 New Cluster Identifier 框中键入 examplecluster,然后单击 Modify

如果您有任何查询正在源群集中运行,则需在目标群集上重新启动这些查询并将其运行至完成。

步骤 7:删除源群集

如果您确定不再需要源群集,则可将其删除。在生产环境中,根据您的数据策略决定是否保留最终快照。在本教程中,您将删除无最终快照的群集,因为您使用的是示例数据。

重要

您需要为所有未删除的群集支付费用。

  1. 打开 Amazon Redshift console。

  2. 在导航窗格中,单击 Clusters,然后单击相应群集以将其打开。如果您使用的群集名称与本教程中的相同,请单击 examplecluster-source

  3. Cluster 详细信息页面中的 Configuration 选项卡上,单击 Cluster 列表中的 Delete

  4. Delete Cluster 窗口中,单击 Create final snapshot 对应的 No,然后单击 Delete

步骤 8:清除您的环境

完成本教程后,您可以通过删除目标群集来清除您的环境。为此,请按照步骤 7:删除源群集中的步骤操作,并改为删除目标群集。这样做会将您的环境返回至其在您开始本教程之前所处的状态。将环境返回至原始状态极其有助于减少与运行群集相关的任何费用。

重要

您需要为所有未删除的群集支付费用。