如何排除从 S3 还原 ElastiCache 集群的故障?
从 Amazon Simple Storage Service (Amazon S3) 还原 Amazon ElastiCache for Redis 备份时,集群创建失败。我收到了“Create-failed”(创建失败)或“Permission denied”(权限被拒绝)”的错误消息。我应该如何对此进行故障排除?
简短描述
以下是从 Amazon S3 还原 ElastiCache 备份失败的常见原因:
- 您正在尝试还原超出备份限制的备份。
- ElastiCache 无法从 Amazon S3 中检索该文件。
- ElastiCache 备份文件位于另一个区域的 Amazon S3 存储桶中。
- 您正在将包含多个数据库的 .rdb 文件还原到 ElastiCache(已启用集群模式)集群。
解决方法
您正在尝试还原超出备份限制的备份
还原 ElastiCache for Redis 备份时,请务必注意以下备份限制:
- 您无法从使用 Redis(已启用集群模式)集群创建的备份还原到 Redis(已禁用集群模式)集群。
- 还原从 ElastiCache(已启用集群模式)集群创建的备份时,您无法在 ElastiCache 控制台中选择“cluster mode disabled”(已禁用集群模式)选项。只有“cluster mode enabled”(已启用集群模式)选项可用。
- 将 ElastiCache(已启用集群模式)集群备份导出到 Amazon S3 时,将创建多个 .rdb 文件(每个分片一个)。如果您尝试从 Amazon S3 为备份设定种子,则只能引用一个备份 (.rdb)。这会导致为单个分片的键设定种子。尝试通过包括通配符来规避这种情况会导致以下错误:
错误:对于以下 S3 对象不存在对象或存储桶:examplebucket/cluster-mode-enabled-*.rdb。
- 您无法从使用数据分层的集群还原备份。例如,您无法将 r6gd 节点还原到不使用数据分层的集群(如 r6g 节点)中。
- 由于 ElastiCache Redis 数据分层的限制,您无法将备份导出到 Amazon S3。因此,您无法从 S3 还原 ElastiCache 数据分层备份。
- 如果 .rdb 文件引用了多个数据库,则您无法从 Redis(已禁用集群模式)集群还原到 Redis(已启用集群模式)集群。尝试这样做将导致以下错误:
错误:要在集群模式下还原快照,RDB 文件中的所有键都应驻留在 DB 0 中。
ElastiCache 无法从 Amazon S3 检索文件
当 ElastiCache 没有访问存储在 S3 存储桶中的 ElastiCache 备份所需的权限时,就会发生此错误。您可以通过查看 ElastiCache Events(ElastiCache 事件)来确认权限问题。
以下示例 ElastiCache 事件显示,Redis 复制组“测试”创建失败,因为 ElastiCache 无法从 S3 检索备份文件:
Restore from snapshot failed for node group 0001 in replication group test. Failed to retrieve file from S3
确定错误的原因是 ElastiCache 无法从 Amazon S3 检索文件后,请确认您的区域是以下区域之一:
选择加入区域需要允许 ElastiCache 从 Amazon S3 检索备份文件的存储桶策略。
如果您的 S3 存储桶位于以下区域之一,则您必须允许 ElastiCache 服务访问 S3 中的备份文件:
- 中国(北京)和中国(宁夏)
- AWS GovCloud(美国西部)
- 默认区域
**注意:**中国(北京)、中国(宁夏)和 AWS GovCloud(美国西部)区域的规范 ID 与默认 AWS 区域不同:
中国(北京)和中国(宁夏)
Canonical ID: b14d6a125bdf69854ed8ef2e71d8a20b7c490f252229b806e514966e490b8d83
AWS GovCloud(美国西部)区域
Canonical ID: 40fa568277ad703bd160f66ae4f83fc9dfdfd06c2f1b5060ca22442ac3ef8be6
AWS 默认区域
Canonical ID: 540804c33a284a299d2547575ce1010f2312ef3da9b3a053c8bc45bf233e4353
使用规范 ID 或存储桶策略授予 ElastiCache 对 Amazon S3 中 .rdb 备份对象的访问权限后,还原 Redis 集群。
ElastiCache 备份文件位于另一个区域的 Amazon S3 存储桶中
以下错误消息表明您正在尝试还原位于另一个区域的 Amazon S3 存储桶中的 ElastiCache 备份:
“访问 S3 对象的权限被拒绝。请使用同一区域中的 S3 对象。”
要解决此问题,请执行以下操作:
1. 将备份 (.rdb) 从包含备份的 S3 存储桶复制到位于还原 Redis 集群的区域中的 S3 存储桶。
以下是一个示例 AWS 命令行界面 (AWS CLI) 命令,您可以使用该命令在不同区域的 Amazon S3 存储桶之间进行复制:
aws s3 cp s3://SourceBucketName/BackupName.rdb s3://DestinationBucketName/BackupName.rdb --acl bucket-owner-full-control --source-region SourceRegionName --region DestinationRegionName
**注意:**如果在运行 AWS CLI 命令时遇到错误,请确保您使用的是最新版本的 AWS CLI。
2. 复制完成后,确认备份 (.rdb) 对象拥有以规范 ID 或存储桶策略的形式分配给它的正确权限。有关正确的规范 ID,请参阅上一节。
现在,备份对象已复制到正确的区域并应用了正确的权限,您可以继续还原集群了。
您正在将包含多个数据库的 .rdb 文件还原到 ElastiCache(已启用集群模式)集群
您无法将包含多个数据库的 Redis 备份 (.rdb) 文件还原到 ElastiCache(已启用集群模式)集群。ElastiCache(已启用集群模式)不支持多个数据库。所有键都应驻留在 DB0 中。您可以通过查看 ElastiCache Events(ElastiCache 事件)来确认这是否是还原失败的原因。
以下示例 ElastiCache 事件显示,由于 .rdb 文件包含多个数据库,Redis 复制组“测试”创建失败。
Restore from snapshot failed for node group 0001 in replication group test. To restore a snapshot in cluster mode, all keys in the RDB file should reside in DB 0. Snapshot ID: arn:aws:s3:::example-bucket/multidb.rdb
要更正此问题,请执行以下操作:
1. 确保将所有键都迁移到单个数据库中。
**注意:**如果源数据库位于 ElastiCache Redis 上,则不支持迁移命令。
2. 当所有键都位于同一个数据库上之后,您可以创建 Redis 数据库的本地备份,将该备份上传到 Amazon S3,然后继续还原到 ElastiCache(已启用集群模式)集群。
相关内容
- AWS 官方已更新 4 年前
- AWS 官方已更新 2 年前
- AWS 官方已更新 8 个月前