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

Amazon Redshift 快照

概览

快照是集群的时间点备份。存在两种类型的快照:自动手动。Amazon Redshift 通过使用加密的安全套接字层 (SSL) 连接,在 Amazon S3 内部存储这些快照。

Amazon Redshift 会自动拍摄增量快照,来跟踪自上次自动快照拍摄以来集群发生的变化。自动快照保留从快照还原集群所需的全部数据。您可以创建快照计划来控制何时拍摄自动快照,也可以随时拍摄手动快照。

当您从快照还原时,Amazon Redshift 将创建一个新集群并使该新集群在所有数据都已加载前可用,从而使您可以立即开始查询新集群。该集群将按需流式传输来自快照的数据以响应活动查询,然后在后台加载剩余的数据。

在启动集群时,可以设置自动快照和手动快照的保留期。您可以通过修改集群来更改自动快照和手动快照的保留期。您可以在创建快照时或通过修改快照来更改手动快照的保留期。

您可以通过下列方式监控快照进度:在 AWS 管理控制台中查看快照详细信息、调用 CLI 中的 describe-cluster-snapshots 或调用 DescribeClusterSnapshots API 操作。对于正在进行的快照,通过上述方式可以看到增量快照的大小、传输速率、已用时间以及估计的剩余时间等信息。

为了确保您的备份始终对集群可用,Amazon Redshift 将快照存储在由 Amazon Redshift 管理的内部托管 Amazon S3 存储桶中。Amazon Redshift 为快照提供与集群的存储容量相等的免费存储容量,直到删除集群为止。当您达到免费快照存储限额后,就需要按标准费率支付任何额外存储费用。因此,您不仅需要估计需要保留快照多少天并相应地配置自动快照的保留期,还需删除所有不再需要的手动快照。有关定价信息,请参阅 Amazon Redshift 产品详细信息页面

自动快照

当某个群集的自动快照处于启用状态时,Amazon Redshift 会定期拍摄该群集的快照。默认情况下,Amazon Redshift 大约每 8 小时或在每节点数据更改达到 5 GB 时拍摄一次快照,以先到者为准。或者,您也可以创建快照计划来控制何时拍摄自动快照。当您创建集群时,自动快照默认处于启用状态。

系统会在保留期结束时删除自动快照。默认保留期为一天;不过,您可以使用 Amazon Redshift 控制台对其进行修改,也可以使用 Amazon Redshift API 或 CLI 以编程方式对其进行修改。

要禁用自动快照,只需将保留期设置为零即可。如果您禁用自动快照,则 Amazon Redshift 会停止制作快照并删除相应集群的任何现有自动快照。

仅 Amazon Redshift 能够删除自动快照;您无法手动将其删除。Amazon Redshift 会在下列情况下删除自动快照:快照保留期结束、您禁用了集群的自动快照或删除集群。Amazon Redshift 保留最新的自动快照,直到您禁用自动快照或删除集群。

如果您想要将自动快照保留更长时间,则可以创建一份副本作为手动快照。自动快照会保留至保留期结束;而相应的手动快照在您将其手动删除前或保留期结束前将会一直保留。

自动快照计划

要精确控制拍摄快照的时间,您可以创建快照计划并将其附加到一个或多个集群。修改快照计划时,将修改所有关联集群的计划。如果集群未附加快照计划,其将使用默认的自动快照计划。

快照计划 是一组计划规则。您可以基于指定的时间间隔(例如每 8 小时或每 12 小时)定义简单的计划规则。也可以添加规则来在一周中的某些天、特定时间或特定时段拍摄快照。此外,您还可以使用类 Unix 系统的 cron 表达式定义规则。

快照计划格式

您可以在 Amazon Redshift 控制台中创建快照计划。然后,您可以将计划附加到集群来触发创建系统快照。可以将计划附加到多个集群,也可以在计划中创建多个 cron 定义来触发快照。

您可以使用 cron 语法为快照定义计划。这些计划的定义使用经过修改的类 Unix 系统的 cron 语法。以协调世界时 (UTC) 格式指定时间。您可以创建最大频率为 1 小时、最小精度为 1 分钟的计划。

Amazon Redshift 修改后的 cron 表达式有 3 个必填字段,之间以空格分隔。

语法

cron(Minutes Hours Day-of-week)
字段 通配符

分钟

0–59

Hours

0–23

, - * /

星期几

1–7 或 SUN-SAT

, - * /

通配符

  • ,(逗号)通配符包含其他值。在 Day-of-week 字段中,MON,WED,FRI 将包含星期一、星期三和星期五。总值限制为每字段 24 个。

  • -(破折号)通配符用于指定范围。在 Hour 字段中,1–15 将包含指定日期的 1 - 15 小时。

  • *(星号)通配符包含该字段中的所有值。在 Hours 字段中,* 将包含每个小时。

  • /(正斜杠)通配符用于指定增量。在 Hours 字段中,您可以输入 1/10 来指定从当天的第 1 个小时开始每隔 10 小时(例如,01:00、11:00 和 21:00)。

限制

  • 不支持导致备份频率小于 1 小时或大于 24 小时的快照计划。如果您有重叠的计划导致在 1 小时时段内计划了多次快照,将产生验证错误。

在创建计划时,您可以使用以下示例 cron 字符串。

分钟 Hours 星期几 意义

0

14-20/1

TUE

星期二下午 2 点到晚上 8 点之间,每小时拍摄一次。

0

21

MON-FRI

星期一到星期五,每晚 9 点拍摄一次。

30

0/6

SAT-SUN

星期六和星期日从当天午夜 30 分 (00:30) 开始,每 6 小时拍摄一次。这导致在每天的 [00:30、06:30、12:30 和 18:30] 拍摄快照。

30

12/4

*

每天从 12:30 开始,每 4 小时拍摄一次。这将解析为 [12:30、16:30、20:30]。

例如,要运行每天从 15:15 开始、每 2 小时拍摄一次的计划(解析为 [15:15、17:15、19:15、21:15、23:15]),请指定:

cron(15 15/2 *)

您可以在计划中创建多个 cron 计划定义。例如,以下 AWS CLI 命令在一个计划中包含两个 cron 计划。

create-snapshot-schedule --schedule-identifier "my-test" --schedule-definition "cron(0 17 SAT,SUN)" "cron(0 9,17 MON-FRI)"

手动快照

您可以随时制作手动快照。默认情况下,即使您删除相应集群,手动快照也会无限期保留。您可以在创建手动快照时指定保留期,也可以通过修改快照来更改保留期。如果使用 Amazon Redshift 控制台创建快照,默认会将快照保留期设置为 365 天。

如果删除某个快照,则无法启动任何引用该快照的新操作。不过,如果某个还原操作正在进行中,则该还原操作会运行完成。

Amazon Redshift 设有配额,用以限制您能够创建的手动快照的总数;该配额因不同的 AWS 账户及不同的 AWS 区域而异。AWS 服务限制中列出了默认的配额。

管理快照存储

由于快照会产生存储费用,因此,当您不再需要快照时,务必将其手动删除。Amazon Redshift 会在各自的快照保留期结束时删除自动和手动快照。您也可以使用 AWS 管理控制台或 batch-delete-cluster-snapshots CLI 命令来删除手动快照。

您可以通过修改手动快照设置来更改手动快照的保留期。

您可以使用 Amazon Redshift 控制台或 describe-storage CLI 命令获取有关快照占用的存储量的信息。

从快照中排除表

默认情况下,所有用户定义的永久表都包含在快照中。如果表(如暂存表)不需要备份,您可以显著降低创建快照并从快照还原所需的时间。您还可以使用无备份表减小在 Amazon S3 上占用的存储空间。要创建无备份表,请在创建该表时包含 BACKUP NO 参数。有关更多信息,请参阅 Amazon Redshift Database Developer Guide 中的 CREATE TABLECREATE TABLE AS

将快照复制到另一个 AWS 区域

您可以配置 Amazon Redshift,以将集群的快照(自动或手动)自动复制到另一个 AWS 区域。在集群的主要 AWS 区域创建快照时,它会复制到辅助 AWS 区域。这两个 AWS 区域分别称为源 AWS 区域目标 AWS 区域。如果您在另一个 AWS 区域中存储快照副本,则在有任何事情影响主要 AWS 区域时,您可以使用最新数据还原集群。您可以配置集群,一次仅将快照复制到一个目标 AWS 区域。有关 Amazon Redshift 区域的列表,请参阅 Amazon Web Services 一般参考 中的区域和终端节点

启用 Amazon Redshift 以自动将快照复制到另一个 AWS 区域时,您需要指定要将快照复制到哪个目标 AWS 区域。对于自动快照,您也可以指定此类快照在目标 AWS 区域中的保留期。自动快照复制到目标 AWS 区域且达到保留期之后,便会从目标 AWS 区域删除。这样做可以降低快照的使用率。若要让自动快照在目标 AWS 区域中保留更短时间或更长时间,请更改此保留期。

您为复制到目标 AWS 区域的自动快照设置的保留期与源 AWS 区域中的自动快照的保留期无关。复制的快照的默认保留期为七天。该七天保留期仅适用于自动快照。在源和目标 AWS 区域中,将在快照保留期结束时或手动删除时删除手动快照。

您可以随时禁用集群的自动快照复制功能。当您禁用此功能时,快照将不再从源 AWS 区域复制到目标 AWS 区域。复制到目标 AWS 区域的所有自动快照都将在达到保留期时删除,除非您为其创建手动快照副本。此类手动快照以及从目标 AWS 区域复制的所有手动快照在您将其手动删除之前将会一直保留在目标 AWS 区域中。

若要更改用于接收复制快照的目标 AWS 区域,请先禁用自动复制功能。然后重新启用它,并指定新的目标 AWS 区域。

某个快照复制到目标 AWS 区域之后,便处于活动和可用状态,可用于还原相关内容。

若要将 AWS KMS 加密的集群的快照复制到另一个 AWS 区域,请为 Amazon Redshift 创建权限授予,以便在目标 AWS 区域中使用 KMS 客户主密钥 (CMK)。然后在启用源 AWS 区域中的快照复制功能时选择该权限授予。有关配置快照复制授予的更多信息,请参阅将 AWS KMS 加密的快照复制到另一个 AWS 区域

从快照还原集群

快照包含来自您的集群上运行的任何数据库的数据。它还包含有关集群的信息,包括节点数、节点类型和主用户名称。如果您从快照恢复集群,Amazon Redshift 会使用集群信息来创建新集群。然后它会从快照数据中恢复所有数据库。

对于从源快照创建的新集群,您可以选择配置,例如节点类型和节点数。除非您在请求中指定另一个可用区,否则集群在同一 AWS 区域和系统选择的随机可用区中恢复。当您从快照还原集群时,可为新群集选择兼容的维护跟踪。

注意

当您将快照恢复到具有不同配置的集群时,该快照必须在集群版本为 1.0.10013 或更高版本的集群上获取。

您可以通过下列方式监控还原进度:调用 DescribeClusters API 操作或在 AWS 管理控制台 中查看集群详细信息。对于正在进行的还原,通过上述方式可以看到快照数据的大小、传输速率、已用时间以及估计的剩余时间等信息。有关这些指标的说明,请参阅 RestoreStatus

您无法使用快照将活动的集群还原为之前的状态。

注意

当您将快照还原为新集群时,如果您没有指定其他值,则使用默认的安全组和参数组。

出于以下原因,您可能想要将快照恢复到具有不同配置的集群:

  • 集群由较小的节点类型组成,且您想要将它合并到具有较少节点的较大节点类型。

  • 您监控工作负载并确定需要迁移到具有更多 CPU 和存储的节点类型。

  • 您想要衡量具有不同节点类型的测试工作负载的性能。

以下步骤使用 AWS CLI 获取具有许多节点的集群,并将它合并到具有较少节点数的更大节点类型。在此示例中,我们从一个具有 24 个 ds2.xlarge 节点的源集群开始。在本例中,假设我们已经为此集群创建了一个快照,并且我们想要将它恢复到更大的节点类型。

  1. 运行以下命令,获取 24 节点 ds2.xlarge 集群的详细信息。

    aws redshift describe-clusters --region eu-west-1 -—cluster-identifier mycluster-123456789012
  2. 运行以下命令,获取快照的详细信息。

    aws redshift describe-cluster-snapshots --region eu-west-1 -—snapshot-identifier mycluster-snapshot
  3. 运行以下命令,描述此快照可用的选项。

    aws redshift describe-node-configuration-options --snapshot-identifier mycluster-snapshot --region eu-west-1 -—action-type restore-cluster

    此命令会返回一个选项列表,包括每个选项的建议节点类型、节点数和磁盘利用率。在此示例中,上述命令列出以下可能的节点配置。我们选择恢复到三节点 ds2.8xlarge 集群。

    { "NodeConfigurationOptionList": [ { "EstimatedDiskUtilizationPercent": 65.26134808858235, "NodeType": "ds2.xlarge", "NumberOfNodes": 24 }, { "EstimatedDiskUtilizationPercent": 32.630674044291176, "NodeType": "ds2.xlarge", "NumberOfNodes": 48 }, { "EstimatedDiskUtilizationPercent": 65.26134808858235, "NodeType": "ds2.8xlarge", "NumberOfNodes": 3 }, { "EstimatedDiskUtilizationPercent": 48.94601106643677, "NodeType": "ds2.8xlarge", "NumberOfNodes": 4 }, { "EstimatedDiskUtilizationPercent": 39.156808853149414, "NodeType": "ds2.8xlarge", "NumberOfNodes": 5 }, { "EstimatedDiskUtilizationPercent": 32.630674044291176, "NodeType": "ds2.8xlarge", "NumberOfNodes": 6 } ] }
  4. 运行以下命令,将快照恢复到我们选择的集群配置。恢复此集群之后,我们拥有与源集群相同的内容,但数据已合并到三个 ds2.8xlarge 节点。

    aws redshift restore-from-cluster-snapshot --region eu-west-1 --snapshot-identifier mycluster-snapshot -—cluster-identifier mycluster-123456789012-x --node-type ds2.8xlarge --number-of-nodes 3

从快照还原表

您可以从快照还原单个表而不是还原整个集群。在从快照还原单个表时,需要指定源快照、数据库、schema 和表名以及目标集群、schema 和已还原表的新表名。

新表名不能是现有表的名称。要将现有表替换为从快照还原的表,请先重命名或删除现有表,然后再从快照还原表。

使用源表的列定义、表属性和列属性(外键除外)创建目标表。为了防止因依赖项而导致发生冲突,目标表不从源表继承外键。不向目标表应用任何依赖项(例如,源表上的视图或授予的权限)。

如果源表的所有者存在,那么该用户是已还原的表的所有者,前提是该用户拥有足够的权限成为在指定数据库和 schema 中指定的关系的所有者。否则,已还原的表由在启动集群时创建的主用户所有。

已还原的表将返回在执行备份时其所处的状态。这包括由 Amazon Redshift 对可序列化隔离的符合性定义的事务可见性规则,这意味着数据将立即对在备份后启动的进行中事务可见。

从快照还原表受以下限制:

  • 您只能将表还原到当前正在运行的活动集群,并且只能从针对该集群制作的快照还原表。

  • 一次只能还原一个表。

  • 无法从在调整集群大小之前制作的集群快照还原表。

使用 Amazon Redshift 控制台从快照还原表

  1. 登录 AWS 管理控制台 并通过以下网址打开 Amazon Redshift 控制台:https://console.amazonaws.cn/redshift/

  2. 选择 Clusters (集群),然后选择一个集群。

  3. 选择 Table restore 选项卡。

  4. 选择 Restore table

  5. Table restore 面板中,选择包含要从中还原的集群快照的日期范围。例如,您可以为上周制作的集群快照选择 Last 1 Week

  6. 添加以下信息:

    • From snapshot – 包含要从中还原的表的集群快照的标识符。

    • Source table to restore from

      • Database – 包含要从中还原的表的集群快照中的数据库名称。

      • Schema – 包含要从中还原的表的集群快照中的数据库 schema 名称。

      • Table – 要从中还原的集群快照的表名。

    • Target table to restore to

      • Database – 要将表还原到的目标集群中的数据库名称。

      • Schema – 要将表还原到的目标集群中的数据库 schema 名称。

      • New table name – 已还原的表的新名称。此名称不能是目标数据库中的现有表的名称。

  7. 选择 Restore 可还原表。

如果您已从集群快照还原至少一个表,则可将上一个表还原请求中的值复制到新的表还原请求。此方法意味着,您无需为多个表还原操作重新键入相同的值。

从上一个表还原请求复制到新的表还原操作:

  1. Table restore 选项卡中,选择现有表还原状态。

  2. 选择 Copy restore request

例 示例:使用 AWS CLI 从快照还原表

以下示例使用 restore-table-from-cluster-snapshot AWS CLI 命令从 my-source-table 中的 sample-database schema 还原 my-snapshot-id 表。此示例将快照还原到具有新表名 mycluster-examplemy-new-table 集群。

aws redshift restore-table-from-cluster-snapshot --cluster-identifier mycluster-example --new-table-name my-new-table --snapshot-identifier my-snapshot-id --source-database-name sample-database --source-table-name my-source-table

共享快照

您可以授权其他 AWS 客户账户访问现有手动快照,以与其共享该快照。对于每个快照,最多可以授权 20 个客户账户;对于每个 AWS Key Management Service (AWS KMS) 密钥,则最多可以授权 100 个。例如,如果您有 10 个快照,它们使用了一个 KMS 密钥加密,那么您可以授权 10 个 AWS 账户来还原每个快照,或者是其他组合:总共 100 账户以及每个快照不超过 20 个账户。然后,以用户身份登录其中一个已授权账户的人可以对快照加以说明,也可以还原快照以在其账户下创建一个新的 Amazon Redshift 集群。例如,如果您针对生产和测试使用不同的 AWS 客户账户,则用户可以使用生产账户登录并与使用测试账户的用户共享快照。然后,以测试账户用户身份登录的人可以还原快照以创建一个新的集群,该集群由测试账户所有,用于测试或诊断工作。

手动快照由在其下创建该快照的 AWS 客户账户永久所有。只有拥有相应快照的账户中的用户可以授权其他账户访问该快照或撤消授权。已授权账户中的用户只能对与其共享的任何快照加以说明或还原相应快照;他们无法复制或删除与其共享的快照。授权在快照所有者将其撤消之前保持有效。如果所有者撤消授权,则之前已获授权的用户将无法再看到相应快照,也无法再启动任何引用该快照的新操作。如果在所有者撤消授权时相应账户正在还原快照,则该还原操作会运行完成。您无法删除具有活跃授权的快照;必须先撤消所有授权。

AWS 客户账户始终能够访问相应账户所有的快照。如果尝试授予或撤消对所有者账户的访问权限,则会收到一条错误消息。您无法还原由非活动 AWS 客户账户所有的快照,也无法对其加以说明。

您获得访问 AWS 客户账户的授权之后,那么该账户中便没有任何 IAM 用户可以针对相应快照执行任何操作,除非他们具有相应的 IAM 策略,允许他们这样做。

  • 快照所有者账户中的 IAM 用户只能在以下情况下授予和撤消快照访问权限:此类用户具有相应的 IAM 策略,允许他们通过包含该快照的资源规范执行此类操作。例如,以下策略允许 AWS 账户 (012345678912) 中的用户授权其他账户访问名为 my-snapshot20130829 的快照:

    { "Version": "2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "redshift:AuthorizeSnapshotAccess", "redshift:RevokeSnapshotAccess" ], "Resource":[ "arn:aws:redshift:us-east-1:012345678912:snapshot:*/my-snapshot20130829" ] } ] }
  • 与其共享快照的 AWS 账户中的 IAM 用户无法针对该快照执行操作,除非他们具有相应的 IAM 策略,允许他们执行这些操作:

    • 要列出快照或对其加以说明,相应用户必须具有相应的 IAM 策略,允许他们执行 DescribeClusterSnapshots 操作。下方代码显示了一个示例:

      { "Version": "2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "redshift:DescribeClusterSnapshots" ], "Resource":[ "*" ] } ] }
    • 要还原快照,用户必须具有相应的 IAM 策略,允许他们执行 RestoreFromClusterSnapshot 操作,且该策略要有一个资源元素,同时涵盖他们尝试创建的集群以及相应快照。例如,如果账户 (012345678912) 中的用户与账户 (my-snapshot20130829) 共享了快照 (219876543210),则要通过还原快照来创建集群,账户 (219876543210) 中的用户必须具有诸如以下的策略:

      { "Version": "2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "redshift:RestoreFromClusterSnapshot" ], "Resource":[ "arn:aws:redshift:us-east-1:012345678912:snapshot:*/my-snapshot20130829", "arn:aws:redshift:us-east-1:219876543210:cluster:from-another-account" ] } ] }
    • 撤消 AWS 账户的快照访问权限之后,该账户中没有任何用户可以访问该快照,即使其中的用户具有相应的 IAM 策略,允许他们针对之前共享的快照资源执行操作也是如此。