Redis主从复制及原理

  • Redis主从复制概述
  • Redis同步方式
  • Redis配置主从复制
  • Redis主从复制启用方式(版本5.0之后)

Redis主从复制概述

  1. 什么是主从复制

    主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master),后者称为从节点(slave),数据的复制是单向的,只能由主节点到从节点。
    默认情况下,每台Redis服务器都是主节点;且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。

  2. 为什么要使用主从复制

  • 数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。
  • 故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余。
  • 负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写Redis数据时应用连接主节点,读Redis数据时应用连接从节点),分担服务器负载;尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量。
  • 读写分离:可以用于实现读写分离,主库写、从库读,读写分离不仅可以提高服务器的负载能力,同时可根据需求的变化,改变从库的数量;
  • 高可用基础:除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Redis高可用的基础。

Redis同步方式

  1. 全量同步
    Redis全量复制一般发生在Slave初始化阶段,这时Slave需要将Master上的所有数据都复制一份。具体步骤如下:
  • 从服务器连接主服务器,发送SYNC命令;
  • 主服务器接收到SYNC命名后,开始执行BGSAVE命令生成RDB文件并使用缓冲区记录此后执行的所有写命令;
  • 主服务器BGSAVE执行完后,向所有从服务器发送快照文件,并在发送期间继续记录被执行的写命令;
  • 从服务器收到快照文件后丢弃所有旧数据,载入收到的快照;
  • 主服务器快照发送完毕后开始向从服务器发送缓冲区中的写命令;
  • 从服务器完成对快照的载入,开始接收命令请求,并执行来自主服务器缓冲区的写命令;
  1. 增量同步
  • Redis增量复制是指Slave初始化后开始正常工作时主服务器发生的写操作同步到从服务器的过程。增量复制的过程主要是主服务器每执行一个写命令就会向从服务器发送相同的写命令,从服务器接收并执行收到的写命令。
  1. Redis主从同步策略
  • 主从刚刚连接的时候,进行全量同步;全同步结束后,进行增量同步。当然,如果有需要,slave 在任何时候都可以发起全量同步。redis 策略是无论如何,首先会尝试进行增量同步,如不成功,要求从机进行全量同步。
  1. Redis大概主从同步是怎么实现的?
全量同步:
master服务器会开启一个后台进程用于将redis中的数据生成一个rdb文件,与此同时,服务器会缓存所有接收到的来自客户端的写命令(包含增、删、改),当后台保存进程
处理完毕后,会将该rdb文件传递给slave服务器,而slave服务器会将rdb文件保存在磁盘并通过读取该文件将数据加载到内存,在此之后master服务器会将在此期间缓存的
命令通过redis传输协议发送给slave服务器,然后slave服务器将这些命令依次作用于自己本地的数据集上最终达到数据的一致性。部分同步:
从redis 2.8版本以前,并不支持部分同步,当主从服务器之间的连接断掉之后,master服务器和slave服务器之间都是进行全量数据同步,但是从redis 2.8开
始,即使主从连接中途断掉,也不需要进行全量同步,因为从这个版本开始融入了部分同步的概念。部分同步的实现依赖于在master服务器内存中给每个slave服务器维护了
一份同步日志和同步标识,每个slave服务器在跟master服务器进行同步时都会携带自己的同步标识和上次同步的最后位置。当主从连接断掉之后,slave服务器隔断时间
(默认1s)主动尝试和master服务器进行连接,如果从服务器携带的偏移量标识还在master服务器上的同步备份日志中,那么就从slave发送的偏移量开始继续上次的同步
操作,如果slave发送的偏移量已经不再master的同步备份日志中(可能由于主从之间断掉的时间比较长或者在断掉的短暂时间内master服务器接收到大量的写操作),则
必须进行一次全量更新。在部分同步过程中,master会将本地记录的同步备份日志中记录的指令依次发送给slave服务器从而达到数据一致。

Redis配置主从复制

  1. 接下来实现一主两从,「前提安装好redis」
  2. 将redis.conf配置文件复制在桌面三份
 cp /usr/local/redis5.0.8/redis.conf ./myredis/redis6379.confcp /usr/local/redis5.0.8/redis.conf ./myredis/redis6380.confcp /usr/local/redis5.0.8/redis.conf ./myredis/redis6381.conf

  1. 修改对应配置文件 redis6379.conf
- port 6379 修改端口
- daemonize yes 设置为后台启动
- pidfile /var/run/6379.pid 指定pid文件
- logfile 6379.log 日志文件
- dbfilename dump6379.rdb
- requirepass 123456 设置密码 可选
- bind 127.0.0.1 绑定的ip

PS:下图是启动后的相关文件截图

修改redis6379.conf如上步骤,我们将6379设置为master服务器

  1. 按照上面步骤修改另外两个配置文件,然后增加下面配置
# redis 5.0之后使用replicaof代替slaveof
- replicaof 127.0.0.1 6379 指定master的ip+port
- masterauth 123456 配置master服务器密码
- replica-read-only yes 配置从服务器可读
  1. 启动redis
  2. 查看主从信息
    redis-cli -p 端口号 进入命令窗口通过 info replication 命令可以看到复制的一些信息,下面是主服务器:

    可以看到role角色是master,connected_slaves=2 说明有两个从服务器,再下面就是两个从服务器的信息,如ip、port及状态等

Redis主从复制启用方式(版本5.0之后)

  1. 从节点开启主从复制,有3种方式:
  • 配置文件: 在从服务器的配置文件中加入:replicaof masterip masterport(上述方法)

  • 启动命令: redis-server启动命令后加入 --replicaof masterip masterport

  • 客户端命令: Redis服务器启动后,直接通过客户端执行命令:replicaof masterip
    masterport,则该Redis实例成为从节点。

我们使用kill去停掉redis:6380服务:

使用kill命令将6080端口的redis给停止掉,然后使用启动命令去指定master

使用redis-cli进如从服务器的命令窗口,可以看到对应角色以及master的相关信息:

使用命令replicaof no one可以取消复制:

可以看出取消复制之后,自己就是master。待续…

Redis主从复制及原理相关推荐

  1. Redis 主从复制的原理及演进

    本文作者:百度基础架构部工程师,王钰 Redis 的主从复制经历了多次演进,本文将从最基本的原理和实现讲起,并层层递进,逐步呈现 Redis 主从复制的演进历史.大家将了解到 Redis 主从复制的原 ...

  2. Redis 主从复制的原理及演化

    一.什么是主从复制 在数据库语境下,复制( replication)就是将数据从一个数据库复制到另一个数据库中.主从复制,是将数据库分为主节点和从节点,主节点源源不断地将数据复制给从节点,保证主从节点 ...

  3. 深入Redis 主从复制原理

    复制原理 1.复制过程 复制的过程步骤如下: 1.从节点执行 slaveof 命令        2.从节点只是保存了 slaveof 命令中主节点的信息,并没有立即发起复制        3.从节点 ...

  4. [网鼎杯 2020 玄武组]SSRFMe【redis主从复制ssrf】

    参考博客: https://blog.csdn.net/qq_41891666/article/details/107103116 https://zhuanlan.zhihu.com/p/11205 ...

  5. Redis主从复制下的工作原理

    Redis主从复制下的工作原理 Redis主从复制的配置十分简单,它可以使从服务器是主服务器的完全拷贝.需要清楚Redis主从复制的几点重要内容: 1)Redis使用异步复制.但从Redis 2.8开 ...

  6. 复制给节点的命令_深入理解redis主从复制原理

    1.复制过程 从节点执行 slaveof 命令. 从节点只是保存了 slaveof 命令中主节点的信息,并没有立即发起复制. 从节点内部的定时任务发现有主节点的信息,开始使用 socket 连接主节点 ...

  7. Redis主从复制原理学习

    Redis主从复制原理学习总结 - 运维笔记 和Mysql主从复制的原因一样,Redis虽然读取写入的速度都特别快,但是也会产生读压力特别大的情况.为了分担读压力,Redis支持主从复制,Redis的 ...

  8. 都在讲Redis主从复制原理,我来讲实践总结

    摘要:本文将演示主从复制如何配置.实现以及实现原理,Redis主从复制三大策略,全量复制.部分复制和立即复制. 本文分享自华为云社区<Redis主从复制实践总结>,原文作者:A梦多啦A . ...

  9. 面试官:请讲一下Redis主从复制的功能及实现原理

    摘要:Redis在主从模式下会有许多问题需要考虑,这里写了一些关于redis在多服务器下的一些问题分析和总结. Redis单节点存在单点故障问题,为了解决单点问题,一般都需要对redis配置从节点,然 ...

最新文章

  1. Mac下安装Node.js
  2. 蓝绿发布、滚动发布、灰度发布,有什么区别?这下明白了
  3. 规格选择_Axure教程:实现商品规格选择功能
  4. 网页加载出现没有合适的负载均衡器_gRPC实战--Kubernetes中使用envoy负载均衡gRPC流量...
  5. 计算机MCI风险快速筛查系统,轻度认知障碍风险快速筛查工具的测算过程及判别效果分析...
  6. 【深度学习】从R-CNN到Mask R-CNN的思维跃迁
  7. 算法的时间复杂度示例
  8. 人工智能实验评价指标_电子科大人工智能团队最新研究成果,5秒诊断癌症
  9. Vue.js2.0开发环境搭建(四)
  10. 【Linux分享】Linux常用命令+教程分享
  11. eclipse maven项目 class类部署不到tomcat下_Springboot介绍以及用Eclipse搭建一个简单的Springboot项目教程
  12. ### Error building SqlSession. ### Cause: org.apache.ibatis.builder.BuilderException: Error creating
  13. leetcode74:二维矩阵搜索问题
  14. 比较两个对象是否一样的代码
  15. [转载] python基础 - namedtuple和enum
  16. 计算机无线网络设备有哪些,电脑无线上网设备有哪几种
  17. Tomcat环境搭建以及闪退问题
  18. springboot+mybatis打包时,单元测试类报错
  19. Gitlab如何创建项目和添加成员
  20. 计算机资源库在哪,电脑的资源管理在哪里

热门文章

  1. Python文档阅读——Pydoc
  2. Median Absolute Deviation(MAD,绝对中位差)和3sigma准则剔除粗差方法对比(代码)
  3. Javascript基础篇小结
  4. Python 快速排序算法【简单易懂,代码直接运行】
  5. (读书笔记)大数据时代
  6. 输入生日测试你的前世今生
  7. @GetMapping和@RequestMapping
  8. CF730J Bottles
  9. (二)应用层 -- 2. Web和HTTP(下)
  10. 一款生成gif图片的工具