Sentinel(哨兵)是用于监控redis集群中Master状态的工具.

一、Sentinel作用
  1、Master状态检测 
  2、如果Master异常,则会进行Master-Slave切换,将其中一个Slave作为Master,将之前的Master作为Slave;
  3、Master-Slave切换后,master_redis.conf、slave_redis.conf和sentinel.conf的内容都会发生改变,即master_redis.conf中会多一行slaveof的配置,sentinel.conf的监控目标会随之调换;

二、Sentinel工作方式 

1、每个Sentinel以每秒钟一次的频率向它所知的Master,Slave以及其他 Sentinel 实例发送一个 PING 命令
  2、如果一个实例(instance)距离最后一次有效回复 PING 命令的时间超过 down-after-milliseconds 选项所指定的值, 则这个实例会被 Sentinel 标记为主观下线。
  3、如果一个Master被标记为主观下线,则正在监视这个Master的所有 Sentinel 要以每秒一次的频率确认Master的确进入了主观下线状态。
  4、当有足够数量的 Sentinel(大于等于配置文件指定的值)在指定的时间范围内确认Master的确进入了主观下线状态, 则Master会被标记为客观下线
  5、在一般情况下, 每个 Sentinel 会以每 10 秒一次的频率向它已知的所有Master,Slave发送 INFO 命令
  6、当Master被 Sentinel 标记为客观下线时,Sentinel 向下线的 Master 的所有 Slave 发送 INFO 命令的频率会从 10 秒一次改为每秒一次
  7、若没有足够数量的 Sentinel 同意 Master 已经下线, Master 的客观下线状态就会被移除。 若 Master 重新向 Sentinel 的 PING 命令返回有效回复, Master 的主观下线状态就会被移除。

主观下线和客观下线
   主观下线:Subjectively Down,简称 SDOWN,指的是当前 Sentinel 实例对某个redis服务器做出的下线判断;
   客观下线:Objectively Down, 简称 ODOWN,指的是多个 Sentinel 实例在对Master Server做出 SDOWN 判断,并且通过 SENTINEL is-master-down-by-addr 命令互相交流之后,得出的Master Server下线判断,然后开启failover.
   SDOWN适合于Master和Slave,只要一个 Sentinel 发现Master进入了ODOWN, 这个 Sentinel 就可能会被其他 Sentinel 推选出, 并对下线的主服务器执行自动故障迁移操作。
  ODOWN只适用于Master,对于Slave的 Redis 实例,Sentinel 在将它们判断为下线前不需要进行协商, 所以Slave的 Sentinel 永远不会达到ODOWN。

三、Sentinel配置实现主备自动切换

Sentinel中只需要在各节点(包括Master节点)中配置sentinel monitor为master的信息即可,不需要再配置slave的信息。在每一个redis节点中的Sentinel.conf文件中。

slave的sentinel.conf配置:

port 26379

#master2

sentinel monitor master2 192.168.15.129 6379 1  ---master地址 名字为哨名的名字,不同服务器上可以取得不一样

sentinel down-after-milliseconds master2 5000

sentinel failover-timeout master2 900000

#sentinel can-failover master2 yes

sentinel parallel-syncs master2 2

Master机器上sentinel.conf配置

属性

描述

port

16379

监视哨端口

daemonize

yes

启动的进程为后台进程

logfile

“/opt/oracle/redis-2.8.19/logs/sentinel.log”

日志文件

sentinel monitor <master-name>   <ip> <redis-port> <quorum>

sentinel monitor mymaster 127.0.0.1   6379 1

IP和端口为Master的IP地址和端口,mymaster为集群名称,可以修改为想要的名称,客户端访问时需要这个名称

sentinel down-after-milliseconds   <master-name> 30000

sentinel down-after-milliseconds mymaster 30000

master-name为一个统一的集群名称

sentinel failover-timeout   <master-name> 180000

sentinel failover-timeout mymaster 180000

sentinel parallel-syncs   <master-name> <numslaves>

sentinel parallel-syncs mymaster 1

 

Slave机器上sentinel配置

 slave上的sentinel配置与Master上的配置相同,只需要将master-name修改即可

启动顺序如下:

1、redis-server redis.conf 启动Master主机;

2、redis-server redis.conf 启动Slave主机 ;

3、redis-sentinel sentinel.conf 启动Master主机上的监视哨;

4、redis-sentinel sentinel.conf 启动Slave主机上的监视哨

注意:首次启动时,必须先启动Master
        若Master已经被判定为下线,Sentinel已经选择了新的Master,也已经将old Master改成Slave,但是还没有将其改成new Master。若此时重启old Master,则Redis集群将处于无Master状态,此时只能手动修改配置文件,然后重新启动集群

四、示例如下:
master:192.168.15.129,

slave  :192.168.15.128

master的配置文件正常,slave的配置文件添加一行:
slaveof 192.168.15.129 6379
 
master的sentinel.conf配置(此处我的文件名称为sentinel-test.conf):
port 26379
#master1
sentinel monitor master1 192.168.15.129 6379 1
sentinel down-after-milliseconds master1 5000
sentinel failover-timeout master1 900000
#sentinel can-failover master1 yes
sentinel parallel-syncs master1 2
 
slave的sentinel.conf配置(此处我的文件名称为sentinel-test.conf):
port 26379
#master2
sentinel monitor master2 192.168.15.129 6379 1
sentinel down-after-milliseconds master2 5000
sentinel failover-timeout master2 900000
#sentinel can-failover master2 yes
sentinel parallel-syncs master2 2

分别启动master和slave的redis服务和sentinel服务

[root@localhostsrc]#./redis-server../redis.conf

[root@localhostsrc]#./redis-sentinel../sentinel-test.conf

然后根据以下场景切换主备,切换成功,当测试都通过时,才算是配置完成

测试主备切换场景:

主:129,备:128,sen:128,129

关闭129的redis和sen,看是否能够切换到128上面,在128上面删除数据,启动129的redis和sen,看是否数据会同步,再关闭128的redis和sen,看是否会切换为129

运行如下命令,连接客户端查看Slave状态:./redis-cli -h IP -p Port

Redis主备自动切换的更多相关文章

  1. Mycat实现读写分离,主备热切换

    实验环境:ubutu server 14 Master IP:172.16.34.212 Slave IP:172.16.34.34.156 Mycat server IP:172.16.34.219 ...

  2. Nginx+keepalived 脚本安装主从双机热备自动切换解决方案

    Nginx+keepalived 脚本安装主从双机热备自动切换解决方案 2013-07-02 19:24:13 标签:filesnginx keepalived 原创作品,允许转载,转载时请务必以超链 ...

  3. 物理DG主备库切换时遇到ORA-16139: media recovery required错误

    在物理DG主备库切换时遇到ORA-16139: media recovery required错误 SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRI ...

  4. 云计算之路-阿里云上:RDS数据库连接数过万引发故障,主备库切换后恢复正常

    非常抱歉!今天 12:03-12:52 ,由于数据库连接数异常突增超过1万,达到了阿里云RDS的最大连接数限制,影响了全站的正常访问.由此给您带来麻烦,请您谅解. 在发现数据库连接数突增的问题后,我们 ...

  5. GoldenGate 传统抽取进程随 DataGuard 主备快速切换的方案(ADG 模式)

    环境描述: 1.节点描述 节点 IP 节点描述 11.6.76.221 GG 抽取端 / DG 节点,数据库版本号为 Oracle-11.2.0.3,与 11.6.76.222 组成 DataGuar ...

  6. 搭建和测试 Redis 主备和集群

    本文章只是自我学习用,不适宜转载. 1. Redis主备集群 1.1 搭建步骤 机器:海航云虚机(2核4GB内存),使用 Centos 7.2 64bit 操作系统,IP 分别是 192.168.10 ...

  7. 如何在DCS管理控制台将两个Redis主备实例建立全球灾备。

    华为云分布式缓存服务DCS,具有强大的功能,现在小编教大家如何在DCS管理控制台将两个Redis主备实例建立全球灾备. 建立全球灾备,会对主实例和备实例进行升级,实例进程会重启,连接会中断.同时备实例 ...

  8. [terry笔记]11gR2_dataguard_主备库切换

    主备库切换  Switchover  一般SWITCHOVER切换都是计划中的切换,特点是在切换后,不会丢失任何的数据,而且这个过程是可逆的,整个DATA GUARD环境不会被破坏,原来DATA GU ...

  9. 阿里云ECS部署Redis主备哨兵集群遇到的问题

    一.部署 详细部署步骤:https://blog.csdn.net/lihongtai/article/details/82826809 Redis5.0版本需要注意的参数配置:https://www ...

随机推荐

  1. 【暑假】[深入动态规划]UVAlive 3983 Robotruck

     UVAlive 3983 Robotruck 题目: Robotruck   Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Format ...

  2. n & (n-1)

    n&(n-1)作用:将n的二进制表示中的最低位为1的改为0,先看一个简单的例子: n = 10100(二进制),则(n-1) = 10011 ==>n&(n-1) = 10000 ...

  3. poj 1704 阶梯博弈

    转自http://blog.sina.com.cn/s/blog_63e4cf2f0100tq4i.html 今天在POJ做了一道博弈题..进而了解到了阶梯博弈...下面阐述一下我对于阶梯博弈的理解. ...

  4. Codeforces Round #138 (Div. 2) ACBDE

    A.Parallelepiped 题意:给一个六面体三面的面积,求12条边的长度和. 题解:因为都是整数,设边长分别为a,b,c,面积为xyz,那么可设x=a*b,y=b*c,z=c*a,简单解方程就 ...

  5. ACCESS-关于DELPHI中操作ACCESS数据库中单精度数据的问题

    在近日几个帖子里面,和QQ群的讨论里面,我发现很多网友都遇到的问题都是因为不恰当地使用了单精度/双精度数值.因此想专门就这个话题谈一下. 单精度和双精度数值类型最早出现在C语言中(比较通用的语言里面) ...

  6. 转载LINQ TO Entity 在数据库发生更改时更新实体数据模型 .edmx 文件

    转载原出处:http://blog.csdn.net/litao2/article/details/8629335 在“模型浏览器”中,右击 .edmx 文件,然后选择“从数据库更新模型”. 模型更新 ...

  7. Theme使用的几点注意事项

    Theme.Holo主题在android4.0 及其以上不需要任何支持包,继承Activity即使用,但google不推荐该用法 Theme.Material主题在android5.0及其以上不需要依 ...

  8. charindex的用法

    declare @str nvarchar(50);set @str='462,464,2';select @str as '字符串'select len(@str) as '字符长度' select ...

  9. 剑指OFFER之从二叉搜索树的后序遍历序列(九度OJ1367)

    题目描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 输入: 每个测试案例包括2行: 第一行为1个整数 ...

  10. 人工智能-有限状态机(FSM)的学习

    首先声明:此文源于本人最近学习的一本书 <游戏人工智能编程案例精粹> FSM的定义: 一个有限状态机是一个设备,或是一个设备模型,具有有限数量的状态,它可以在任何给定的时间根据输入进行操作 ...