前言

持久化解决了单机redis的数据保存问题,但是redis还是存在以下两个问题:
(1)假如某天这台redis服务器挂了,redis服务将彻底丧失
(2)redis的读和写都集中到一台机上,如果请求量比较大时,将可能被击溃
解决
为了解决上述两个问题,redis提供了主从架构,在主从架构中,主服务器负责写服务,多台从服务器负责读服务,缓解了单个redis服务器的压力;主服务器将所有数据源源不断的同步到从服务器上,一旦主服务器挂了,还有从服务器可以提供服务,redis服务将不会间断。

一、主从复制

1.概念

主从复制是将一台redis服务器的数据,复制到其他redis服务器,数据的复制是单向的,只能主节点到从节点。 默认情况下,每台服务器都是主节点,一个主节点可以有多个从节点,但是一个从节点只有一个主节点。

2.特点

(1)一台主服务器可以连接多台从服务器
(2)从服务器也可以连接其他redis服务器,作为其他redis服务器的主服务器,从而形成一条链
(3)主从复制是异步的,从服务器不会阻塞,但是在数据写到从服务器内存的这段期间,从服务器对外提供的还是旧的数据.

3.作用

(1)数据冗余:主从复制实现了数据的热备份,是持久化的一种数据冗余方式
(2)故障恢复:主节点出现问题,从节点提供服务,实现快速的故障恢复。
(3)负载均衡:在主从复制的基础上,配合读写分离,可以让主节点提供读,从提供写,分但服务器负担,尤其是在写少读多的情况下,可以提高服务器的并发量。
(4)高可用基石:主从复制是集群和哨兵模式的基础。

4.类型

(1)全量同步 指主服务器每次与从服务器同步都是同步全部数据。主服务器持久化数据为一个rdb文件,在此期间用缓存区把所有对主服务器的写操作命令存储起来了,然后再rdb传给从服务器,再把储存起来的命令也传过去;从服务器从接收到的rdb文件加载数据,然后再加载传过来的命令。(一般是第一次从库执行复制

(2)部分同步 指主服务器每次与从服务器同步都是只同步增量数据

5.原理


(1)从服务器收到客户端的saveof命令,检查是否存储了主服务器的运行id和复制偏移量。
(2)如果没绑存储,从服务器发送 psync 1命令和主服务器进行一次全量复制,并且保存主服务器发过来的运行id 和 复制偏移量。
(3)如果有存储了,从服务器发送运行id和复制偏移量,主服务器比较运行id是否一致,复制偏移量是否正常,如果不一致或者不正常,进行全量同步。
(4)如果运行id和复制偏移量正常,那么二者进行增量同步,同步根据传过来复制偏移量,到复制缓存区找到对应的字节,并且把该字节对应的之后的命令都同步过去。

二、哨兵模式

1.概念

哨兵也是一个Linux的进程;各个哨兵分布在不同的Linux服务器或者同一个Linux服务器上(一个风险比较大),它们不停的监控redis的主服务器和从服务器与其它的哨兵进程,一旦察觉redis主服务挂了,就会从从服务器中选出一个作为新的主服务器提供服务。

原理:哨兵发送命令,等待redis服务器响应,从而监控多个服务器实例。

2.作用

(1)不断的检查主从架构中的redis服务中正常运行。
(2)如果出现问题会发信息提示你。
(3)如果主服务器挂了的话,会从从服务器中重新选举一台作为主服务器。

3.分类

(1)单哨兵

单哨兵是指只有一个哨兵进程,单哨兵挂了的话,哨兵系统也就挂了。

这里的哨兵有两个作用
(1)通过发送命令,让redis服务器返回,监控其状态
(2)当哨兵检测到master宕机,会自动切换从机变主机,然后通过发布订阅模式通知其他的从服务器,修改配置文件,让他们切换主机。

(2)多哨兵

多哨兵是指有多个哨兵进程;多哨兵只有一个哨兵挂了不影响哨兵系统继续提供服务。

哨兵怎么知道监控其它哨兵和redis服务?
哨兵每秒钟会向其它哨兵或者redis服务器发送ping命令,根据是否有返回来判断服务是否已经下线。

我们只是在哨兵的配置文件里配置了主服务器信息,但是它怎么知道从服务器信息?
哨兵每十秒钟会向redis主服务器或者从服务器执行info replication的命令,来确认它们的主从关系。

我们没有配置其他哨兵的地址,哨兵怎么知道其他哨兵地址?
哨兵每隔两秒就会向redis主节点的sentinel:hello频道发布哨兵对于主节点的判断以及当前哨兵的信息,其它哨兵也会也会如此,并且从中获取所有的哨兵信息。

确认一台redis服务器下线经历了什么流程? (重点)
哨兵不断的PING redis服务器,当发现服务器超过配置的down-after-milliseconds的时间都没有响应,就会认为这台主观下线;这时候哨兵会向其他哨兵发送is-master-down-by-addr命令询问是否可以标记为客观下线,当认为这台redis服务器主观下线的哨兵超过我们配置的**quorum(一般设为哨兵数量的一半加1)**的值的时候,我们就可以认为这台redis服务器客观下线。为什么还要去询问其他哨兵呢?这是因为哨兵和redis服务器之间没有ping成功也可以能网络之间的问题。

为什么要对哨兵进行领导者选举?
当确定redis服务器确实挂了以后,哨兵要进行故障转移,并且只能有一个哨兵去完成该操作,所以这时候就要选举出一名哨兵来当此重任。那怎么选举呢?

哨兵向其它哨兵发送is-master-down-by-addr除了确认是否机器是否可以下线以外,会有发起选举的作用,其它哨兵收到命令以后,如果如果没有答应其它哨兵的选举请求就会答应该哨兵的请求,当同意(包括自己)的哨兵个数达到quorum,该哨兵就会成为领导者。

怎么完成故障转移?
当确定原来的redis主服务器已经客观下线以后,就会从从服务器中选出一台作为新的主服务器,选择顺序如下:
看配置的slave-priority,如果从服务器不相等,返回最高的那台,如果相同看下一步
看offset,即复制偏移量,如果复制偏移量不同,返回最高那台,如果相同看下一步
看runid,程序id,runid越低可以看做是越早开启,返回越低那台
确定完是哪台从服务器作为新的主服务器以后,会修改新的从服务器的slaveof与各个哨兵的监控的主服务器的地址和ip。

Redis的主从复制和 哨兵模式相关推荐

  1. Redis(主从复制、哨兵模式、集群)概述及部署

    Redis(主从复制.哨兵模式.集群)概述及部署 前言 一.主从复制 (1)主从复制原理 (2)主从复制作用 (3)主从复制流程 (4)搭建主从复制 ①修改master节点配置文件 ②修改Slave节 ...

  2. 实现redis 手动_Redis精华所在,一口气说完Redis的主从复制和哨兵模式

    主从复制概念 主从复制指将一台redis的数据复制另外一台redis服务器上,前者称为主节点(master),后者称为从节点(slave). 注意复制的过程是单向的,只能从主节点到从节点,主节点以写为 ...

  3. 对Redis中主从复制、哨兵模式和集群进行部署

    目 录 前言 一.Redis主从复制的部署 ①作用 ②过程 ③搭建redis主从复制 1)安装Redis 2)修改Redis配置文件(Master节点操作) 3)修改Redis 配置文件(两个Slav ...

  4. 一篇掌握Redis的主从复制机制+哨兵模式

    1. 什么是主从复制 主从复制是主机数据更新后根据配置和策略, 自动同步到备机的master/slave机制,Master以写为主,Slave以读为主 2.主从复制的作用 数据冗余:主从复制实现了数据 ...

  5. Redis数据库(三)——(主从复制、哨兵模式、集群)

    Redis数据库(三)--(主从复制.哨兵模式.集群) 一.Redis主从复制 1.Redis主从模式介绍 2.Redis主从复制的流程 3.Redis主从复制的作用 4.Redis主从复制的搭建 环 ...

  6. Redis高可用:主从复制及哨兵模式

    目录 主从复制 作用 复制原理 使用的方式 哨兵模式 主从切换过程 Redis Sentinel的配置文件 参考 主从复制 主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器.前 ...

  7. 6 redis 编译失败_Centos7.8环境搭建Redis主从复制和哨兵模式

    本节我们搭建Redis主从复制和哨兵模式集群,集群的好处是把数据分散不不同的服务器上,解决网站中的很多高并发,高负载等问题,很好的提高网站的性能,也能解决mysql的数据读写问题,所以我们搭建集群非常 ...

  8. Redis集群之哨兵模式

    本文来说下Redis集群之哨兵模式 文章目录 概述 哨兵模式 什么是哨兵 实现原理 哨兵选举过程 master选举过程 cluster集群模式 cluster集群模式是怎么存放数据的 键是如何和163 ...

  9. 为什么至少三个哨兵_入职第一周,组长让我把部门redis服务搞成哨兵模式...慌-龙跃十二...

    少点代码,多点头发 本文已经被GitHub收录,欢迎大家踊跃star 和 issues. 入职第一周,我被坑了 最近刚入职新公司,本来想着这刚来新公司,一般都是熟悉熟悉公司同事,看看组内工程文档,找几 ...

最新文章

  1. JBOSS 端口修改说明
  2. CRM Set Type com_commercial的UI界面
  3. php内核介绍及扩展开发指南,4.5. 发布扩展信息
  4. web 三联发票针式打印_打印机共享操作,其实没想象的那么难
  5. Java并发:线程共享变量可见性原理
  6. 读取串口 :javax.comm 2.0 windows下Eclipse的配置
  7. ROS Rviz 显示轨迹 Python
  8. h5商城模板_几个常用H5制作软件、网站推荐
  9. 变分模态分解算法matlab程序,一种基于变分模态分解理论和K最近邻算法的心电信号分类方法与流程...
  10. Intellij IDEA 2019 最新优化配置
  11. iOS开发企业版ipa分发
  12. 云脉H5文档识别的性能评估指标
  13. 两个鸡蛋100层楼(DP)
  14. Python open()方法中的newLine参数
  15. 安卓apk修改(Android反编译apk)
  16. MPC5748g基于源码实现ENET-PING实验(编译+调试)
  17. 软件需求工程一些概念
  18. 几个比较新的恶意程序……AntiVir全报,kaspersky保持沉默的时候多
  19. 关键路径法详解【CPM】
  20. 成功需要“十商”(网络转载)

热门文章

  1. Rstudio更换主题/样式
  2. linux添加ssh公钥免密登录
  3. python使用logging模块记录日志
  4. 实现jdbc连接mysql_Java JDBC连接MYSQL数据库教程(实现)
  5. 和doc的区别怎么转换手机_如何把doc文件转换成PDF格式?高手告诉你应该这么做...
  6. acm之java输入输出_ACM中Java输入输出
  7. 方法超出 android,Android工程方法数超过64k,The number of method references in a .dex file cannot exceed 64K....
  8. android手动创建数据表,Android开发—数据库应用—手动创建(SQLite)数据库--手动创建数据表(table)...
  9. JAVA 数据类型数组
  10. AIX7.1环境打补丁缺少bash OPATCHAUTO-72049