前边的Redis持久化解决了,单机故障能够重启恢复备份数据的功能。而在分布式系统中,为了解决单点问题,达到高可用的目的,需要进行redis数据分布式,进行多台机器实时备份,从而满足更高效的故障恢复和负载均衡等需求。好,这篇我们来看一下Redis的复制功能。复制功能也是Redis哨兵模式,集群模式的基础。

参与复制的Redis节点分为主节点(master)和从节点(slave),默认情况下都为master,每个slave只能有一个master,而master可以同时有多个slave,复制的数据流是单向的,只能从master——>slave。

接下来我们从使用方式、支持的相关拓扑结构、相关原理、常见问题四个方面学习总结Redis的复制。


 一,使用方式:

 1,建立复制:a,通过在配置文件中加入:slaveof {masterHost} {masterPort}岁Redis启动生效;b,在redis-server启动命令后加入 --slaveof {masterHost} {masterPort}生效;c,直接使用命令:slaveof {masterHost} {masterPort}生效。通过使用info replication查看复制的相关状态。

       2,断开复制:slaveof命令不但可以建立复制,还可以在从节点执行slaveof no one来断开与主节点的复制关系。其流程a,断开与主节点复制关系;b,从节点晋升为主节点。

3,安全性:对于数据比较重要的节点,主节点通过设置requirepass参数进行密码验证。client必须使用auth命令实行校验,从节点需要配置masterauth参数与主节点一致。

4,只读:默认情况下,从节点使用slave-read-only=yes配置为只读模式。修改只在主节点实现。

5,传输延迟:Redis提供了repl-disable-tcp-nodelay参数用于控制是否关闭TCP_NODELAY。默认关闭。当开启时,主节点会合并较小的TCP数据包,从而节省带宽。一般为发送间隔40毫秒。如果要求低延迟,例如读写分离等,就关闭此功能;如果考虑容灾性,做备份,建议打开。


  二,拓扑结构:

Redis复制拓扑结构
拓扑结构 说明
1.一主一从 最简单的,master可以做业务操作,保持高性能,slave做备份,并开启AOF持久化,保持数据安全。
2.一主多从 对于读多写少的场景,可以进行读写分离,利用从节点分担主节点的压力。对于写并发量较高的场景,如果从节点过多,会加大网络带宽,同时加速主节点的负载。
3.树状主从结构

从节点不但复制主节点的数据,还充当其它从节点的主节点继续向下层复制。可以减小多个从节点给主节点带来过高负载,干扰主节点性能。


  三,流程原理:

       1,复制流程:

Redis复制流程
流程节点 说明
1.保存主节点信息 执行salveof命令后slave节点首选保存master的相关信息,方便后期通讯。
2.主从建立socket连接 slave内部通过每秒运行的定时任务维护复制相关逻辑,发现新的主节点,会尝试与其建立网络连接。
3.发送ping命令 连接建立成功后,发送ping请求进行首次通讯,检测主从之间的网络套接字是否可用、检测主节点当前是否可接受处理命令。主节点会pong回复。
4.权限验证 如果master设置了requirepass参数,则进行密码验证。
5.同步数据集 首次建立复制的场景,master会把数据全量发送给slave。
6.命令持续复制 随着master的写入操作,master会持续把写命令发送给slave,保持数据一致性。

       2,数据同步:

       psync复制命令,需要主从节点各自复制偏移量、主节点复制积压缓冲区、主节点运行id支持完成。从节点可以使用此命令完成部分复制和全量复制功能,命令格式:psync{runId}{offset}。

psync复制命令
1.复制偏移量offset master会维护自己的偏移量,slave每秒上报自身复制偏移量,slave接受到主节点发送命令后,会累加自己的复制偏移量。这样通过复制偏移量就能很清楚知道两者数据的一致性了。
2.复制积压缓冲区 master上一个固定长度的队列,默认大小1MB,当master有写命令时,不仅同步salve,还有写入一份缓冲区,用于各种异常的补救。
3.主节点运行id 每个redis启动后都会分配一个40位的十六进制字符串为运行id,为其唯一标示。

       看下示意图:

       3,全量复制流程:

说明:第6步,由于在传输RDB以及加载的时候,master任然有写操作,这是就放到前边说到的复制缓冲区中,等加载完RDB后,主节点将缓冲区的数据发送给从节点从而保持数据一致。

其中时间开销主要出现在:1,master的bgsave操作;2,RDB文件的网络传输;3,slave清空旧数据;4slave加载RDB文件;5,如果开启AOF,AOF的重写时间。这些需要我们多考虑的。

       4,部分复制流程:

      当slave和master短时间断开后,重新连接后,master会将复制缓冲区中的数据,增量发送给slave。避免全量同步的巨大开销。

       5,心跳:主从节点彼此都有心跳检测机制:master默认10秒发送ping命令,判断从节点的存活性和连接状态;slave每个1秒发送replconf ack {offset},上报自己的复制偏移量。从而达到彼此的及时了解。

       6,异步复制:master节点不仅负责数据读写,还负责把写命令同步给slave,写命令的发送过程是异步完成,在处理完业务直接返回client,不等待从节点的复制完成。从而达到主从复制基本上不影响master处理正常业务逻辑的性能。


  四,常见问题:

1-读写分离

a,复制数据延迟:业务能否容忍;通过偏移量进行监控

b,读到过期数据:惰性删除、定时删除。3.2版本后解决此问题。

c,从节点故障问题:考虑Redis Cluster集群方案

2-主从配置不一致 对于内存等,主从机器的配置,Redis参数配置最好一样,防止出现一个能用,另一个down掉的情况。
3-规避全量复制

a,第一次建立复制,无法避免,低峰操作,考虑影响;

b,节点运行ID不匹配,利用后边的哨兵模式、集群模式进行解决;

c,复制积压缓冲区不足,分析合理的缓冲区大小。

4-规避复制风暴 从节点不要太多,必要可以使用树状拓扑结构,来保护主节点。

好,这篇小结了一下Redis的复制功能,这也是Redis后边哨兵模式和集群模式的基础。学习设计思想。加油。

Redis(二)——复制相关推荐

  1. redis之复制之谜(二)

    redis的复制第三版(异步复制之replica异步) redis在2.2.0版本中引入了replica异步接收数据 replica连接上master,经过密码认证通过后(新加的密码认证过程,auth ...

  2. Redis(八):Redis的复制(Master/Slave)

    Redis的复制(Master/Slave)目录导航: 是什么 能干嘛 怎么玩 复制原理 哨兵模式(sentinel) 复制的缺点 是什么 官网 行话:也就是我们所说的主从复制,主机数据更新后根据配置 ...

  3. redis主从复制,复制功能是高可用Redis的基础,为满足故障恢复和负载均衡等需求把Redis数据复制多个副本部署到其他机器;如何实现redis的主从复制模式以及主从复制模式下常见的运维问题;

    目录 一.如何使用redis主从复制模式 1.建立复制 2.断开复制 3.安全性 4.只读模式 5.传输延迟 二.Redis的复制拓扑结构 1.一主一从结构 2.一主多从结构 3.树状主从结构 三.主 ...

  4. Redis的复制详解

    复制基础概念 Redis的主从复制特点 一个master可以有多个slave 可以用级联复制功能 master是以非阻塞的方式来同步数据给slave 其实redis的复制和mysql的主从复制很相似, ...

  5. Redis:复制,第3部分——redis-py和Python中的Redi哨兵一起使用

    目录 redis-py和Redis redis-py和Redis 哨兵 主机改变和哨兵故障转移 关于Redis复制和Redis哨兵的主题仍然是--使用Python的redis-py库的几个例子. 以前 ...

  6. Redis:复制,第2部分——主从复制和Redis哨兵

    目录 介绍 基本主从复制 Redis主机配置 Redis从机配置 改变从=>主角色 Redis哨兵 运行哨兵 Redis 哨兵自动故障转移 相关链接 第一部分-- Redis:复制,第1部分-- ...

  7. Redis的复制(Master/Slave)

    Redis的复制:就是我们所说的主从复制,主机数据更新后根据配置和策略,自动同步到备机的master/slaver机制,Master以写为主,Slave以读为主 从库配置:slaveof 主库IP 主 ...

  8. 公排系统php,全球公排自动滑落二二复制多级分销系统 PHP源码

    详细制度讲解 1.分销与公排并行 1-9级自定义设置分销层级 2-9级自定义递增排位公排: 2.威 信分销的状态可以开启或关闭,由您说了算(关闭分销后将不再启用分销和公排) 公排的状态可以开启或关闭( ...

  9. Redis二:redis-cli操作各种数据类型

    Redis二:redis-cli操作各种数据类型 1. redis-cli的登录与常用数据类型 2. 各种数据类型的操作 2.1 String(数值在这里也被视为字符串) 2.3 Hash(可以将一个 ...

最新文章

  1. android程序设计期末试题b,《Android程序设计》期末试题B.doc
  2. Linux性能挖潜的隐藏招数:内核CPU亲和性参数调整
  3. java面向对象(1)
  4. 天翼云从业认证课后习题(3.2天翼云存储产品和3.4云数据库)
  5. nodeJS中的异步编程
  6. mac模式怎样构造在jsp中_mac下tomcat的配置和jdk的设置 jsp的初级知识
  7. mysql sakila world_MySQL 安装示例数据库(employee、world、sakila、menagerie 等)
  8. 7-2 两个数的简单计算器 (10 分)
  9. 弹出“FRM-40400:事务完成:已应用和保存X条记录
  10. sde自动备份到文件gdb
  11. 好用的 windows10 软件推荐
  12. 【项目管理】项目管理四要素
  13. 企业私有云存储选NAS还是私有云盘?3分钟带你了解企业NAS和企业云盘的区别
  14. ios特定界面强制横屏
  15. 509.斐波那契数列
  16. 最新版的转转验机源码+完整教程
  17. Java #JDK下载以及环境配置
  18. 我是如何降低项目的沟通成本?
  19. JS 函数的递归算法
  20. FreeRTOSMini

热门文章

  1. Python利用数学方程式画4种不一样的心型图案
  2. jetson nano如何拓展磁盘空间
  3. matlab学习——线性规划
  4. 心得体会标题大全_心得体会题目大全
  5. m苹果放n篮子_【求这个编程】 有m个橘子,n个篮子,把橘子全部放进篮子里的...
  6. 华为ebgp_华为设备BGP详细配置
  7. 记录CTF命令执行练习中遇到的几道题(一些PHP命令过滤的绕过方法)
  8. POJ 2752 既是前缀又是后缀
  9. Cloud Hosted Notebook Showdown(云托管笔记本)
  10. 城市空中交通和无人系统的空中交通管制评估