1 前言
在大数据时代,由于数据库需要存储的数据量比较过去关系型数据库要大很多,所以直接参照关系型数据库定期备份文件的策略,可能在备份和恢复操作上都需要耗费大量的硬件资源,并且备份和恢复耗时可能也会相对较长。所以在大数据时代,分布式数据库的安全备份的策略不再建议采用定期备份的方式,而是直接由数据库通过数据冗余的方式来保证数据的安全。
数据冗余的机制即是当应用程序向数据库中写入或者更新一条新记录时,数据库自动将此新操作实时同步到多台物理服务器中,确保多台服务器同时保存相同的数据,从而实现数据库的高可用机制。
但是在一些客户的生产环境中,客户出于对数据安全方面更严格的考虑,还是希望能够对整个数据库进行定期的数据备份,以便在未来系统出现异常时,能够在灾难环境中进行数据恢复。
管理员在对SequoiaDB集群做数据备份和恢复工作时,应该要时刻注意分布式数据库与关系型数据库的不同,即数据备份和恢复都会涉及到多台服务器的数据库服务,而不只是在某一台服务器上做相应的操作。
2 SequoiaDB集群备份
2.1 备份前准备
管理员在做数据备份前,应该先对SequoiaDB集群做一个基本的了解,并且预先检查一下备份的机器存储空间是否足够,和选择一个业务闲时的时段进行数据备份
2.2 全量备份
管理员对SequoiaDB集群做全量数据备份,将采用直接拷贝数据目录的方式完成。
全量备份方式:
1. 通过JS客户端了解SequoiaDB集群有多少个复制组,并且选出每个复制组的一个备节点作为数据备份节点,记录备份节点的相关信息,包括
a) 该节点被部署在哪个机器上
b) 该节点的数据文件被保存在哪个路径下
2. 逐一停止备份节点,停止命令
# su – sdbadmin
# /opt/sequoiadb/bin/sdbstop -p SERVICENAME
SERVICENAME为备份节点的服务端口号,此信息可以通过db.listReplicaGroups()获得
3. 拷贝已经停止的备份节点数据文件
# cp -rf BACKOFNODEDBPATH BACKOFFILEPATH/
BACKOFNODEDBPATH 为备份节点的数据存放路径,此信息可以通过db.listReplicaGroups()获得
BACKOFFILEPATH 为临时存放备份数据路径,此路径由管理员自行决定
4. 启动被停止的备份节点
# /opt/sequoiadb/bin/sdbstart -c /opt/sequoiadb/conf/local/SERVICENAME
SERVICENAME为备份节点的服务端口号,此信息可以通过db.listReplicaGroups()获得
2.3 增量备份
管理员对SequoiaDB集群进行增量备份,将采用定期拷贝数据库节点的日志文件方法实现。
在SequoiaDB集群中,每一个节点都拥有自己的数据库日志文件,日志文件中记录了该节点执行过的所有操作,所以增量备份可以使用一个脚本工具定期检查日志文件,将最新的日志文件信息数据备份。
定期检查日志文件工具为sdb_tar_log.sh,管理员在执行脚本前,需要手工修改脚本中的配置参数
SRC_DIR=/sequoiadb/database/data/11910/replicalog
DST_DIR=./tests/
LOOP_TIME=3
NAME="group1_node1"
SRC_DIR,为备份节点的日志文件路径(dbpath)
DST_DIR,为临时保存新增日志文件的路径,有管理员自行定义,但是要确保此路径操作用户可以访问并且拥有写权限,另外一个需要注意,此路径必须剩余充足的可用空间,保证新增日志文件可以写成功
LOOP_TIME,为检测间隔周期,默认为3秒
NAME,新增日志文件的名字前缀,此参数可以由管理员自行定义,但是建议命名规则和节点的角色和端口号相关,方便日志运维管理
检查日志脚本的执行方式如下
# nohup sh sdb_tar_log.sh &
该脚本将会持续检查,默认情况下,脚本每过3秒钟就会检测一次节点日志路径,当发现一个日志文件被写完,就会拷贝最新被写完的日志文件到DST_DIR路径。
3 SequoiaDB恢复
3.1 恢复前准备
管理员在对备份文件做数据恢复时,应该确认SequoiaDB集群中的环境已经无法恢复,并且通过db.listReplicaGroups()命令了解了整个集群的部署情况和对应的数据节点路径。
3.2 全量数据恢复
全量数据恢复,由于之前备份的策略为备份整个数据节点的所有文件,所以在恢复时,只要将老的数据文件全部删除,再将备份的文件替换原有数据文件路径,再重启数据节点,就完成了数据恢复动作。
管理员在做数据恢复时,一定要注意
l 恢复的节点一定要先停止
l 由于SequoiaDB的复制组在生产环境中,一般是多副本的,即一份数据是在多台物理机器上保存的,所以在做数据恢复时,也需要同时恢复冗余的数据节点
具体的恢复步骤
1. 通过JS客户端停止对应的复制组
# /opt/sequoiadb/bin/sdb
> var db = new Sdb("localhost", 11810);
> var rg = db.getRG("GROUPNAME");
> rg.stop();
GROUPNAME,是需要停止的复制组的名字,该信息可以通过db.listReplicaGroups()获得
2. 删除节点老的数据文件
> rm -rf DBPATH;
注意,由于在生产环境中,一个复制组的数据通常是存储在多台服务器上,所以在删除数据文件时,也需要在多台机器中同时执行删除操作,复制组的节点信息可以通过db.listReplicaGroups()获得
3. 拷贝备份数据文件到节点数据路径上,覆盖原有的路径
> cp -rf BACKOFFILEPATH/BACKOFFILE DBPATH DBPATH;
注意,由于在生产环境中,一个复制组的数据通常是存储在多台服务器上,所以在拷贝数据文件时,也需要在多台机器中同时执行拷贝操作,复制组的节点信息可以通过db.listReplicaGroups()获得
4. 启动对应复制组的相关节点
# /opt/sequoiadb/bin/sdb
> var db = new Sdb("localhost", 11810);
> var rg = db.getRG("GROUPNAME");
> rg.start();
3.3 增量数据恢复
在本次备份、恢复方案中,增量备份采用拷贝节点数据库日志的方式实现,所以在增量数据恢复时,也是依赖于数据库日志。
SequoiaDB提供了一个可以完整解析所有数据库日志的工具--sdbreplay,它支持将数据库日志解析成可执行命令,同时也支持将数据库日志解析成可视化文本。管理员通过sdbreplay就可以快速将已经备份的数据库日志进行数据库增量数据恢复。
sdbreplay工具比较重要的参数有
l --host,指定连接SequoiaDB引擎的机器名
l --svc,指定连接SequoiaDB引擎的端口号
l --path,指定读取的数据库日志目录
l --fninsdb,指定数据库节点日志的配置文件个数
l --fzinsdb,指定数据库节点日志的配置大小
l --dump,可视化输出解析日志信息
l --filter,解析后的信息过滤条件
fninsdb和fzinsdb参数需要管理员通过SHELL命令查看SequoiaDB对应节点的配置文件获得
查看命令如下
# cat /opt/sequoiadb/conf/local/SERVICENAME/sdb.conf
配置文件中的信息一般如下:
svcname=11910
dbpath=/sequoiadb/database/data/11910
logfilenum=2
logfilesz=64
role=data
catalogaddr=chen:11803
logfilenum的值即对应fninsdb,如果配置文件中无此参数,则为默认值20
logfilesz的值即对应fzinsdb,如果配置文件中无此参数,则为默认值64,如果配置文件中的参数小于64,请在执行sdbreplay时,设置logfilesz=64
注:SERVICENAME为对应节点的端口号