Redis高可用之主从复制原理演进分析

在很久之前写过一篇 Redis 主从复制原理的简略分析,基本是一个笔记类文章 。
一、什么是主从复制1.1 什么是主从复制主从复制,从名字可以看出,至少需要 2 台 Redis 服务器,一台叫主 Redis 服务器,一台叫从 Redis 服务器,也可以把他们叫做主节点(主 Redis 服务器)从节点(从 Redis 服务器) 。然后把主 Redis 服务器上的数据复制到从 Redis 服务器上 , 这就是主从复制 。后续也会源源不断的把数据从主节点复制到从节点 。

Redis高可用之主从复制原理演进分析

文章插图
1.2 怎么设置主从复制怎么设置主 Redis 服务器,怎么设置从 Redis 服务器?
比如有 2 台 Redis 服务器,ip 分别为:192.168.1.100 和 192.168.1.101 。
  • 第一种方法
设置方法:在 Redis 的配置文件 redis.conf 中配置:replicaof masterip masterport
比如将 192.168.1.100 这台服务器设置为主(master)服务器 , 那么就在服务器 192.168.1.101 的配置文件里设置如下:
replicaof 192.168.1.100 6379然后重启服务器,这样主服务器就是 192.168.1.100,从服务器就是 192.168.1.101 。
  • 第二种方法
还可以用 redis-cli 客户端连接到 192.168.1.101,然后执行命令 replicaof 192.168.1.100 6379 。
这种方式如果从 Redis 重启后,主从关系就消失了 。
  • 第三种方法
在 redis-server 启动参数中增加 --replicaof 192.168.1.100 6379 参数
说明:Redis 5.0 后,replicaof 命令已经替换了 slaveof 命令,但是为了兼容 slaveof 还是可以用 。
一台主服务器也可以有多台从服务器,从服务器也可以有从服务器 。
二、为什么要主从复制主从复制后就有多份数据 , 相当于有多个副本,既是备份也是容灾 。
为什么要有主从复制功能?
其实问的就是 Redis 主从复制有什么作用,带来了啥好处 。
  • 负载均衡
数据量大的时候,为了减轻服务器压力 , 会用读写分离模式来分摊流量 , 主服务器负责写 , 从服务器负责读 。当然主服务器也可以读 。
  • 故障恢复
主服务器出现问题时候,从服务器还可以继续提供服务 。并且也可以把从服务器提升为主服务器,这就是 Redis 的哨兵模式 。
高可用的数据冗余方式 。
  • 数据冗余
多了一份数据 , 故障了,就可以快速恢复数据 。
三、怎么进行主从复制
主从数据同步就是把主服务器生成的 RDB 数据文件复制到从服务器上,然后解析 RDB 文件,在从服务器上生成对应的数据 。或同步相关的命令 。
3.1 主从复制同步的演进在 Redis2.8 之前,都是全量数据复制 。也就是说,断线重连后,也是重新全量复制数据 。这种方式把很多原来同步过了的数据又重新同步一次 , 这种方式的数据同步效率太低 。
在 Redis2.8 之后,增加了部分重同步模式,也就是增加增量数据同步 , 只同步需要同步的数据 。这就改进了之前的数据同步模式 。
什么时候进行全量数据同步?第一次数据同步时候就进行全量数据同步 。有时主从数据不一致时也需要全量同步 。
什么时候进行增量数据同步?比如断线重连后,就进行增量数据同步 。
3.2 Redis2.8之前复制Redis2.8 之前主从同步有 2 个部分:全量同步,命令传播 。
全量同步:主从节点建立连接,主节点回复后,从节点向主节点发送 SYNC 命令,把从节点服务器状态更新到当前主节点服务器状态 。主节点创建全量数据的 RDB 快照文件,然后发送给从节点,从节点加载 RDB 文件恢复对应的数据 。主节点再继续发送复制过程中积压在缓冲区内的新增命令到从节点,使从节点的数据到达和主节点数据一致 。
命令传播:主节点和从节点保持连接,主节点将继续向从节点发送命令流 , 保证主节点上的数据集发生了变更同样在从数据集上也发生变更 。
流程图:
Redis高可用之主从复制原理演进分析

文章插图
3.3 Redis2.8之后复制
【Redis高可用之主从复制原理演进分析】以 redis6.0 版本来介绍 。
Redis2.8 之后全量复制与上面(Redis2.8之前)复制步骤差不多,SYNC 命令变成了 PSYNC 命令,之后增加了部分重同步 。部分重同步改进了之前的每次需要全量同步问题 。

推荐阅读