Redis系列(四)-Redis 哨兵(Sentinel)模式

摘要:
幸运的是,从2.8开始,Redis正式提供了RedisStinel架构来解决这个问题。Redis主从复制的缺点是无法在主机上进行动态选择。您需要使用Sentinel机制来完成动态选举。当Sentinel进程将主服务器标记为目标脱机时,Sentinel过程向脱机主服务器的所有从属服务器发送INFO命令的频率将从每10秒一次变为每秒一次。如果主服务器再次向Sentinel进程发送PING命令并返回有效答复,则主服务器的主观离线状态将被删除。

Redis的主从复制模式下, 一旦主节点由于故障不能提供服务, 需要人工将从节点晋升为主节点, 同时还要通知应用方更新主节点地址, 对于很多应用场景这种故障处理的方式是无法接受的。 可喜的是Redis从2.8开始正式
提供了Redis Sentinel(哨兵) 架构来解决这个问题。
Redis主从复制的缺点:没有办法对master进行动态选举,需要使用Sentinel机制完成动态选举。

1. 哨兵模式介绍
Sentinel(哨兵)进程是用于监控redis集群中Master主服务器工作的状态
在Master主服务器发生故障的时候,可以实现Master和Slave服务器的切换,保证系统的高可用(HA)
其已经被集成在redis2.6+的版本中,Redis的哨兵模式到了2.8版本之后就稳定了下来。

2.哨兵进程的作用
监控(Monitoring): 哨兵(sentinel) 会不断地检查你的Master和Slave是否运作正常。
提醒(Notification):当被监控的某个Redis节点出现问题时, 哨兵(sentinel) 可以通过 API 向管理员或者其他应用程序发送通知。
自动故障迁移(Automatic failover):当一个Master不能正常工作时,哨兵(sentinel) 会开始一次自动故障迁移操作。

它会将失效Master的其中一个Slave升级为新的Master, 并让失效Master的其他Slave改为复制新的Master;
当客户端试图连接失效的Master时,集群也会向客户端返回新Master的地址,使得集群可以使用现在的Master替换失效Master。
Master和Slave服务器切换后,Master的redis.conf、Slave的redis.conf和sentinel.conf的配置文件的内容都会发生相应的改变,即,Master主服务器的redis.conf配置文件中会多一行slaveof的配置,sentinel.conf的监控目标会随之调换。

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

4.哨兵实操
4.1 创建配置文件
redis根目录/etc/sentinel.conf拷贝到/etc/sentinel目录下
修改一下node1、node2、node3

bind 本机IP
sentinel monitor mymaster redis主IP 6379 2
sentinel auth-pass mymaster 密码
dir /var/sentinel/26379

4.2 启动哨兵进程

在node1、node2、node3三台机器上,分别启动三个哨兵进程,组成一个集群,观察一下日志的输出

cd /home/soft/redis-6.0.8/src
./redis-sentinel /etc/sentinal/sentinal.conf

日志里会显示出来,每个哨兵都能去监控到对应的redis master,并能够自动发现对应的slave

哨兵之间,互相会自动进行发现

./redis-cli -h 192.168.2.221 -p 26379

sentinel master mymaster
SENTINEL slaves mymaster
SENTINEL sentinels mymaster

Redis系列(四)-Redis 哨兵(Sentinel)模式第1张

免责声明:文章转载自《Redis系列(四)-Redis 哨兵(Sentinel)模式》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇dockerSearch命令报错解决方案用宝塔搭建自己的网站下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

MySQL5.6 新特性之GTID

1.mysql5.6在复制方面的新特性: (1).支持多线程复制:事实上是针对每个database开启相应的独立线程,即每个库有一个单独的(sql thread).针对这样的改进,如果我们想实现多线程复制,无疑要对现存的数据库结构进行重新设计,分库分表.对于压力都集中在个别database的,多线程并发复制特性就没有意义. (2).支持启用GTID,在配置...

Linux下Redis开机自启(Centos)

废话少说,直接来步骤: 1、设置redis.conf中daemonize为yes,确保守护进程开启。 2、编写开机自启动脚本 vi /etc/init.d/redis 脚本内容如下: # chkconfig: 2345 10 90 # description: Start and Stop redis PATH=/usr/local/bin...

使用NODEJS+REDIS开发一个消息队列以及定时任务处理

作者:RobanLee 原创文章,转载请注明: 萝卜李 http://www.robanlee.com 源码在这里: https://github.com/robanlee123/RobCron时间有限,就不详细注释,有问题或者意见欢迎@我,也欢迎大家批评指正. 本文所必须的一些资料如下: 1. NODEJS ==> 可以去NODEJS.ORG下载...

开源netcore前后端分离,前端服务端渲染方案

SPA单页面应用容器开源地址:https://github.com/yuzd/Spa 功能介绍 前端应用开发完后打包后自助上传部署发布 配合服务端脚本(javascript)实现服务端业务逻辑编写渲染SSR功能 可以快速回滚到上一个版本 可以设置环境变量供SSR功能使用 服务端脚本提供执行日志 redis db三大组件打造强大的基于js的ssr服务端...

Redis操作命令大全(NodeJS版)

/*—————————————————————————————— * 本文案例基于以下运行环境: * 系统: CentOS 5.x * NodeJS版本: 0.9 以上 * Redis版本: 2.8 * Redis-nodejs 扩展: 0.12.1  /*—————————————————————————————— Part 1: 安装扩展 使用以下命令...

C# 通过ServiceStack 操作Redis——Set类型的使用及示例

Set:用哈希表来保持字符串的唯一性,没有先后顺序,存储一些集合性的数据 /// <summary> /// Set:用哈希表来保持字符串的唯一性,没有先后顺序,存储一些集合性的数据 /// 1.共同好友、二度好友 /// 2.利用唯一性,可以统计访问网站的所有独立 IP /// </summar...