Redis/Codis主从复制调整及备份与恢复实现

前言

此篇文章主要是弥补文章Codis3.2.2集群部署与使用架构缺陷。因为当时主从架构设计为如下表格所示:

主服务器 10.2.10.108:6379 10.2.10.109:6379 10.2.10.120:6379
从服务器 10.2.10.108:6380 10.2.10.109:6380 10.2.10.120:6380

最近碰到一个问题,某个服务器宕掉,导致该服务器上的主从全宕掉,且因为数据没有落盘,即使在服务器重启后,重启主从服务器,数据全部丢失,影响业务的正常进行(幸好:相关业务数据有存储在Mysql,重启相关业务服务,可以保障业务的再次正常进行)。为了避免此种情况再次发生,重新调整了主从架构,并做了RDB快照持久化,因为需要保证codis集群仍然可以正常进行,RDB持久化是在从服务器进行的。调整后的主从架构如下表格所示:

主服务器 10.2.10.108:6379 10.2.10.109:6379 10.2.10.120:6379

从服务器

(RDB持久化)

10.2.10.120:6380

10.2.10.108:6380 10.2.10.109:6380

步骤

1.确保10.2.10.108:6379,10.2.10.109:6379,10.2.10.120:6379运行正常,执行bgsave,这步主要是避免在做主从复制调整及备份修改时主服务意外挂掉;
2.确保sentinels正常;
3.在三台服务器均执行:mv dump_6380.rdb dump_6380.rdb.bak
4.在三台服务器修改redis_6380.conf配置文件,添加自动备份,调整主从关系:
1) 10.2.10.108服务器:
save 900 1
save 300 10
save 60 10000
slaveof 10.2.10.109 6379
2)10.2.10.109服务器:
save 900 1
save 300 10
save 60 10000
slaveof 10.2.10.120 6379
3)10.2.10.120服务器:
save 900 1
save 300 10
save 60 10000
slaveof 10.2.10.108 6379
5.在三台服务器上均停掉redis从服务器;
6.在三台服务器上均重启redis从服务器,观察redis主从已调整,dump_6380.rdb已生效;
7.在三台服务器均执行:rm dump_6380.rdb.bak。
8.修改codis-fe网页端,因为主从对应关系变化了,需要对应地将网页端也进行调整:

1)观察网页端,因为10.2.10.108:6380不再是10.2.10.108:6379的从服务,调整为10.2.10.109:6379的从服务,所以网页端会进行提示

Redis/Codis主从复制调整及备份与恢复实现

2)移除10.2.10.108:6380记录,其他从服务类似

Redis/Codis主从复制调整及备份与恢复实现

3)重新添加10.2.10.108:6380到group2,因为10.2.10.109:6379在group2,而10.2.10.108:6380为10.2.10.109:6379的从服务

Redis/Codis主从复制调整及备份与恢复实现

4)调整完成,如果主从数据不一致,则进行sync操作

Redis/Codis主从复制调整及备份与恢复实现

恢复

如果group1的主服务宕掉,将从服务升为主服务即可;
如果group1的从服务宕掉,重启从服务;
如果group1的主从全宕掉,先启动6380从服务(因为从服务有RDB备份),升为主服务,启动原来的主服务6379,与6380进行同步操作,如果你想将6379升为主服务,也可以的。