恢复失败的数据库
在集群失败或数据库损坏后恢复数据库。
当集群失败或数据库损坏时,您必须:
- 恢复集群配置 从CCS文件中
- 恢复数据库及其先前的配置和数据
要将数据恢复到新集群中的数据库, 您必须将数据库持久化文件(备份、AOF 或快照文件)恢复到数据库中。 这些文件存储在持久化存储位置。
数据库恢复过程包括:
- 如果集群失败,恢复集群。
- 识别可恢复的数据库。
- 恢复数据库数据。
- 验证数据库是否处于活动状态。
先决条件
-
在开始数据库恢复之前,请确保托管数据库的集群是健康的。 在集群故障的情况下, 您必须在恢复数据库之前恢复集群。
-
我们建议您为新集群节点分配新的持久存储驱动器。 如果您使用原始存储驱动器, 请确保将旧持久存储驱动器上的所有文件备份到另一个位置。
恢复数据库
在准备好托管数据库的集群后,您可以从rladmin
命令行界面(CLI)运行恢复过程。
恢复数据库:
-
将包含恢复文件的持久存储驱动器挂载到新节点上。 这些驱动器必须包含集群配置备份文件和数据库持久化文件。
注意:确保用户redislabs
有权限访问每个节点上配置和持久化文件的存储位置。如果您使用本地持久存储,请将所有恢复文件放置在集群的每个节点上。
-
要查看哪些数据库是可恢复的,请运行:
rladmin recover list
每个数据库的状态可能是准备恢复或文件丢失。 任何数据库中文件丢失的指示可能由以下原因引起:
- 未找到存储位置 - 确保在集群中的所有节点上正确设置了恢复路径。
- 在存储位置找不到文件 - 将文件移动到存储位置。
- 没有权限读取文件 - 更改文件权限,使redislabs:redislabs拥有640权限。
- 文件已损坏 - 找到未损坏的文件副本。
如果您无法解决问题,请联系Redis支持。
-
使用以下
rladmin recover
命令之一恢复数据库:-
从位于持久存储驱动器中的持久化文件中恢复所有数据库:
rladmin recover all
-
从位于持久存储驱动器中的持久化文件中恢复单个数据库:
-
通过数据库ID:
rladmin recover db db:
-
通过数据库名称:
rladmin recover db
-
-
仅恢复单个数据库的配置(不包括数据):
rladmin recover db
only_configuration
Note:- 如果未为数据库配置持久性,则数据库将恢复为空。
- 对于仍然有活动实例的Active-Active数据库,我们建议您恢复失败实例的配置,并让数据从其他实例更新。
- 对于需要恢复所有实例的Active-Active数据库,我们建议您恢复一个包含数据的实例,并仅恢复其他实例的配置。 然后,空实例将从恢复的数据中更新。
- 如果旧集群的数据库持久化文件没有存储在新节点的持久化存储位置中,您必须首先将每个节点的恢复路径映射到旧持久化文件的位置。为此,请在rladmin中运行
node
命令。每个数据库的持久化文件位于旧集群节点的持久化存储路径中,通常在recovery_path set /var/opt/redislabs/persist/redis
下。
-
-
要验证恢复的数据库现在是否处于活动状态,请运行:
rladmin status
数据库恢复后,请确保您的Redis客户端能够成功连接到数据库。
配置自动恢复
如果您启用了自动恢复集群策略,Redis Enterprise 会尝试从灾难前尽快恢复尽可能多的数据。
要启用自动恢复,请使用REST API更新集群策略:
PUT /v1/cluster/policy
{
"auto_recovery": true
}
Redis Enterprise 尝试从现有的最佳持久化文件中恢复数据库。如果持久化文件不可用(例如其主机节点宕机时可能发生),自动恢复过程会等待其变为可用。
对于每个数据库,您可以设置recovery_wait_time
来定义数据库在恢复前等待持久化文件可用的秒数。等待时间结束后,恢复过程将继续,这可能导致部分或全部数据丢失。默认值为-1
,表示无限等待。较短的等待时间可能会增加潜在数据丢失的风险。
要使用REST API更改现有数据库的recovery_wait_time
:
PUT /v1/bdbs/<bdb_uid>
{
"recovery_wait_time": 3600
}
你也可以在使用REST API创建数据库时设置recovery_wait_time
。