跳转至

管理快照

NebulaGraph 提供快照(snapshot)功能,用于保存集群当前时间点的数据状态,当出现数据丢失或误操作时,可以通过快照恢复数据。

前提条件

NebulaGraph 的身份认证功能默认是关闭的,此时任何用户都能使用快照功能。

如果身份认证开启,仅 God 角色用户可以使用快照功能。关于角色说明,请参见内置角色权限

注意事项

  • 系统结构发生变化后,建议立刻创建快照,例如在add hostdrop hostcreate spacedrop spacebalance等操作之后。
  • 不支持自动回收创建失败的快照垃圾文件,需要手动删除。
  • 不支持修改快照保存路径。

创建快照

命令CREATE SNAPSHOT可以创建集群当前时间点的快照。只支持创建所有图空间的快照,不支持创建指定图空间的快照。

Note

如果快照创建失败,请参考后文删除损坏的快照,然后重新创建快照。

nebula> CREATE SNAPSHOT;

查看快照

命令SHOW SNAPSHOTS可以查看集群中的所有快照。

nebula> SHOW SNAPSHOTS;
+--------------------------------+---------+------------------+
| Name                           | Status  | Hosts            |
+--------------------------------+---------+------------------+
| "SNAPSHOT_2021_03_09_08_43_12" | "VALID" | "127.0.0.1:9779" |
| "SNAPSHOT_2021_03_09_09_10_52" | "VALID" | "127.0.0.1:9779" |
+--------------------------------+---------+------------------+

参数说明如下:

参数 说明
Name 快照名称,前缀为SNAPSHOT,表示该文件为快照文件,后缀为快照创建的时间点(UTC 时间)。
Status 快照状态。VALID表示快照有效,INVALID表示快照无效。
Hosts 创建快照时所有 Storage 服务器的 IP(或主机名)和端口。

快照路径

快照保存在 Meta 和 Storage 配置文件中data_path参数指定的路径中。创建快照时,在 leader Meta 服务和所有 Storage 服务的数据存储路径中会检查是否有checkpoints目录,如果没有会自动创建。新建的快照以子目录的形式储存在checkpoints目录内。例如SNAPSHOT_2021_03_09_08_43_12,后缀2021_03_09_08_43_12根据创建时间(UTC)自动生成。

为了快速定位快照所在路径,可以在数据存储路径内使用 Linux 命令find。例如:

$ cd /usr/local/yueshu-graph-3.6.0/data
$ find |grep 'SNAPSHOT_2021_03_09_08_43_12'
./data/meta2/nebula/0/checkpoints/SNAPSHOT_2021_03_09_08_43_12
./data/meta2/nebula/0/checkpoints/SNAPSHOT_2021_03_09_08_43_12/data
./data/meta2/nebula/0/checkpoints/SNAPSHOT_2021_03_09_08_43_12/data/000081.sst
...

删除快照

命令DROP SNAPSHOT可以删除指定的快照,语法为:

DROP SNAPSHOT <snapshot_name>;

示例如下:

nebula> DROP SNAPSHOT SNAPSHOT_2021_03_09_08_43_12;
nebula> SHOW SNAPSHOTS;
+--------------------------------+---------+------------------+
| Name                           | Status  | Hosts            |
+--------------------------------+---------+------------------+
| "SNAPSHOT_2021_03_09_09_10_52" | "VALID" | "127.0.0.1:9779" |
+--------------------------------+---------+------------------+

Note

删除最后一个快照时,会将checkpoints目录一起删除。

恢复快照

Warning

恢复快照数据时,如果快照中备份的图空间被删除(执行了DROP SPACE操作),那么该图空间数据将无法恢复。

当前未提供恢复快照命令,需要手动拷贝快照文件到对应的文件夹内,也可以通过 shell 脚本进行操作。实现逻辑如下:

  1. 创建快照后,会在 leader Meta 服务和所有 Storage 服务的安装目录内生成checkpoints目录,保存创建的快照。以本文为例,当存在 2 个图空间时,创建的快照分别保存在/usr/local/nebula/data/meta/nebula/0/checkpoints/usr/local/nebula/data/storage/nebula/3/checkpoints/usr/local/nebula/data/storage/nebula/4/checkpoints中。

    $ ls /usr/local/nebula/data/meta/nebula/0/checkpoints/
    SNAPSHOT_2021_03_09_09_10_52
    $ ls /usr/local/nebula/data/storage/nebula/3/checkpoints/
    SNAPSHOT_2021_03_09_09_10_52
    $ ls /usr/local/nebula/data/storage/nebula/4/checkpoints/
    SNAPSHOT_2021_03_09_09_10_52
    
  2. 当数据丢失需要通过快照恢复时,用户可以找到合适的时间点快照,将内部的文件夹datawal分别拷贝到各自的上级目录(和checkpoints平级),覆盖之前的datawal,然后重启集群即可。

    Warning

    需要同时覆盖所有 Meta 服务的 data 和 wal 目录,因为存在重启集群后发生 Meta 服务重新选举 leader 的情况,如果不覆盖所有 Meta 服务,新的 leader 使用的还是最新的 Meta 服务数据,导致恢复失败。


最后更新: 2024年9月14日