一:redis集群的哨兵的目的是什么?。
(1)监控主redis和从redis数据库是否正常运行
(2)主redis出现故障,自动将其中一台从redis升级为主redis。将原先的主redis转变成从redis
 
 
二:redis集群+哨兵的的结构图
三单机模拟实现redis集群+哨兵的分布式部署
(1)启动redis集群
(2)查看集群角色
(3)启动哨兵(在配置文件中写入:sentinel monitor mymaster 127.0.0.1 6379 1)
==>配置文件格式:sentinel momitor 数据库名字 主redis的ip地址  主redis端口号  执行故障恢复前
==>启动哨兵后,并杀死6379端口实例.会从6380.6381里选举一个实例,称为新的主redis
==>图片中+try-failover表示哨兵开始进行故障恢复。-failover-end表示哨兵完成故障恢复,期间涉及的内容很复杂,包括领头哨兵的选举,备选从数据库的选择。
==>图片中+switch-master表示主redis从6379端口迁移到6381.6379实例的信息并没有被哨兵清除
==>图片中-sdown表示6379重新启动,加入到集群中。
 
四:哨兵的原理
(1)哨兵的配置文件,要找出需要监控的主数据库。
  --->sentinel monitor master-name  ip  redis-port quorum
  --->master-name 主数据库的名字
  --->ip表示当前系统中主数据库的地址
  --->redis-port 表示当前系统中主数据库的端口号
  --->quorum表示故障恢复操作前至少需要几个哨兵节点同意。
 
(2)一个哨兵节点可以监控多个redis主从系统,只需要提供多个sentinel monitor配置即可。同时多个哨兵节点也可以同时监控一个redis主从系统。
 
(3)哨兵启动后,会与要监控的主数据库建立两条链接。这两个链接的建立方法与普通的redis客户端一样。其中一条链接用来订阅主数据库_sentinel_:hello频道以获取其他同样监控该数据库的哨兵节点信息。另外一条链接,需要定期向主数据库发送info等命令来获取主数据库的本身的信息。
  --->每10秒哨兵会向主数据库和从数据库发送info命令。
  --->每2秒哨兵会向主数据库和从数据库的_sentinel_:hello频道发送自己的信息。
  --->每1秒哨兵会向主数据库和从数据库和其他哨兵节点发送ping命令
 
(4)哨兵活动过程
  --->哨兵发送info命令,可以获得当前数据库的相关信息(包括运行id,复制信息,该数据库的从节点列表)。得到这些信息后,哨兵会和从redis节点建立同样两条链接。从反馈的信息中,更新,新加入的节点,以及获得数据库的角色变化信息。
  --->哨兵向主从数据库的_sentinel_:hello频道发送自己的信息来与同样监控该数据库的哨兵分享自己的信息。发送内容<哨兵地址><哨兵端口><哨兵运行id><哨兵配置版本><主数据库名字><主数据库的地址><主数据库的端口><主数据库的配置版本>。哨兵订阅到该信息,判断是否是新加入的哨兵,如果是,加入哨兵列表。并与其建立一条链接用来发送ping命令。同时判断信息中主数据库的配置版本,如果该版本比当前记录的主数据库的版本高,则会更新主数据库的数据。
  --->实现了自动发现从数据库和其他哨兵节点后,哨兵要做的就是定时监控这些数据库和节点有没有停止服务。这是通过每隔一定时间向这些节点发送ping命令实现的。
   配置参数:sentinel down-after-milliseconds 主数据库名  毫秒数。 
   毫秒数>1秒,则每隔1秒发送一次ping命令,小于1秒,则按配置的毫秒数的间隔发送ping命令。
 
(5)哨兵实现发现主redis宕机,在从redis集群中选举新redis主节点。
  ---> 当哨兵a发现主redis节点m由于ping不通,先认为其[主观下线]
  --->哨兵a会发送SENTINEL is-master-down-by-addr命令来询问其他哨兵节点(b,c,d...)了解他们是否也认为m下线。并将得到同样认为下线的结果进行累加,达到指定数量(quorum),则认为m为[客观下线]
  --->哨兵a就会向其他哨兵列表(b,c,d...)发送命令,要求选举自己为领头哨兵,如果其他哨兵没有同意过其他哨兵节点为领头哨兵,则同意a为领头哨兵,如果a发现有超过半数且超过quorum参数值的哨兵节点同意自己是领头哨兵,则a成功称为领头哨兵。
  --->当有多个哨兵节点同时参选领头哨兵,则会出现没有任何节点当选的可能,此时每个参选节点将等待一个随机时间重新发起参选请求,进行下一轮选举,知道选举成功。
  --->选出领头哨兵,则领头哨兵a将从停止服务的主redis数据库的从redis列表中挑选一个来充当新的主redis节点。
    1,所有在线的从数据库中,选择优先级最高的从数据库,优先级可以通过slave-priority选项配置。
    2,如果有多个最高优先级的从数据库,则复制的命令便宜量越大,即复制越完整,越优先。
    3,如果以上条件都一样,则选择运行id教小的从数据库。
  --->选举除从redis,则向其发送SLAVEOF NO ONE命令将其升格为主数据库,而后领头哨兵会向其他从数据库发送SLAVEOF命令,使其称为新主redis数据库的从数据库
  --->最后一步,更新内部记录,将已经停止服务的旧的数据库更新为新的主数据库的从数据库,使得当其恢复服务时候自动以从数据的身份继续服务。
 
 
五:哨兵的部署
(1)如果一个主从系统中配置的哨兵教少,则哨兵对整个系统的判断的可靠行就会越低。反之,越高。极端(一个哨兵,就是单点问题)
(2)相对稳妥的部署方案是是的哨兵的视角尽可能地与每个节点的视角一致。
  --->为每个节点(无论是主数据库还是从数据库)都部署一个哨兵。
  --->使每个哨兵与其对应的节点的网络环境相同或相近。
   

redis之(十五)redis的集群中的哨兵角色的更多相关文章

  1. RabbitMQ入门教程(十五):普通集群和镜像集群

    原文:RabbitMQ入门教程(十五):普通集群和镜像集群 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.c ...

  2. [第十五篇]——Swarm 集群管理之Spring Cloud直播商城 b2b2c电子商务技术总结

    Swarm 集群管理 简介 Docker Swarm 是 Docker 的集群管理工具.它将 Docker 主机池转变为单个虚拟 Docker 主机. Docker Swarm 提供了标准的 Dock ...

  3. 十五,K8S集群调度原理及调度策略

    目录 k8s调度器Scheduler Scheduler工作原理 请求及Scheduler调度步骤: k8s的调用工作方式 常用预选策略 常用优先函数 节点亲和性调度 节点硬亲和性 节点软亲和性 Po ...

  4. Hadoop学习之路(十二)分布式集群中HDFS系统的各种角色

    NameNode 学习目标 理解 namenode 的工作机制尤其是元数据管理机制,以增强对 HDFS 工作原理的 理解,及培养 hadoop 集群运营中“性能调优”.“namenode”故障问题的分 ...

  5. Hadoop(五)分布式集群中HDFS系统的各种角色

    NameNode 学习目标 理解 namenode 的工作机制尤其是元数据管理机制,以增强对 HDFS 工作原理的 理解,及培养 hadoop 集群运营中“性能调优”.“namenode”故障问题的分 ...

  6. 潭州课堂25班:Ph201805201 django 项目 第四十五课 mysql集群和负载均衡(课堂笔记)

    2.使用docker安装Haproxy 一.为什么要使用数据库集群和负载均衡? 1.高可用 2.高并发 3.高性能 二.mysql数据库集群方式 三.使用docker安装PXC 1.拉取PXC镜像 d ...

  7. Redis源码解析:27集群(三)主从复制、故障转移

    一:主从复制 在集群中,为了保证集群的健壮性,通常设置一部分集群节点为主节点,另一部分集群节点为这些主节点的从节点.一般情况下,需要保证每个主节点至少有一个从节点. 集群初始化时,每个集群节点都是以独 ...

  8. Redis系列5:深入分析Cluster 集群模式

    Redis系列1:深刻理解高性能Redis的本质 Redis系列2:数据持久化提高可用性 Redis系列3:高可用之主从架构 Redis系列4:高可用之Sentinel(哨兵模式) 1 背景 前面我们 ...

  9. Hadoop学习之路(五)Hadoop集群搭建模式和各模式问题

    分布式集群的通用问题 当前的HDFS和YARN都是一主多从的分布式架构,主从节点---管理者和工作者 问题:如果主节点或是管理者宕机了.会出现什么问题? 群龙无首,整个集群不可用.所以在一主多从的架构 ...

随机推荐

  1. 淘淘搜索结果中image属性中有多张图片的处理

    solr引擎查询某一个 商品后的结果中,image字段中如果有多张图片路径(用逗号隔开)时,前台会不 显示图片,解决方法如下: package com.taotao.portal.pojo; publ ...

  2. 如何在Linux上安装QQ

    我一直无法解决Ubuntu QQ问题,而最近我重装ubuntu之后在网络上找到与QQ相关的内容,网上有大神开发出了新版的wineQQ,解决了我们对QQ的需求.经过尝试,完成了QQ安装 如图  安装的是 ...

  3. DOM通过ID或NAME获取值

    DOM通过ID或NAME获取值 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> &l ...

  4. 学习opencv-------函数使用一

    #include"head.h" //cvResize() /*int main() { IplImage *img = cvLoadImage("e:/picture/ ...

  5. 实体框架(Entity Framework)快速入门--实例篇

    在上一篇 <实体框架(Entity Framework)快速入门> 中我们简单了解的EF的定义和大体的情况,我们通过一步一步的做一个简单的实际例子来让大家对EF使用有个简单印象,看操作步骤 ...

  6. centos6.8安装并配置zimbra

    一.对域名设置MX记录 二.安装准备 1.关闭selinux vi /etc/selinux/config SELINUX=disabled 2.iptables防火墙端口设置 # iptables ...

  7. Git 常见工作流

    多种多样的工作流使得在项目中实施Git时变得难以选择.这份教程提供了一个出发点,调查企业团队最常见的Git工作流. 阅读的时候,请记住工作流应该是一种规范而不是金科玉律.我们希望向你展示所有工作流,让 ...

  8. 「6月雅礼集训 2017 Day10」quote

    [题目大意] 一个合法的引号序列是空串:如果引号序列合法,那么在两边加上同一个引号也合法:或是把两个合法的引号序列拼起来也是合法的. 求长度为$n$,字符集大小为$k$的合法引号序列的个数.多组数据. ...

  9. python dlib 面部轮廓实时检测

    1.dlib 实现动态人脸检测及面部轮廓检测 模型下载连接 : http://dlib.net/files/ # coding:utf-8 import cv2 import os import dl ...

  10. 【HNOI】 lct tree-dp

    [题目描述]给定2-3颗树,每个边的边权为1,解决以下独立的问题. 现在通过连接若干遍使得图为连通图,并且Σdis(x,y)最大,x,y只算一次. 每个点为黑点或者白点,现在需要删除一些边,使得图中的 ...