QuarkDB 集群数据库的备份与恢复
数据库的备份与恢复对数据安全是极为重要的, 特别是对于存储 EOS 元数据的 QuarkDB 数据库。 虽然 QuarkDB 集群有多副本保证元数据的安全, 但按时备份 QuarkDB 集群仍是一个良好的习惯。
Table of Contents
假定我们的 QuarkDB 数据文件夹是 /var/lib/quarkdb/
, 那我们如何来备份它呢?直接复制运行中的 QuarkDB 节点的 /var/lib/quarkdb
到一个备份文件夹是不行的。 因为从开始备份到结束备份期间,QuarkDB 集群很可能会进行写入, 基础的 SST
文件很可能会改变, 这将导致在备份中文件是损坏的。
创建 QuarkDB 快照
QuarkDB 提供了一个 raft-checkpoint
命令, 可以创建一个当前集群的快照,包含了状态机和日志,通过它,我们可以很方便地创建另一个 QuarkDB 实例:
1 | 127.0.0.1:7777> raft-checkpoint /path/to/backup |
需要注意的是, /path/to/backup
要与 /var/lib/quarkdb
处于同一个物理文件系统中, 这将允许对 SST
文件做硬链接,从而创建快照的时间非常短, 即使 DB 有半TB,也只会耗时几秒钟,同时也不占额外的空间。
备份 QuarkDB 快照
在做完快照后, 就可以通过 rsync
等将 快照备份到另外的节点上去。
1 | $ rsync -Paz /path/to/backup backup-node:/quarkdb/backup/dir |
备份完成后, 记得将 /path/to/backup
删除掉。 否则随着 QuarkDB 持续写入, /var/lib/quarkdb
和 /path/to/backup
会很快分叉, /path/to/backup
也会很快开始占用额外空间。
恢复 QuarkDB 数据
如果 EOS 或 QuarkDB 集群出了问题, 需要恢复数据, 我们可以重新启动一个 QuarkDB 节点或集群, 导入备份的 QuarkDB 快照, 将 EOS 集群指向新的 QDB 集群即可。 可参考 配置 EOS 使用 QuarkDB 作为 NS。