写在前面

本文一起看下redis的读写分离架构。

1:为什么要读写分离

读写分离,即主库执行写请求,然后写的数据同步到从库,从库执行读请求,架构图如下:

一般读写分离带给我们的好处可能如下:

分担主库的读压力,增加系统处理请求的能力。
数据备份。

2:首次同步的过程分析

假设我们有2个redis实例,IP192.168.10.110端口6379,以及IP192.168.10.111端口6379,需要设置111为110的从库,可以执行slaveof 192.168.10.110 6379,执行成功后主从关系就设置完毕了,之后的执行过程如下:

1:111发送消息[psync ? -1],其中格式[psync runId offset],runId是一个redis实例每次启动时的唯一标识,-1代表偏移量为1,即首次同步
2:110收到psync消息后,回复消息FULLRESYNC {runId} {offset},该消息告知111自己的runId和当前偏移量,到这里可以认为第一阶段完成
3:110执行fork启动子进程,生成rbd快照,并发送给111,111收到快照后,清空本地数据,并加载rbd快照数据到内存,在此期间110会将新产生的修改写到repli buffer中,到这里可以认为第二阶段完成
4:rbd发送完毕后,将repli buffer中的数据也发送给111,到这里首次同步过程完毕

以上的过程可用下图来表述:

我们需要特别注意110生成rdb并发送给111的过程,在redis之AOF和RDB持久化 一文分析了频繁的生成RDB会给系统带来的问题,而且在当前的场景下由于还需要将rdb发送给从库,因此又会对主库的网络带宽带来压力,也会直接影响正常的请求处理。在一些redis读压力不断增大的场景下,我们可能会不断的增加从库的个数,其实就会间接的造成主库频繁生成RDB的问题,关于这个问题通过3:主从从模式一起看下。

3:主从从模式

大量的建立从库,会导致主库频繁执行fork生成RDB,此时,我们可以采用主从从,即主从级联的模式来解决这个问题,具体来说就是,新加的从库不从主库同步数据,而是从一个从库来同步数据,即作为该从库的从库,实际操作中我们可以预留一台内存等资源相对充足的机器来充当这个角色,此时这个结构可能如下图:

当数据首次的全量同步完成后,就可以持续的通过长连接来将新的写入同步到从库了,这里的同步需要使用到repl_backlog_buffer的内存结构(repl_backlog_size参数设置大小),这是一个环形的结构,用来循环记录新的写入,通过偏移量来记录位置信息,其中主库记录自己当前写入的位置信息master_repl_offset,从库记录自己当前同步的位置信息slave_repl_offset,可参考下图:

当从库因为网络或者其他原因意外断开重连后,数据会进行增量同步,也需要依赖repl_backlog_buffer结构,在从库重连后,会向主库发送psync {runId} {offset},然后主库会将repl_backlog_buffer的offset之后的增量数据发送给从库,之后就再次进入到基于长连接的常规数据同步过程,这个过程可以参考下图:

注意以上分析重连不考虑主库写入repl_backlog_buffer已经将从库还未同步的数据盖掉的情况,如果是主库判断盖掉的话就会执行全量同步过程了。

写在后面

参考文章列表:

redis之读写分离相关推荐

  1. redis主从读写分离replication复制数据+sentienl哨兵集群主备切换

    说明:最近公司在自己搭建了一套redis主从读写分离+sentinel哨兵集群主备切换,通过手工去搭建replication复制+主从架构+读写分离+哨兵集群+高可用redis集群架构 公司的已经搭建 ...

  2. Linux企业运维 6.6 -- Redis部署及主从切换、Redis+Mysql读写分离

    目录 Redis简介 redis的编译.安装 1.server1的redis配置 2.server2的redis安装 3.server3配置redis 三.redis主从复制 四.Sentine主从自 ...

  3. windows下Redis 主从读写分离部署

    windows下Redis 主从读写分离部署 原文: windows下Redis 主从读写分离部署 1.可直接下载window下的运行文件(下面这个链接) 也可以浏览github 查看相应的版本说明文 ...

  4. Redis主从读写分离配置

    环境描述: 主redis:192.168.10.1 6379 从redis:192.168.10.2 6380 一.主从配置 1.将主从redis配置文件redis.conf中的aemonize no ...

  5. redis的读写分离和主机宕机

    主写从读,读写分离 主:只允许写操作 从:只允许读操作 主机宕机,从机原地待命 主机宕机后,他的从机的状态会变成未启用,因为它要等他的老大,也就是主机正常运行后,它才工作 模拟一下 关闭主机的服务 r ...

  6. Redis数据库如何实现读写分离

    2019独角兽企业重金招聘Python工程师标准>>> Redis是一种NoSQL的文档数据库,通过key-value的结构存储在内存中,Redis读的速度是110000次/s,写的 ...

  7. 【Redis Cluster集群】redis cluster 多mster写入,读写分离,高可用

    4. [Redis Cluster集群]redis cluster 多mster写入,读写分离,高可用 redis cluster,提供了多个master, 分布式存储:数据可以分布式存储到多个mas ...

  8. redis读写分离 java_spring-data-redis读写分离

    在对Redis进行性能优化时,一直想对Redis进行读写分离.但由于项目底层采用spring-data-redis对redis进行操作,参考spring官网却发现spring-data-redis目前 ...

  9. jedis 读写分离_Redis实现数据库读写分离

    Redis是一种NoSQL的文档数据库,通过key-value的结构存储在内存中,Redis读的速度是110000次/s,写的速度是81000次/s,性能很高,使用范围也很广. 下面用一个实例实现re ...

最新文章

  1. zabbix trapper方式监控
  2. 安全多方计算(MPC)从入门到精通:JUGO-IDE及SDK
  3. iOS开发那些事--iOS6 UI状态保持和恢复
  4. MySQL绿色版5.7以上安装教程
  5. linux基础 linhaifeng,Linux基础之命令练习Day2(示例代码)
  6. TemplatePart用法说明
  7. java 大小固定_为什么Java堆的最大大小是固定的?
  8. matlab贝塞尔函数的根,matlab画贝塞尔函数根分布的曲线图
  9. oracle 获取异常 信息,oracle存储过程异常信息的显示
  10. 《Redis开发与运维》笔记-复制
  11. Android SELinux avc denied解决
  12. oracle增删改查基本语句
  13. 鸿蒙系统可以安装当贝市场吗,荣耀智慧屏安装软件全攻略,新手党必备!当贝市场推荐...
  14. 2022新版UI聚合支付系统四方系统源码+修复漏洞完美版
  15. CTF 你就是长不了
  16. 11g OCM 考试感悟
  17. python pgm 转 bmp
  18. Win10开机取消微软登录密码
  19. 想一想就感觉到生活还是充满很多正能量的
  20. 21考研 为啥看了那么多经验贴,还是搞不定考研?

热门文章

  1. js中jquery鼠标事件(点击替换、鼠标移入、移出)
  2. 移动IM开源框架对比
  3. 如何利用嵌入式集成开发工具,让其更好地服务于设计?
  4. ssm高校党员信息管理系统
  5. Java时间片轮转(简单模拟实现,适合初学者)
  6. mysql与mysqld
  7. 17. 权重衰退(weight_decay)
  8. 信管家源代码c语言,AK老唐信管家软件指标 宝塔线副图源码
  9. linux下退出mysql
  10. Ubuntu怎么查看电脑配置(ubuntu怎么查看系统配置)