文章目录

  • 前言 - 单机Redis的风险与问题
  • 2. 哨兵模式
    • 2.1 哨兵简介
    • 2.2 哨兵工作原理
      • 2.2.1 阶段一: 监控阶段
      • 2.2.2 阶段二: 通知阶段
      • 2.2.3 阶段三: 故障转移阶段

前言 - 单机Redis的风险与问题

如果Redis设计成单节点, 会有如下风险:

  • 问题1: 机器故障

    1. 现象: 硬盘故障, 系统崩溃, 造成数据丢失, 很可能对业务造成灾难性打击
    2. 结论: 用户基本上会放弃使用Redis.
  • 问题2: 容量瓶颈
    1. 现象: 内存不足, 从16G升级到64G, 从64G升级到128G, 无限升级内存. 原因是项目资金不够, 硬件条件跟不上.
    2. 结论: 用户放弃使用Redis.

结论就是, 为了避免单点Redis服务器故障, 准备多台服务器, 互相连通. 将数据复制多个副本保存在不同的服务器上, 连接在一起, 并保证数据是同步的. 即使有一台服务器宕机, 其他服务器依然可以继续提供服务, 实现Redis的高可用, 同事实现数据冗余备份.

上篇文章介绍了Redis的主从复制Redis主从复制工作原理就是一种解决办法, 但是主从复制也会面临主节点宕机, 无法写入数据的情况. 因此产生了哨兵模式的工作机制. 接下来我们详细介绍.

2. 哨兵模式

2.1 哨兵简介

哨兵(sentinel)是一个分布式系统, 用于对主从结构中的每台服务器进行监控, 当出现故障时通过投票机制选择新的master并将所有slave连接到新的master.


哨兵的作用

  • 监控

    1. 不断的检查master和slave是否正常运行.
    2. master存活检测, master与slave运行情况检测.
  • 通知(提醒)
    1. 当被监控的服务器出现问题时, 向其他(哨兵间, 客户端)发送通知.
  • 自动故障转移
    1. 断开master与slave连接, 选取一个slave作为master, 将其他slave连接到新的master, 并告知客户端新的服务器地址.

注意: 哨兵也是多台redis服务器, 只是不提供数据服务, 通常哨兵配置数量为单数.

2.2 哨兵工作原理

哨兵的作用就是监控Redis集群, 一旦Redis主节点宕机了, 需要将从节点选一个主节点, 哨兵在进行主从切换过程中经历三个阶段.

  • 监控
  • 通知
  • 故障转移

2.2.1 阶段一: 监控阶段

哨兵节点用于同步各个节点的状态

  • 哨兵连接主节点, 查看是否存活.
  • 获取master的转态
    • master属性

      • runid
      • role: master
  • 获取所有slave的转态(根据master中的slave信息)
    • slave属性

      • runid
      • role: slave
      • master_host, master_port
      • offset
  • 哨兵连接从节点, 查看从节点是否存活
  • 哨兵集群内部也要互相通信, 也就是哨兵集群之间也会有自己的朋友圈, 哨兵-1会把消息同步给其他哨兵, 其他哨兵也会去连接主从节点.

2.2.2 阶段二: 通知阶段

通知阶段主要的目的就是哨兵定期发送消息到Redis主从节点, 同时哨兵集群内部也要同步消息, 保证每个哨兵节点存储的redis集群消息是一致的.

  • sentinel1(哨兵节点1)发送消息到主从节点, 观察redis集群健康转态
  • 哨兵1将得到的健康状态同步到哨兵2,哨兵3
  • 哨兵2也会去重复哨兵1的动作, 发送消息到主从节点, 并同步给其他哨兵节点

2.2.3 阶段三: 故障转移阶段

  • 发现问题

    1. 哨兵-1 发送消息到master, 如果没有得到回复, 则把master标记为主观下线.
    2. 哨兵-1把master挂了的消息同步给哨兵-2, 哨兵-3, 然后哨兵-2和哨兵-3也发送消息到master确认是否能连通. 如果3个哨兵中超过一半也就是2个哨兵认为master挂了, 那么master就被标记为客观下线了.
  • 哨兵集群内部竞选负责人, 负责人负责选出新的master.
    • 哨兵集群内部会进行投票选举, 类似于zk的选举机制, 选出哨兵负责人
  • 哨兵负责人优选新的master
    • 肯定要挑选在线的服务器
    • 剔除响应慢的服务器
    • 剔除与原master断开时间久的服务器
    • 剩下的就采用优先原则了
      • offset偏移量小的
      • runid小的
  • 新master上任, 其他slave切换master, 原master作为slave故障恢复后连接新master.

Redis集群模式之哨兵模式工作原理相关推荐

  1. redis集群之主从复制+哨兵模式

    文章目录 一.redis集群之主从复制 1.1.集群介绍 1.2.搭建过程 1.3.验证 二.redis集群之哨兵模式 2.1.部署过程 1.搭建主从复制集群 2.设置哨兵模式的配置文件 3.启动哨兵 ...

  2. Redis 主从集群搭建及哨兵模式配置

    Redis 主从集群搭建及哨兵模式配置 最近搭建了redis集群及哨兵模式,为方便以后查看特此记录下来: 1.Redis安装 2.主从架构 2.1 Redis主从架构图 2.2Redis主从结构搭建 ...

  3. redis集群的几种模式

    redis集群的几种模式 主从模式 哨兵模式 Cluster集群模式(推荐) 三种模式都有搭建成功,相比之下,个人还是推荐Cluster集群 主从模式 主从模式(Master-Slave Replic ...

  4. Redis集群--Cluster--故障转移的过程(原理)

    原文网址:Redis集群--Cluster--故障转移的过程(原理)_IT利刃出鞘的博客-CSDN博客_redis集群故障转移 简介 本文介绍Redis集群(Cluster)的故障转移的流程. 故障发 ...

  5. redis入门及其集群搭建、哨兵模式

    一.Nosql概述 1.为什么要用Nosql 1.1 单机 MySQL 的美好时代 来源博客(https://www.cnblogs.com/lukelook/p/11135209.html) 在90 ...

  6. redis集群的三种模式

    通过持久化功能,Redis保证了即使在服务器重启的情况下也不会丢失(或少量丢失)数据,因为持久化会把内存中数据保存到硬盘上,重启会从硬盘上加载数据.但是由于数据是存储在一台服务器上的,如果这台服务器出 ...

  7. Redis集群——去中心化模式

    去中心化模式特点 之前介绍的主从模式和哨兵模式都只有一个master主节点,如果写操作并发比较大时,这两个模式就会堵塞.这时就可以使用集群化模式,也称之为去中心化模式,其特点是多master和多sla ...

  8. 搭建高可用的redis集群,避免standalone模式带给你的苦难

    现在项目上用redis的话,很少说不用集群的情况,毕竟如果生产上只有一台redis会有极大的风险,比如机器挂掉,或者内存爆掉,就比如我们生产环境 曾今也遭遇到这种情况,导致redis内存不够挂掉的情况 ...

  9. redis集群的发布订阅模式

    项目开发过程中,遇到需要发消息的情况,是不是脑海里不自主的浮现kafka.rabbitmq等常用的消息队列?但如果消息非常简单,并且用量也不大,消息队列就会有点大材小用了吧,忽然想起了redis 也有 ...

  10. Redis集群系列三 —— 哨兵集群原理

    Redis 的 Sentinel 哨兵是个特殊的 Redis 服务,不提供读写服务,主要用于管理多个 Redis 服务器实例, 执行以下三个任务: 监控(Monitoring): Sentinel 会 ...

最新文章

  1. ***杂记-2013-07-12
  2. mysql sqlstate 28000_mysql ERROR 1045 (28000): 错误解决办法
  3. Spring3, Hibernate3.6与Proxool连接池配置
  4. 关于客户端用ASP参生报表
  5. objective-c 编程总结(第六篇)运行时操作 - 方法交换
  6. 代码风格之Prettier简介
  7. 32页,10米长的《BI建设地图》强在哪?我整理分享出来
  8. 无锁atomicInteger
  9. c8815 android os,华为C8815官方原厂固件rom系统刷机包_最新升级包降级包下载
  10. 某TS流视频文字识别系统
  11. IAR8.3 STM8安装过程
  12. 本草纲目pdf彩图版下载_本草纲目彩色图谱下载|本草纲目彩色图集(精编珍藏版) PDF电子版 - 天天游戏吧...
  13. 如何让微信好友永远拉黑不了你?
  14. Centos7下安装MPlay和VLC
  15. 五日均线指标编程案例讲解
  16. visual studio code Python终端运行_深入比较kaldi和python_speech_features提取的fbank特征之间的区别...
  17. matlab积分e (x 2),e^(x^2)的定积分
  18. [ansible系列③]Ansible Inventory配置及详解
  19. expdpimpdp使用remap
  20. 2.初学者初始Elasticsearch

热门文章

  1. 图书馆管理系统(简易版)
  2. 在Unity创建模型的插件——UModeler V2.4(二、给模型贴图)
  3. SwiftUI UISearchbar 如何编程控制cancle显示
  4. 双目相机标定流程(使用opencv采集图像、使用matlab标定相机参数)
  5. threejs看这里就行了
  6. android studio日历小程序,Android开发之日历CalendarView用法示例
  7. [转载]Do It Now
  8. 使用U盘作为开机密码
  9. plsql developer建立数据库
  10. 百度快照不更新怎么办,导致快照不更新的原因大全!