Amazon Redshift
集群管理指南 (API Version 2012-12-01)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

将未加密集群迁移到加密集群

您可以在启动集群时启用加密。要从未加密集群迁移到加密集群,您必须先从现有源集群中卸载数据。然后,将数据重新加载到使用所选加密设置的新目标集群。有关启动加密集群的更多信息,请参阅Amazon Redshift 数据库加密。在迁移过程中,直至最后一步之前,您的源集群可供只读查询使用。最后一步是重命名目标集群和源集群,这将切换终端节点,使得所有流量都路由到新的目标集群。在重命名之后,直到重新启动目标集群后,目标集群才可用。在数据传输期间,源集群上的所有数据加载和其他写入操作将暂停。

准备迁移

  1. 确定与 Amazon Redshift 交互的所有关联系统,例如商业智能 (BI) 工具以及提取、转换和加载 (ETL) 系统。

  2. 确定验证查询以测试迁移。

    例如,您可以使用以下查询来查找用户定义表的数量。

    select count(*) from pg_table_def where schemaname != 'pg_catalog';

    以下查询返回所有用户定义表以及各个表中的行数的列表。

    select "table", tbl_rows from svv_table_info;
  3. 选择适合您迁移的时间。要找到集群使用率最低的时间,请监控 CPU 使用率和数据库连接数等集群指标。有关更多信息,请参阅 查看集群性能数据

  4. 删除未使用的表。

    要创建表及每个表查询次数的列表,请运行以下查询。

    select database, schema, table_id, "table", round(size::float/(1024*1024)::float,2) as size, sortkey1, nvl(s.num_qs,0) num_qs from svv_table_info t left join (select tbl, perm_table_name, count(distinct query) num_qs from stl_scan s where s.userid > 1 and s.perm_table_name not in ('internal worktable','s3') group by tbl, perm_table_name) s on s.tbl = t.table_id where t."schema" not in ('pg_internal');
  5. 启动新的加密集群。

    为目标集群使用与源集群相同的端口号。有关启动加密集群的更多信息,请参阅Amazon Redshift 数据库加密

  6. 设置卸载和加载过程。

    您可以使用 Amazon Redshift 卸载/复制实用程序来帮助您在集群之间迁移数据。该实用程序可将数据从源集群导出到 Amazon S3 上的位置。数据使用 AWS KMS 进行加密。然后,实用程序会自动将数据导入到目标中。或者,您可以使用该实用程序在迁移完成后清除 Amazon S3。

  7. 运行测试来验证您的流程,并估计写入操作需要暂停多长时间。

    在卸载和加载操作期间,通过暂停数据加载和其他写入操作来确保数据一致性。使用您最大的表之一完整地运行卸载和加载过程,以帮助您估计时间。

  8. 创建数据库对象,例如架构、视图和表。为帮助生成必需的数据定义语言 (DDL) 语句,您可以使用 AWS GitHub 存储库的 AdminViews 中的脚本。

要迁移您的集群,请执行以下操作:

  1. 停止源集群上的所有 ETL 进程。

    要确认进程中未执行任何写入操作,请使用 Amazon Redshift 管理控制台来监控写入 IOPS。有关更多信息,请参阅 查看集群性能数据

  2. 运行您之前确定的验证查询,以便在迁移前收集有关未加密源集群的信息。

  3. (可选) 创建一个工作负载管理 (WLM) 队列以使用源集群和目标集群中的最大可用资源。例如,创建名为 data_migrate 的队列并且为队列配置 95% 的内存和并发度 4。有关更多信息,请参阅 Amazon Redshift Database Developer Guide 中的基于用户组和查询组将查询路由至队列

  4. 使用 data_migrate 队列运行 UnloadCopyUtility。

    使用 Amazon Redshift 控制台监控 UNLOAD 和 COPY 进程。

  5. 再次运行验证查询并验证结果与来自源集群的结果匹配。

  6. 重命名您的源和目标集群以交换终端节点。有关更多信息,请参阅 步骤 6:重命名源集群和目标集群。为避免中断,请在工作时间之外执行此操作。

  7. 验证您可以使用所有 SQL 客户端 (例如 ETL 和报告工具) 连接到目标集群。

  8. 关闭未加密的源集群。