欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Redis主从复制模式

程序员文章站 2022-04-16 16:25:54
在Redis集群中,让若干个Redis服务器去复制另一个Redis服务器,我们定义被复制的服务器为主服务器(master),而对主服务器进行复制的服务器则被称为从服务器(slave),这种模式叫做主从复制模式。主从有长连接心跳,主节点默认每10S向从节点发ping命令,repl-ping-slave-period控制发送频率。主从复制模式是Redis提供高可用的服务的手段,分为主节点和从节点,从节点复制来自主节点的数据(通过slave-read-only yes,表示从节点只接受读命令),因为主节点不...

在Redis集群中,让若干个Redis服务器去复制另一个Redis服务器,我们定义被复制的服务器为主服务器(master),而对主服务器进行复制的服务器则被称为从服务器(slave),这种模式叫做主从复制模式。主从有长连接心跳,主节点默认每10S向从节点发ping命令,repl-ping-slave-period控制发送频率。
Redis主从复制模式


主从复制模式是Redis提供高可用的服务的手段,分为主节点和从节点,从节点复制来自主节点的数据(通过slave-read-only yes,表示从节点只接受读命令),因为主节点不接受来自从节点的数据,因此一般主从复制模式都设置为主节点接受写命令,从节点接受读命令,这样是为了保证主从节点的数据一致性
Redis主从复制模式


Redis主从复制可以根据是否是全量分为全量同步和增量同步,其主从同步策略为:主从刚刚连接的时候,进行全量同步;全同步结束后,进行增量同步。当然,如果有需要,slave 在任何时候都可以发起全量同步。Redis策略是无论如何,首先会尝试进行增量同步,如不成功,要求从机进行全量同步。


注意:如果多个Slave断线了,需要重启的时候,因为只要Slave启动,就会发送sync请求和主机全量同步,当多个同时出现的时候,可能会导致Master IO剧增宕机。


全量同步

Redis全量复制一般发生在Slave初始化阶段,这时Slave需要将Master上的所有数据都复制一份。具体步骤如下:

  1. 从服务器连接主服务器,发送SYNC命令
  2. 主服务器接收到SYNC命名后,开始执行BGSAVE命令生成RDB文件并使用缓冲区记录此后执行的所有写命令
  3. 主服务器BGSAVE执行完后,向所有从服务器发送快照文件,并在发送期间继续记录被执行的写命令
  4. 从服务器收到快照文件后丢弃所有旧数据,载入收到的快照
  5. 主服务器快照发送完毕后开始向从服务器发送缓冲区中的写命令
  6. 从服务器完成对快照的载入,开始接收命令请求,并执行来自主服务器缓冲区的写命令
    Redis主从复制模式
    完成上面几个步骤后就完成了从服务器数据初始化的所有操作,从服务器此时可以接收来自用户的读请求。

增量同步

Redis增量复制是指Slave初始化后开始正常工作时主服务器发生的写操作同步到从服务器的过程。

增量复制的过程主要是主服务器每执行一个写命令就会向从服务器发送相同的写命令,从服务器接收并执行收到的写命令。




在对Redis主从复制模式有了初步的了解后,我们就来看一看Redis的主从如何来配置,这里我们就启动三台虚拟机来配置Redis的主从(当然我们也可以直接一台机器来进行实验,在一台机器上我们需要修改其配置文件的端口来启动多个Redis服务)


其实验机器环境如下:
redis-master : 192.168.80.135
redis-slave : 192.168.80.131
redis-slave : 192.168.80.132


然后我们在redis-slave的从服务器的Redis服务需要进行一点的修改,这里有两种方式,一种是修改配置文件 redis.conf,然后重启Redis服务。另一种可以直接使用命令来修改 slaveof ip port ,使用命令后自身数据会被清空,但取消slave(取消可使用slaveof no one)只是停止复制,并不清空。


然后我们来启动Redis的主节点192.168.80.135,这里无需修改,和我们之前单节点的一致,这里我们直接将其启动即可。使用info replication命令我们可以查看其相关信息,当前服务为主节点,没有slaves
Redis主从复制模式


然后我们再将另外两个Redis的从节点启动,这里我们分别使用上述介绍的两种方式,首先启动192.168.80.131 ,这里我们首先修改其配置文件,然后将其启动,如下:
Redis主从复制模式
Redis主从复制模式


最后我们来直接使用命令的方式将192.168.80.132设置为135机器的从节点,然后将其启动,如下:
Redis主从复制模式
Redis主从复制模式


然后我们可以再次查看下主节点 192.168.80.135 的信息,以及显示有两个从节点了,如下:
Redis主从复制模式


我们就可以进行测试了,我们可以在Redis的主节点上进添加数据,然后在从节点上进行读取,查看其是否可以获取其数据,如下:
Redis主从复制模式
Redis主从复制模式

我们还可以在从节点上进行尝试创建数据,不过根据我们上述介绍的slave-read-only yes,应无法成功创建,如下:
Redis主从复制模式



在上述Redis主从复制模式中,我们需要注意主从一般部署在不同机器上,复制时存在网络延时问题,Redis提供repl-disable-tcp-nodelay参数决定是否关闭TCP_NODELAY,默认为关闭,如下
Redis主从复制模式
该参数其实我们在Netty中介绍,其作用都是一样的

参数关闭时:无论大小都会及时发布到从节点,占带宽,适用于主从网络好的场景

参数启用时:主节点合并所有数据成TCP包节省带宽,默认为40毫秒发一次,取决于内核,主从的同步延迟40毫秒,适用于网络环境复杂或带宽紧张,如跨机房




上述我们使用多台虚拟机来配置了Redis主从复制模式,其实也是比较简单的,上述我们配置的为两个从节点,其实在Redis配置主从模式时,是比较灵活的,可以有多种方式,如下:

一主一从

用于主节点故障转移从节点,当主节点的“写”命令并发高且需要持久化,可以只在从节点开启AOF(主节点不需要)
Redis主从复制模式


一主多从

针对“读”较多的场景,“读”由多个从节点来分担,但节点越多,主节点同步到多节点的次数也越多,影响带宽,也加重主节点的稳定。
Redis主从复制模式


树状主从

一主多从的缺点(主节点推送次数多压力大)可用些方案解决,主节点只推送一次数据到从节点1,再由从节点2推送到11,减轻主节点推送的压力
Redis主从复制模式



最后我们来看一看Redis从节点启动之后,是如何从主节点来复制数据的,根据上述所说,刚起来肯定是进行全量同步,之后如果从节点不宕机,那么就会持久进行增量同步。从节点复制原理的过程大致如下:

  1. 保存主节点信息
  2. 主从建立socket连接
  3. 发送ping命令
  4. 权限验证,如密码
  5. 同步数据,全量同步
  6. 命令持续复制,增量同步

本文地址:https://blog.csdn.net/newbie0107/article/details/107419383

相关标签: Redis