主服务器可以有多个从服务器。同时从服务器可以与其他的从服务器的连接,形成图状结构。Redis的复制在主服务器上是非阻塞的。这意味着从服务器执行同步时主服务器能继续处理请求。Redis的复制在从服务器上也是非阻塞的。当从服务器同步时,假如你在redis.conf中进行了相应配置,也能够继续使用旧版本的数据集处理请求。还可配置当复制流宕掉时,从服务器返回给客户端一个错误。但当同步结束后,旧的数据集需要被删除,新的数据集需要被载入。在这个期间内,从服务器会阻塞到来的连接。
Redis复制从功能角度分为同步和命令传播两部分。同步用于将从服务器的数据库状态更新为主服务器的数据库状态,命令传播是当主服务器的数据库被修改造成主从不一致时,让从服务器与主服务器保持一致。
Redis通过PSYNC命令实现同步操作,有两种模式:完整重同步和部分重同步。
完整重同步
用于从服务器的初次复制或主返回+CONTINUE(下文介绍),主执行BGSAVE生成RDB文件,并在积压缓冲区中记录之后执行的所有命令。之后主将RDB文件发送给从服务器,从载入内存更新数据,之后主将积压缓冲区的所有命令发送给从。这之后主从达到一致状态。
部分重同步
用于处理主从断开重连后的复制情况。完整重同步是一个很耗费资源的操作,部分重同步就是只将断开期间的增量数据而不是整个数据库的全量数据发送给从服务器,更新至一致状态的操作。主要有三个概念:复制偏移量、复制积压缓冲区、运行ID。
复制积压缓冲区是有主服务器维护的一个先进先出的FIFO队列,将最近一段时间的写命令保存在队列中,并记录相对应的偏移量。主从服务器都会维护自己的复制偏移量,用于判断是否一致。当从断开重连后,会将自己的复制偏移量通知主,主判断该偏移量之后的数据是否在复制积压缓冲区中,若在则进行部分同步,反之进行全同步。每个Redis实例都有自己的运行ID,当从服务器保存的主ID与当前的主ID不同时则进行完整重同步。
下图是主从复制的概述图:
复制的步骤
a) 主服务器设置地址和端口.
b) 从服务器与主建立连接,并设置文件事件处理器,用于接受RDB文件及其他复制的命令。从服务器同时具有服务器和客户端两种状态。
c) 从服务器发送ping命令,用于检查套接字读写是否正常和主服务器是否能正确处理命令。如下图
d) 身份验证,根据从服务器的masterzuth选项和主服务器的requireoass选项进行验证。具体如下图
e) 发送端口信息,从将监听端口通知主,用于INFO REPLICATION打印
f ) 进行主从同步
g) 命令传播。主将写命令发送给从服务器。
其他
a) 要禁止主服务器配置为关闭持久化并自动重启,当主服务器挂掉并重启后由于没有持久化数据造成数据丢失为空,这是若进行主从复制则使从服务器的数据丢失。
b) 可以设置Redis主服务器在当前至少拥有N个从服务器的连接的情况下,才能接受写请求
c) 从服务器支持默认开启的只读模式,可在redis.conf中使用rename-command指令来禁止命令
相关推荐
Redis主从复制和集群配置说明
Redis主从复制以及主从复制技术原理.docx
描述redis主从复制的过程中的各种细节,包括各个阶段所使用的事件处理函数
实现了redis主从复制(读写分离)集群
redis主从复制(csdn)————程序
基于北京尚硅谷周阳老师讲解的redis。个人学习总结: 包含redis常用命令,redis配置文件,redis持久化,redis事务,redis主从复制,jedis的使用。
1.使用 DICT 协议添加一条测试记录 2.设置保存路径 3.设置保存文件名 4.保存 1.连接远程主服务器 2.设置保存路径 3.设置保存文件名 4.保存
windows下redis主从复制。一个master,两个slave。附带博客介绍https://blog.csdn.net/xixiyuguang/article/details/105121660
1、生成恶意.so文件,下载RedisModules-ExecuteCommand使用make编译即可生成 1、监听本地1234端口 2、将Redis服务器设置
公司运维手册,LAMP架构+Redis主从复制,废话不多说,上干货!
Redis 主从复制1
Redis主从复制(一主两从)+哨兵配置手册 Redis主从复制(一主两从)+哨兵配置手册 Redis主从复制(一主两从)+哨兵配置手册
Redis集群-Redis安装、Redis主从复制、哨兵、Redis集群
redis主从复制过程.rar
redis服务配置,配置redis主从复制,多个哨兵监控redis主服务,自动切换服务
NoSQL之Redis主从复制集群部署.pdf