基于Redis Cluster的分布式缓存备份篇(七)

redis的数据备份比较简单,持久化策略有aof与rdb两种方式,rdb对存储数据有压缩,备份最好选择rdb文件进行备份。数据恢复在从rdb文件中提取。

  • RDB 将数据库的快照(snapshot)以二进制的方式保存到磁盘中。文件小,便于备份恢复
  • AOF 以协议文本的方式,将所有对数据库进行过写入的命令(及其参数)记录到AOF文件,以此达到记录数据库状态的目的。文件大用于主备数据同步

定时备份

linux系统有cron定时任务,编写简单脚本备份rdb文件即可。

备份脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#!/bin/sh

REDIS_DATA_HOME="/root/redis/data/"
REDIS_BACKUP_FILES="appendonly-7000.aof dump-7000.rdb"

BACKUP_DAYS=7
REDIS_BACKUP_FILES_ARR=($REDIS_BACKUP_FILES)
CUR_DAY=$(date +%Y%m%d)
EXPIRED_DAY=$(date -d "$BACKUP_DAYS days ago" +%Y%m%d)

for f in ${REDIS_BACKUP_FILES_ARR[@]}
do
tempFPath=$(echo "$REDIS_DATA_HOME$f" | awk 'gsub(/^ *| *$/,"")')
if [ ! -f "$tempFPath" ]; then
echo "$tempFPath not exist!"
exit 1
fi

tempBPath="$tempFPath.$CUR_DAY"
if [ -f "$tempBPath" ]; then
echo "backup-file [$tempBPath] exist already."
else
echo "start backup $tempFPath to $tempBPath."
cp $tempFPath $tempBPath
fi

#delete backup file by expired
tempEPath="$tempFPath.$EXPIRED_DAY"
if [ -f "$tempEPath" ]; then
echo "delete backup-file [$tempEPath]."
rm -f $tempEPath
#else
#echo "backup-file [$tempEPath] not exist."
fi
done

echo "ok."

定时任务

配置vim /etc/crontab

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
30 3 * * * root shell.sh

重启生效

1
systemctl restart crond.service

备份恢复

备份恢复期间是不能提供服务了,请慎重恢复。

关闭Slave节点

关闭salve节点防止主备切换,使用SHUTDOWN命令关闭节点。

关闭Master节点

关闭Master节点防止主备切换,使用SHUTDOWN命令关闭节点。

拷贝rdb文件

拷贝rdb文件到Master节点数据目录

Master节点关闭AOF持久化

设置节点appendonly配置项为no,关闭AOF持久化,并启动节点。

重写AOF文件

客户端连接Master节点,执行bgrewriteaof命令重新aof。

Master节点开启AOF持久化

设置节点appendonly配置项为yes,关闭AOF持久化,并重启节点。

开启Slave节点

开启Salve节点,同步master的数据。

总结

  1. 定时备份数据
  2. 备份数据恢复请慎重,期间不会中断服务。