发现一篇文章写的特别的详细,所以在这里转载,记录一下。照着文章中的内容自己动手实践了。

原文地址:http://blog.csdn.net/a67474506/article/details/50435498

Redis的哨兵(sentinel) 系统用于管理多个 Redis 服务器,该系统执行以下三个任务:

·        监控(Monitoring): 哨兵(sentinel) 会不断地检查你的Master和Slave是否运作正常。

·        提醒(Notification):当被监控的某个 Redis出现问题时, 哨兵(sentinel) 可以通过 API 向管理员或者其他应用程序发送通知。

·        自动故障迁移(Automatic failover):当一个Master不能正常工作时,哨兵(sentinel) 会开始一次自动故障迁移操作,它会将失效Master的其中一个Slave升级为新的Master, 并让失效Master的其他Slave改为复制新的Master; 当客户端试图连接失效的Master时,集群也会向客户端返回新Master的地址,使得集群可以使用Master代替失效Master。

哨兵(sentinel) 是一个分布式系统,你可以在一个架构中运行多个哨兵(sentinel) 进程,这些进程使用流言协议(gossipprotocols)来接收关于Master是否下线的信息,并使用投票协议(agreement protocols)来决定是否执行自动故障迁移,以及选择哪个Slave作为新的Master.

每个哨兵(sentinel) 会向其它哨兵(sentinel)、master、slave定时发送消息,以确认对方是否”活”着,如果发现对方在指定时间(可配置)内未回应,则暂时认为对方已挂(所谓的”主观认为宕机” Subjective Down,简称sdown).

若“哨兵群”中的多数sentinel,都报告某一master没响应,系统才认为该master"彻底死亡"(即:客观上的真正down机,Objective Down,简称odown),通过一定的vote算法,从剩下的slave节点中,选一台提升为master,然后自动修改相关配置.

虽然哨兵(sentinel) 释出为一个单独的可执行文件 redis-sentinel ,但实际上它只是一个运行在特殊模式下的 Redis 服务器,你可以在启动一个普通 Redis 服务器时通过给定 --sentinel 选项来启动哨兵(sentinel).

哨兵(sentinel) 的一些设计思路和zookeeper非常类似

单个哨兵(sentinel)

启动 6379  6380  6381

配置主从架构

进入redis安装目录

修改哨兵配置文件

  1. vi sentinel.conf

设置 sentinel monitor 为Master 地址

最后面的数字 1 表示最低通过票数

新建一个xshell连接来启动哨兵,可以查看sentinel的控制台信息

  1. redis-sentinel ./sentinel.conf

将6380强制杀掉

等待一会  哨兵的控制台 打印出来 +sdown信息

说明已经监控到slave宕机了

重新启动 6380

哨兵控制台打印

可以看出slave重新加入到了主从复制中

-sdown: 说明是恢复服务

现在将Master 强制杀掉

哨兵控制台打印

我们进入 6381 查看状态

6381 已经是 master了 并且拥有一个 6380的slave

重新启动6379

6379已经恢复,并且将6379设置为6380的slave

这时我们查看sentinel.conf 发现  我们刚刚配置的端口已经变成6381

而6381也有2个slave

查看etc下面的redis.6379.conf 和 redis.6380.conf 发现哨兵(sentinel) 已经对该文件做了修改

6379之前是没有配置,所以就添加到了最后一行

sentinel后台运行和redis的配置文件一样修改daemonize参数

多个哨兵(sentinel)

配置了一个哨兵,如果该哨兵宕机了,那么整个主从架构就回复到了原始的情况,所以我们可以配置多个哨兵,每个哨兵监控Redis信息,并且哨兵之间也会互相监控

修改sentinel.conf中的最低通过票数

在拷贝二份sentinel.conf

  1. cp ./sentinel.conf sentinel.26479.conf
  2. cp ./sentinel.conf sentinel.26579.conf

修改sentinel.26579.conf和sentinel.26479.conf中的port

在新开二个xshell会话,查看26479 和 26579的控制台信息

在每个会话分别启动一个sentinel

此时控制台信息

26379:

增加了2个sentinel

26479:

26579:

强制杀掉6379

Sentinel发现宕机情况

3个都是一样的

重新启动6379,sentinel 打印的信息室一样的

好吧多个sentinel和一个sentinel的效果是一样,那么我们杀掉master试试

和单个哨兵是差不多的

整个故障转移过程是需要啊一个leader来调整的,所以多个sentinel会选举一个leader

在Leader触发failover之前,首先wait数秒(随即0~5),以便让其他sentinel实例准备和调整,
如果一切正常,那么leader就需要开始将一个salve提升为master,此slave必须为状态良好(不能处于SDOWN/ODOWN状态)且权重值最低(redis.conf中)的,当master身份被确认后,开始failover

另外2个sentinel的控制台信息

26479:

26579:

大概结果就是这样  ╮(╯▽╰)╭

那么我们强行杀掉一个sentinel试试

杀掉之后另外2个sentinel 都打印出了这个结果

仅此而已  其他的暂时没有发现什么东东

详细学习文章:

Redis Sentinel:集群Failover解决方案

http://shift-alt-ctrl.iteye.com/blog/1884370

Redis基于Sentinel哨兵高可用方案

http://www.178linux.com/672
Redis中sentinel集群的搭建和Jedis测试图文教程

http://blog.csdn.net/wtyvhreal/article/details/46517483

(转)Redis(四)哨兵_sentinel的更多相关文章

  1. redis架构~哨兵模式

    一 哨兵模式稳定版本  redis哨兵模式是redis自带的高可用框架,稳定版本为redis2.8以上二 哨兵模式建立  1 避免单点故障,建立启动多个哨兵进程  2 哨兵模式启动命令 redis-s ...

  2. Redis 主从+哨兵+监控 (centos7.2 + redis 3.2.9 )

    环境准备: 192.168.0.2  redis01 主 192.168.0.3  redis02 从 192.168.0.4  redis03 从 Redis 主从搭建 一:下载并安装redis软件 ...

  3. redis的哨兵集群,redis-cluster

    #主从同步redis主从优先1.保证数据安全,主从机器两份数据一主多从2.读写分离,缓解主库压力主redis,可读可写slave身份,只读   缺点1.手动主从切换假如主库挂了,得手动切换master ...

  4. redis:哨兵集群配置

    最少配置1主2从3哨兵 一.引言 上一篇文章我们详细的讲解了Redis的主从集群模式,其实这个集群模式配置很简单,只需要在Slave的节点上进行配置,Master主节点的配置不需要做任何更改,但是有一 ...

  5. redis之哨兵集群

    一.主从复制背景问题 Redis主从复制可将主节点数据同步给从节点,从节点此时有两个作用: 一旦主节点宕机,从节点作为主节点的备份可以随时顶上来. 扩展主节点的读能力,分担主节点读压力. 但是问题是: ...

  6. redis 持久化 哨兵 主从

    Redis搭建步骤 环境: 三台机器  centos7 关闭防火墙 selinux Redis版本 3.0.5 依赖环境 yum install gcc-c++ ruby rubygems –y 把版 ...

  7. Redis-Sentinel Redis的哨兵模式

    Redis-Sentinel Redis的哨兵模式Redis Sentinel 模式简介Redis-Sentinel是官方推荐的高可用解决方案,当redis在做master-slave的高可用方案时, ...

  8. redis的哨兵模式

    我是在一台服务器上安装了三个redis  一主两从 想安装gcc gcc-c++ make tcl  lrzsz yum -y install gcc gcc-c++ make tcl  lrzsz ...

  9. Redis Sentinel哨兵配置

    概述 Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案,当用Redis做Master-slave的高可用方案时,假如master宕机了,Redis本身(包括它的很多客户端)都 ...

随机推荐

  1. VS中常用快捷键

    常用的快捷键     这里仅列出一些个人觉得好用的快捷键: 调用智能提示:使用组合键“Ctrl+J” 注释/取消注释: 注释用组合键“Ctrl+K+C” 取消注释用组合键“Ctrl+K+U” 大小写转 ...

  2. LTP(LinuxTest Project)测试工具

    LTP(LinuxTest Project)是SGI.IBM.OSDL和Bull合作的项目,目的是为开源社区提供一个测试套件,用来验证Linux系统可靠性.健壮性和稳定性.LTP测试套件是测试Linu ...

  3. windows添加PDF虚拟打印机

    添加PDF虚拟打印机(果真姜还是老的辣,我摸索了两天没结果的事情,大佬轻轻松松两分钟搞定...) 这种PDF虚拟打印机的功能是将需要被打印的内容写到当前系统的指定目录下的指定文件中.整个过程都不需要连 ...

  4. 深入理解java虚拟机---虚拟机工具jhat(十六)

    jhat JVM Heap Analysis Tool命令是与jmap搭配使用,用来分析jmap生成的dump,jhat内置了一个微型的HTTP/HTML服务器,生成dump的分析结果后,可以在浏览器 ...

  5. AntPathMatcher做路径匹配

    转发自: http://www.cnblogs.com/leftthen/p/5212221.html 需要看详细的请看上面的链接 这里以我这里的一个Filter 中需要对路径做例外处理,filter ...

  6. 玩转 React【第02期】:恋上 React 模板 JSX

    往期回顾 前文中我们讲解了利用 ReactElement 来编写React程序,但是我们也看到这种方式编写 React 特别的麻烦,而且层级结构特别不清晰.今天我们来看一种优雅的编写React的代码的 ...

  7. C++中数组定义及初始化

    一.一维数组 静态 int array[100]; 定义了数组array,并未对数组进行初始化 静态 int array[100] = {1,2}: 定义并初始化了数组array 动态 int* ar ...

  8. 1.横向滚动条,要设置两个div包裹. 2. 点击切换视频或者图片. overflow . overflow-x

    1.横向滚动条. div.1 > div.2 > img img  img 第一: 设置 div.1 一个固定的宽度 和高度  . 例如宽度 700px;  高度是 120px; 设置 o ...

  9. django面试三

    1.Django. Flask.Tornado框架的比较? Django: 对于django,大而全的框架它的内部组件比较多,内部提供:ORM.Admin.中间件.Form.ModelForm.Ses ...

  10. HIVE点滴:选择两个字段时distinct位置的影响

    当选择两个字段时,例如:"select XX1, XX2 from tb; ",那么将distinct放在前一个字段XX1之前和放在后一个字段XX2之前,结果有什么不同呢? 先说结 ...