Redis主从复制定义
Redis主从复制,是指将一台Redis服务器(主节点master)的数据,复制到其它的Redis服务器(从节点Slave),类似于Mysql的主从复制,分为全量同步和增量同步。
如下图所示:
默认情况下,每台Redis服务器都是主节点;且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。
Redis主从复制作用
第一个作用:数据备份
当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复。
第二个作用:读写分离
提高服务器的负载能力,由主节点提供写服务,由从节点提供读服务,和 MySql的读写分离一致。
第三作用:高可用
主从复制是Redis高可用的基础,哨兵和集群都是基于此模式进行。
Redis主从复制原理
Redis主从之间的复制分为两部分:全量复制和增量复制。
1.Redis全量复制过程
Redis在第一次实现主从关系时会进行全量复制,如下图所示:
Redis全量复制同步基本流程,大致分为如下7大步骤:
- slave 通过 psync命令同步数据与master建立socket长连接;
- master 收到psync命令,执行bgsave语句生成rdb快照;
- master发送rdb数据;
- slave 清空数据并加载master发来的rdb数据;
- master 把生成rdb文件过程中的修改数据,从repl buffer发送到slave;
- slave 执行接收到的修改命令;
- master通过socket长连接持续把写命令发送给从节点,保证主从一致性。
2.Redis增量复制过程
如果由于网络原因造成原因造成主从断开,期间有数据写入master,再次形成主从时则会形成增量复制,如下图所示:
Redis全量复制增量同步基本流程,大致分为如下6大步骤:
- slave 连接断开;
- master最近数据的修改命令的缓存;
- slave 重新建立Socket长连接到master;
- slave psync命令同步数据:offset偏移量控制;
- master 判断 salve的offset如果在repl backlog buffer中,则master会将缓存中从salve的offset之后,数据一次性同步给salve节点,否则会全量同步;
- master通过socket长连接持续把写命令发送给从节点,保证主从一致性。
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》