redis主从
主从原理
解决redis单点宕机不可用问题,由多台实例构成,读大于写的应用场景,一般选择”一主多从“,通过异步复制,保证主从数据最终一致性
主从复制过程
一般当slave
第一次启动连接master
,或者“被认为是第一次连接”,是主从采用全量复制。全量复制的执行流程如下:
slave redis
启动. 会从redis.conf
中读取master ip
和host
。- 定时任务每秒检查是否有新的
mater
需要连接,如果发现就与master
建立socket
连接。 slave
发送ping
指令到mater
。- 如果
mater
配置require pass
,slave
需要发送认证给master
。 Salve
会发送sync
命令到Master
。Master
启动一个后台进程,将Redis
中的数据快照rdb
保存到文件中。- 启动后台进程的同时,
Master
会将保存数据快照期间接收到的写命令缓存起来。 Master
完成写文件操作后,将rdb
发送给Salve
。Salve
将rdb
保存到磁盘上,然后加载rdb
到redis
内存中。- 当
Salve
完成数据快照的恢复后,aster
将这期间收集的写命令发送给Salve
端。 - 后续
Master
收集到的写命令都会通过之前建立的连接. 增量发送给salve
端。
流程如下:
同时也提供了增量复制、断点续传等功能
优缺点
优点
- 解决单点问题,多实例保证高可用
- 横向扩展简单,提升集群并发度
- 异步复制,不会影响客户端请求
缺点
- 主从切换需要人工介入,故障转移时间不可控
- 主库实例容易受到单服务器容量瓶颈限制
参考资料: