回档方法:
假设master1是当前主服务,slave1是从服务,master2是回档实例。master1在rockstore里面需要保留较长时间的binlog,以保证slave能够取得完整的binlog。slave1在rockstore里面保留较少的binlog,以保证新的binlog能够及时的落地,从而可保证定时回档到较新时间点的能力。
前提条件:master1持续运行,slave1持续运行。
redis-cli向slave1发送slaveof master1命令,使得mater1与slave1实时同步。
在某个需要备份的时间点,redis-cli向slave1发送backup命令,生成全量备份。
启动master2服务
拷贝备份到master2,redis-cli向master2发送restorebackup命令,加载备份并启动服务。
使用binlog_tool工具处理slave1生成的binlog文件,把在backup时间点之后和希望定点回档的时间点之前的binlog解析出来,并发送其中的命令给master2,master2按照日志加入到rockstore里面,进而实现定点回档的功能。
注意
restorebackup的时候,用于恢复的目标实例不能是从属实例,同时用于恢复的目标实例不能有从属实例,否则会报错。
相关命令或工具的使用方法:
backup命令
redis-cli里面输入命令。命令格式:
backup $dir ckpt|copy
说明:备份所有的rockstore
ckpt采用硬链接的方式实现,备份速度更快。copy采用拷贝的方式使用,占用更大的存储空间,备份速度较慢,适合云盘。默认采用copy,兼容面更广。
restorebackup命令
redis-cli里面输入命令。命令格式:
restorebackup $storeid $dir [force]
restorebackup all $dir [force]
说明:
all是加载所有rockstore
如果已经有部分数据,则会加载失败,可以用force参数强行加载。
不需要指明备份的模式是ckpt还是copy,会自动在backup_meta中识别模式。
binlog_tool
工具使用方法:
./binlog_tool --logfile=$filename --mode=base64 --start-position=$binlogPos --end-datetime=$timestamp | redis-cli -h 127.0.0.1 -p 30000
说明:
对于binlog文件,可按文件名的顺序重复调用上述工具。其中$filename为日志文件名。 binlog文件保存在dump子目录里面,比如:m1_dir/dump/0/binlog-0-0000001-19700101080000.log
在base64的模式下,该工具会将binlog解析出来,然后按restorebinlogv2命令格式打印到标准输出,这时可以通过管道来让tendis执行解析出来的命令。解析完成的时候,会有一条“read logfile end.”日志打印到标准错误输出,这样可以避免该日志被管道接受到了。
对每个sotoreid重复上述操作,多个store之间并不影响,可以并行进行。
binlogPos为master2加载的备份中的最大binlogid,获取方法是在redis-cli中使用命令:
binlogpos $storeid
timestamp是希望回档的时间点。
binlog_tool的完整参数:
binlog_tool --logfile=binlog.log --mode=text|base64|scope --start-datetime=1111 --end-datetime=22222 --start-position=333333 --end-position=55555
注意: —start-position和—end-position是取的闭区间,即id相等的binlog会被输出。所以传入的id需要在master2中取得的最大binlogid基础上加1后传入。 —start-datetime和—end-datetime是取的闭区间,即时间戳相等的binlog会被输出。 如果传入的binlogid小于tendis内部最大的HighestBinlogid,内部会对restorebinlogv2命令中小于HighestBinlogid的binlog返回错误码,大于HighestBinlogid的binlog正常处理。
输出示例:
./binlog_tool --logfile=home/dump/5/binlog-5-0000002-20200327204351.log --mode=base64
restorebinlogv2 5 ////Af////8BAAAAAAAAAAEAAAgA /wAAAAAAAAAAPIcAAwAAAAAAB8AkAAABcSp6QQj//////////wNzZXQBiILp05IuDgAAPIdEAAAAAGEAAAEACGEAAAAAAAAx
restorebinlogv2 5 ////Af////8BAAAAAAAAAAIAAAgA /wAAAAAAAAAAPIcAAwAAAAAAB8BNAAABcSp6wdf//////////wNzZXQB14Pr05IuDgAAPIdEAAAAAGEAAAEACGEAAAAAAAAy
read logfile end.