一、哨兵介绍

Redis Sentinel,即Redis哨兵,在Redis 2.8版本开始引入。哨兵的核心功能是主节点的自动故障转移。下面是Redis官方文档对于哨兵功能的描述:

  1. 监控(Monitoring):哨兵会不断地检查主节点和从节点是否运作正常。
  2. 自动故障转移(Automatic failover):当主节点不能正常工作时,哨兵会开始自动故障转移操作,它会将失效主节点的其中一个从节点升级为新的主节点,并让其他从节点改为复制新的主节点。
  3. 配置提供者(Configuration provider):客户端在初始化时,通过连接哨兵来获得当前Redis服务的主节点地址。
  4. 通知(Notification):哨兵可以将故障转移的结果发送给客户端。

简单来说,主从模式下为了使主从具备高可用性,就需要用哨兵进行监控,在主节点下线后,会通过投票选出新的主节点,在主节点上线后,也只能作为新节点的从节点。哨兵环境也需要高可用,所以一般是三个以上的集群。

架构图如下:

<mxfile userAgent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.89 Safari/537.36" version="8.5.3" editor="www.draw.io" type="device"><diagram>7Vldc+IgFP01PLYTQr58VJt2X3amM33Y9jGbYGSKwSVYdX/9goGYEJx1OqbrtOuDwoHchHMu994gQPPV7oFn6+V3VmAKfK/YAXQHfB8GMJI/Ctk3SOInDVByUuhJR+CJ/MYa9DS6IQWuexMFY1SQdR/MWVXhXPSwjHO27U9bMNq/6zor8QB4yjM6RH+QQizNKuIj/g2TcmnuDKNJM/Izy19LzjaVvh/w0eLwaYZXmbGlF1ovs4JtOxBKAZpzxkTTWu3mmCpuDW3NdfcnRtvn5rgS51zgNxe8ZXSjlw7SAMxmIElBmoBkChKJxOp7ppdYi72hSdqSisjObLskAj+ts1yNbKVTSGwpVlT2oGxm9bqRaUF2WN56tiCUzhll/GAIxek0Sj2Fs0pod4CB7A/Xo5f4hrnAuw6k1/eA2QoLvpdTzKjhWvti4On+tqOshpYdUQ2WaV8qW8tHPmVDU+qmF7npTRTDn4Telqe91f8AeoPP771B8O+8NxzS60dU6IX2yIx+bZgZuKkPFEzlBBitd8dB2Sr178EKMUAt+SEVpjeSi3nb8W/Vp+1W5jL52MQ2JbHmmQxsaX0IyUq7O+/veteCs9c28KOh4Gl0fz+fjxOeYDAUOIAOheMLKBw5FLZ3SVVMVUaVvZxmdU3yPlm2z+MdEc+aZ9V+0fMkQ3z/3O286FknSazZhue4F0lFxksserkLF71cPiS6Q2To4NFgHNNMkLd+BeAiV9/hkZHDJjBx0N6ogaVPsxp9VTcl24YmfUNoYhlqOBgYOmjdLvss+ePx5Ien5PcuJX9wVfLb2zi0VTtXfhhbhmw/upz8iSN9hmAagORONRJZpkQDh5BhTbjCpQmPFauwFTE1lFFSVsqPpNBY4jMVJIksuqd6YEWKgp7Kx/0IPkYhg6x9Fw8DscuB0AXi8OS/Eh0lkFVSoiT8MCVMpr1oTGxj3214dvS73kwHI6vih+hCoc4bLdRBeIWyXlcGC+wXOei/T1Zk+Uc0oqyO84sxZW2L29tAxmSrwpHtR8yJfHwVU8+vbcKhZ6Cr8gxkHrH1jPfWNpaLhdF4nuE6eonBZAYmEKSROiGYxl8npULP2tyO4iYaK6W6jmm+rhS+nT4dL/yjSeE40vnCUgTWS1sbMC8vheweT/WbeHb86wSlfwA=</diagram></mxfile>

二、哨兵集群搭建

2.1搭建Redis主从集群

方法请看上一篇博客,redis主从集群搭建
不同的是我在三个配置文件加了访问密码,requirepass "XXX",所以需要在这里也加上master的密码
masterauth "XXX",否则主服务器会拒绝从服务器的复制请求。

2.2修改哨兵配置文件

默认的配置文件是sentinel.conf在主目录下,首先复制两份出来
cp sentinel.conf sentinel-27000.conf
cp sentinel.conf sentinel-27001.conf
然后要修改的内容如下(相同的省略):

sentinel.conf sentinel-27000.conf sentinel-27001.conf
port 26379 port 27000 port 27001
pidfile "/var/run/redis-sentinel.pid" pidfile "/var/run/redis-sentinel2.pid" pidfile "/var/run/redis-sentinel3.pid"
sentinel monitor mymaster 127.0.0.1 6379 2 sentinel monitor mymaster 127.0.0.1 6379 2 sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 3000
sentinel failover-timeout mymaster 10000
sentinel auth-pass mymaster XXX
sentinel myid xxx sentinel myid xxx sentinel myid xxx

注意:

  1. 如果主服务器使用了密码认证,则sentinel auth-pass mymaster XXX是必须的,并且密码与上面的要一致。
  2. sentinel monitor mymaster 的配置必须要在 其他用到<master-name>的前面,因为读取配置文件时按顺序读取的会报这个名称未定义(坑了我好久)
  3. 修改 sentinel myid 从而保证三个id都不同。
  4. 需要在防火墙开启26379、 27000、 27001三个端口。

2.3启动

  1. 启动redis主从集群,注意顺序是先master再slave
src/redis-server redis-6379.conf
src/redis-server redis-6380.conf
src/redis-server redis-6381.conf
  1. 启动哨兵有两种方式。
    src/redis-sentinel sentinel.conf
    src/redis-server sentinel.conf --sentinel
src/redis-sentinel sentinel.conf
src/redis-sentinel sentinel-27000.conf
src/redis-sentinel sentinel-27001.conf
  1. 如图,哨兵成功监视了master并发现了下面的两个从服务器

2.4测试故障自动转移

  1. 查看哨兵集群情况,输入命令src/redis-cli -p 27000再info Sentinel

    可以看到master是端口6379的,有两个slaves,三个哨兵。
  2. 这时我们kill掉6379的Redis进程后,再查看集群情况。哨兵日志如下:

    6379挂了后进行了一轮的选举投票,最后6380端口的成为了新的master,来看看现在的集群情况是不是这样的。
  3. 这时如果重新启动6379,它还会不会恢复老大的身份呢?
5020:X 26 Dec 2018 13:46:38.998 # -sdown slave 8.9.8.165:6379 8.9.8.165 6379 @ mymaster 8.9.8.165 6380
5020:X 26 Dec 2018 13:46:48.947 * +convert-to-slave slave 8.9.8.165:6379 8.9.8.165 6379 @ mymaster 8.9.8.165 6380

日志显示6379重新加入了集群,只不过变成了从服务器。

Redis的高级特性哨兵的更多相关文章

  1. Redis进阶实践之五Redis的高级特性

    一.引言    上一篇文章写了Redis的特征,使用场景,同时也介绍了Redis的基本数据类型,redis的数据类型是操作redis的基础,这个必须好好的掌握.今天我们开始介绍一些Redis的高级特性 ...

  2. Redis进阶实践之五Redis的高级特性(转载 5)

    Redis进阶实践之五Redis的高级特性 一.引言 上一篇文章写了Redis的特征,使用场景,同时也介绍了Redis的基本数据类型,redis的数据类型是操作redis的基础,这个必须好好的掌握.今 ...

  3. Redis的高级特性一览

    更多内容,欢迎关注微信公众号:全菜工程师小辉.公众号回复关键词,领取免费学习资料. 应用场景 缓存系统:用于缓解数据库的高并发压力 计数器:使用Redis原子操作,用于社交网络的转发数,评论数,粉丝数 ...

  4. redis多实例与主从同步及高级特性(数据过期机制,持久化存储)

    redis多实例 创建redis的存储目录 vim /usr/local/redis/conf/redis.conf #修改redis的配置文件 dir /data/redis/ #将存储路径配置修改 ...

  5. Redis基础用法、高级特性与性能调优以及缓存穿透等分析

     一.Redis介绍 Redis是一个开源的,基于内存的结构化数据存储媒介,可以作为数据库.缓存服务或消息服务使用.Redis支持多种数据结构,包括字符串.哈希表.链表.集合.有序集合.位图.Hype ...

  6. Redis基础、高级特性与性能调优

    本文将从Redis的基本特性入手,通过讲述Redis的数据结构和主要命令对Redis的基本能力进行直观介绍.之后概览Redis提供的高级能力,并在部署.维护.性能调优等多个方面进行更深入的介绍和指导. ...

  7. Redis 基础、高级特性与性能调优

    本文将从Redis的基本特性入手,通过讲述Redis的数据结构和主要命令对Redis的基本能力进行直观介绍.之后概览Redis提供的高级能力,并在部署.维护.性能调优等多个方面进行更深入的介绍和指导. ...

  8. Redis数据库高级实用特性:持久化机制

    Redis数据库高级实用特性:持久化机制 大型web系统数据缓存设计 Redis高级特性:虚拟内存的使用技巧 Redis高级实用特性:安全性与主从复制 Memcached.Redis OR Tair

  9. redis 高级特性 不要太好用

    Redis高级特性及应用场景 redis中键的生存时间(expire) redis中可以使用expire命令设置一个键的生存时间,到时间后redis会自动删除它. 过期时间可以设置为秒或者毫秒精度. ...

随机推荐

  1. 全文索引--自己定义chinese_lexer词典

    本文来具体解释一下怎样自己定义chinese_lexer此法分析器的词典 初始化数据 create table test2 (str1 varchar2(2000),str2varchar2(2000 ...

  2. HDU 1257 最少拦截系统(dp)

    Problem Description 某国为了防御敌国的导弹突击,发展出一种导弹拦截系统.可是这样的导弹拦截系统有一个缺陷:尽管它的第一发炮弹可以到达随意的高度,可是以后每一发炮弹都不能超过前一发的 ...

  3. hud 1465、2049、2045 (递推)[含简单C(n,m) n!的写法]

    C - 不容易系列之一 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit  ...

  4. uva 1567 - A simple stone game(K倍动态减法游戏)

    option=com_onlinejudge&Itemid=8&page=show_problem&problem=4342">题目链接:uva 1567 - ...

  5. hdoj 4932 Miaomiao&#39;s Geometry 【暴力枚举】

    题意:在一条直线上有n个点.取一长度差为x的区间. 规定点必须是区间的端点. 让你找出来最大的x 策略:rt 分析可得:两个相邻点之间的区间要么是两个点的差,要么就是两个点的差的一半,那我们就简单枚举 ...

  6. positive 相对其正常位置,那什么是正常位置: 请问调试,请问浏览器

    [问题代码 <!DOCTYPE html><html><head> <title></title> <meta charset=&qu ...

  7. Joomla中的Task 和view 深入学习

    [本文转自:梦溪笔记] Joomla 是一个优秀的CMS系统,她可以让你快速的完成一个网站的建设,她提供组件,模块,模板能够满足你大部分的网站需求.而组件在其中举足轻重. 一.基本知识 组件(comp ...

  8. 蓝牙协议(bluetooth spec)

    1.概述:   蓝牙协议规范遵循开放系统互连参考模型(OSI/RM),从低到高地定义了蓝牙协议堆栈的各个层次. SIG(Session Initiation Protocol)所定义的蓝牙技术规范的目 ...

  9. Ubuntu下如何安装并使用Objective-C

    Objective-C是本人用过的最佳类C.面向对象的编程语言.Objective-C与标准C完美兼容,而在此基础上又加上了将面向对象的基础概念诠释得最好的SmallTalk元素,使得它既简洁.又灵活 ...

  10. Android的三种主流资源尺寸

    Android三种主流资源屏幕尺寸:QVGA.HVGA.WVGA VGA的分辨率是640x480像素 QVGA(Quarter VGA)就是320x240,即VGA分辨率的1/4 HVGA(Half ...