redis线上案例---加载RDB失败
之前的某一天早晨,在查看线上报警的时候,发现下面这样一个场景,Redis复制报错,一直提示加载RDB不成功,记录一下这个案例,希望有所帮助吧。
先来看下这个报错信息:
29965:S 27 Oct 10:20:01.151 * Connecting to MASTER 10.xx.x.xxx:22300 29965:S 27 Oct 10:20:01.151 * MASTER <-> SLAVE sync started 29965:S 27 Oct 10:20:01.152 * Non blocking connect for SYNC fired the event. 29965:S 27 Oct 10:20:01.153 * Master replied to PING, replication can continue... 29965:S 27 Oct 10:20:01.155 * Partial resynchronization not possible (no cached master) 29965:S 27 Oct 10:20:01.163 * Full resync from master: 7c4fde9bd883db984e860a312650054b048d477f:39135298310 29965:S 27 Oct 10:20:01.564 * MASTER <-> SLAVE sync: receiving 9006542 bytes from master 29965:S 27 Oct 10:20:01.678 * MASTER <-> SLAVE sync: Flushing old data 29965:S 27 Oct 10:20:01.678 * MASTER <-> SLAVE sync: Loading DB in memory 29965:S 27 Oct 10:20:01.678 # Can't handle RDB format version 8 29965:S 27 Oct 10:20:01.678 # Failed trying to load the MASTER synchronization DB from disk
报错信息也比较容易理解,不能处理主库传送给从库的RDB文件,因为版本问题。
查看一下主库和从库的Redis数据库版本,如下:
---------------------主库信息-------------------------- redis 22300> info server # Server redis_version:4.0.6 redis_git_sha1:00000000 redis_git_dirty:0 redis_build_id:651271bc39ec5b90 redis_mode:standalone os:Linux 3.10.0-957.el7.centos.toa.x86_64 x86_64 arch_bits:64 multiplexing_api:epoll atomicvar_api:pthread-mutex gcc_version:4.1.2 ---------------------从库信息-------------------------- redis 22300> info server # Server redis_version:3.0.7 redis_git_sha1:00000000 redis_git_dirty:0 redis_build_id:aa6f2484202340bc redis_mode:standalone os:Linux 3.10.0-514.6.2.el7.x86_64 x86_64 arch_bits:64 multiplexing_api:epoll
可以看到,主库和从库的版本出现了不一致现象,主库的版本4.0.6高于从库的版本3.0.7,导致复制中断。
解决方案:升级从库版本为4.0.6版本即可。
本身这个问题的解决是比较快的,就是更换版本即可。但是为什么会出现版本不一致的问题,这是值得思考的,经过一系列排查,最终得到了一个可能的原因。
1、本来这个端口的Redis版本是3.0.7,架构如下:
2、因为要做版本升级,架构变成了:
3、从库升级为高版本之后,需要做一个主从切换,主从切换之后架构变成了:
此时复制中断。
执行到这一步之后,复制断开,后面需要以新主库为基础,重新搭建主从复制,扩容两个从库,对业务提供读写分离即可。