主从复制

主次复制作用

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

主从复制介绍

在redis的复制概念模型中,分为"主(master)"和"从(slave)"两种角色类型的服务器,从服务器"服从"主服务器。主服务器既可以读也可以写,而从服务器原则上只允许读操作(通过修改配置,从服务器也可以执行写入操作),同时负责接收和同步主服务器上的数据。主服务器和从服务器是一对多的关系,从服务器也可以拥有从服务器,以此类推。

主从复制中,主服务器负责写入,从服务器负责读取

主从复制启用

从节点开启主从复制,有3种方式:

  1. 配置文件: 在从服务器的配置文件中加入:slaveof
  2. 启动命令: redis-server启动命令后加入 --slaveof
  3. 客户端命令: Redis服务器启动后,直接通过客户端执行命令:slaveof
    ,则该Redis实例成为从节点。

主从复制原理

主从复制过程大体可以分为3个阶段:连接建立阶段(即准备阶段)、数据同步阶段、命令传播阶段。

1. 保存主节点(master)信息

执行 slaveof 后 Redis 会打印如下日志:

2. 从节点与主节点建立网络连接

从节点(slave)内部通过每秒运行的定时任务维护复制相关逻辑,当定时任务发现存在新的主节点后,会尝试与该节点建立网络连接

从节点与主节点建立网络连接

从节点会建立一个 socket 套接字,从节点建立了一个端口为51234的套接字,专门用于接受主节点发送的复制命令。从节点连接成功后打印如下日志:

如果从节点无法建立连接,定时任务会无限重试直到连接成功或者执行 slaveof no one 取消复制

关于连接失败,可以在从节点执行 info replication 查看 master_link_down_since_seconds 指标,它会记录与主节点连接失败的系统时间。从节点连接主节点失败时也会每秒打印如下日志,方便发现问题:

#Error condition on socket for SYNC: {socket_error_reason}

3. 发送 ping 命令。

连接建立成功后从节点发送 ping 请求进行首次通信,ping 请求主要目的如下:

  • 检测主从之间网络套接字是否可用。
  • 检测主节点当前是否可接受处理命令。

如果发送 ping 命令后,从节点没有收到主节点的 pong 回复或者超时,比如网络超时或者主节点正在阻塞无法响应命令,从节点会断开复制连接,下次定时任务会发起重连。

从节点发送的 ping 命令成功返回,Redis 打印如下日志,并继续后续复制流程:

4. 权限验证

如果主节点设置了 requirepass 参数,则需要密码验证,从节点必须配置 masterauth 参数保证与主节点相同的密码才能通过验证;如果验证失败复制将终止,从节点重新发起复制流程。

5. 同步数据集

主从复制连接正常通信后,对于首次建立复制的场景,主节点会把持有的数据全部发送给从节点,这部分操作是耗时最长的步骤。

6. 命令持续复制

当主节点把当前的数据同步给从节点后,便完成了复制的建立流程。接下来主节点会持续地把写命令发送给从节点,保证主从数据一致性。

Reids系列: Redis主从复制 (四)相关推荐

  1. Reids系列: Redis哨兵模式(Sentinel) (五)

    哨兵模式 介绍 Redis-Sentinel是官方推荐的高可用解决方案,当redis在做master-slave的高可用方案时,假如master宕机了,redis本身(以及其很多客户端)都没有实现自动 ...

  2. Reids系列: Redis事务 (三)

    Redis的事务中启用的是乐观锁,只负责监测key没有被改动.如果没变正常执行,如果有变事务取消 import redis.clients.jedis.Jedis; import redis.clie ...

  3. springboot mybatis ehcache_SpringBoot入门建站全系列(十四)集成Redis缓存

    SpringBoot入门建站全系列(十四)集成Redis缓存 一.概述 本地缓存,就是使用应用内使用本地内存将数据暂缓存储,一般数据库的查询如果不怎么改动,可以用本地缓存暂存. 远程缓存,比如redi ...

  4. 【Linux服务器开发系列】一场redis线上事故引发的思考丨redis持久化 rdb和aof丨redis主从复制

    一场redis线上事故引发的思考 1. 事故背景介绍 2. redis持久化 rdb和aof 3. redis主从复制 4. 解决方案详解 [Linux服务器开发系列]一场redis线上事故引发的思考 ...

  5. 【Redis系列】深入浅出Redis主从复制之哨兵模式【实践】

    接上文:深入浅出Redis主从复制之读写分离[一篇搞懂Redis复制] 在上文简单的主从复制中,有一个这样的问题,一旦master宕机,就无法在客户端完成写操作.而哨兵模式刚好解决了这个问题. Red ...

  6. 一文把Redis主从复制、哨兵、Cluster三种模式摸透

    概述 Redis作为缓存的高效中间件,在我们日常的开发中被频繁的使用,今天就来说一说Redis的四种模式,分别是「单机版.主从复制.哨兵.以及集群模式」. 可能,在一般公司的程序员使用单机版基本都能解 ...

  7. 摸透 Redis 主从复制、哨兵、Cluster 三种模式

    概述 Redis作为缓存的高效中间件,在我们日常的开发中被频繁的使用,今天就来说一说Redis的四种模式,分别是「单机版.主从复制.哨兵.以及集群模式」. 可能,在一般公司的程序员使用单机版基本都能解 ...

  8. Redis主从复制、哨兵模式和分布式集群

    为什么需要集群和高可用 为什么需要主从复制 主要是安全性和可用性的考虑,如果只有一个redis服务,一旦服务宕机,那么所有的客户端无法访问,会对业务造成很大影响,另一个是一旦硬件损坏,单机无法恢复,会 ...

  9. Redis主从复制 AKF

    Redis主从复制 文章目录 Redis的数据一致性 Redis集群 1.redis高可用(x轴) 2.redis的哨兵 3.如何解决容量有限问题(Y轴) 4.redis的集群 4.1 redis集群 ...

最新文章

  1. 【深度学习】(8) CNN中的通道注意力机制(SEnet、ECAnet),附Tensorflow完整代码
  2. WDA将改变现有的abap的开发方式
  3. 登录验证---过滤器(Fileter)
  4. List-存储原理(quicklist)
  5. Pandas条件筛选 | Python技能树征题
  6. mysql keepalived双主双活_mysql高可用架构方案之中的一个(keepalived+主主双活)
  7. python 日志 logging模块(详细解析)
  8. 服务器进入bios用u盘启动不了系统,用u盘装系统,进入bios后没有usb启动项怎么办...
  9. 不能正常判断按键函数中的Flag
  10. Linux环境下基于策略的路由
  11. android使用的数据,在 Android 应用中使用数据 - Xamarin | Microsoft Docs
  12. 计算机视觉领域的一些牛人博客,超有实力的研究机构等的网站链接---个人整理
  13. 【已测】asp留言板,留言转发到手机上
  14. Spring框架学习笔记6-AOP编程-AspectJ方式
  15. PDF解密去水印工具
  16. php网页象棋源码,JS小游戏之象棋暗棋源码详解_javascript技巧
  17. teamviewer远程控制工具
  18. 声势浩大发展云服务的金蝶,如今“破茧”了吗
  19. 阿里巴巴校招2017前端笔试题目 -- 原生js/html5 实现一个路由
  20. Java Swing编写的一个猜拳小游戏

热门文章

  1. java dateformat_Java中的DateFormat用法
  2. html 数字强制换行,利用CSS实现连续的纯数字或字母强制换行的方法
  3. 出来混的,迟早要还的|深度好文
  4. 计算机启动后没有桌面,教你电脑开机桌面什么都没有怎么办
  5. Windows VBS服务的打开与关闭
  6. VM(桌面虚拟机软件)下载
  7. luckysheet的使用——07.二次开发自动插入批注功能
  8. vue:Cannot read property ‘xxx’ of undefined 出现原因
  9. 幽魂服务器正在维护中是什么情况,断恨刀最新改动:3月31日服务器维护解读
  10. Android ImageView高度自适应