一、sentinel介绍

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 的客观下线状态就会被移除。 
8):若 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.

通俗来讲就是: 
redis的sentinel系统用来管理多个redis服务器,可以实现一个功能上实现HA的集群。该系统主要执行三个任务: 
①监控( Monitoring ): Redis Sentinel实时监控主服务器和从服务器运行状态。 
②提醒(notification): 当被监控的某个 Redis 服务器出现问题时, Redis Sentinel 可以向系统管理员发送通知, 也可以通过 API 向其他程序发送通知 
一个简单的主从结构加sentinel集群的架构图如下:

上图是一主两从节点,sentinel集群之间会互相通信,沟通交流redis节点的状态,做出相应的判断并进行处理,这里的主观下线状态和客观下线状态是比较重要的状态,它们决定了是否进行故障转移 可以 通过订阅指定的频道信息,当服务器出现故障得时候通知管理员 客户端可以将 Sentinel 看作是一个只提供了订阅功能的 Redis 服务器,你不可以使用 PUBLISH 命令向这个服务器发送信息,但你可以用 SUBSCRIBE 命令或者 PSUBSCRIBE 命令, 通过订阅给定的频道来获取相应的事件提醒。

一个频道能够接收和这个频道的名字相同的事件。 比如说, 名为 +sdown 的频道就可以接收所有实例进入主观下线(SDOWN)状态的事件。

二、搭建redis-sentinel 集群环境

1、下载redis编译安装包:redis-2.8.19.tar.gz,然后解压缩进行编译安装。将redis安装到/opt/redis目录下。

 [root@idxs21- redis]# mkdir bin              #redis脚本文件
[root@idxs21- redis]# mkdir conf             #redis配置文件
[root@idxs21- redis]# mkdir data             #redis的本地数据存放
[root@idxs21- redis]# mkdir logs             #redis日志文件
[root@idxs21- redis]# tar zxvf redis-2.8..tar.gz cd redis-2.8.
[root@idxs21- redis]# make PREFIX=/opt/redis install cp *.conf /opt/redis/conf  #把安装源文件中的.conf配置文件拷贝一份到安装目录下的conf目录中。
[root@idxs21- redis]# cd /opt/redis/conf cp redis.cof redis.conf.bak cp sentinel.conf sentinel.conf.bak   

2.在安装redis成功后,可以在/opt/redis/bin目录下看到以下内容:

 [root@idxs21- bin]# ll
total
-rwxr-xr-x root root Mar redis-benchmark
-rwxr-xr-x root root Mar redis-check-aof
-rwxr-xr-x root root Mar redis-check-dump
-rwxr-xr-x root root Mar redis-cli
lrwxrwxrwx root root Jun : redis-sentinel -> /opt/redis/bin/redis-server
-rwxr-xr-x root root Mar redis-server

3、修改master机器配置文件(这里直接使用的sed命令做的替换):

 # -- redis.conf                                                   #修改redis.conf
sed -i 's/daemonize no/daemonize yes/g' redis.conf       #使用后台方式运行        
sed -i 's/logfile ""/logfile "/opt/redis/logs/redis.log"/g' redis.conf  #配置日志路径
# no AOF and RDB for master           #配置数据同步策略,master节点注释关闭掉dump数据同步
sed -i 's/save 900 1/# save 900 1/g' redis.conf
sed -i 's/save 300 10/# save 300 10/g' redis.conf
sed -i 's/save 60 10000/# save 60 10000/g' redis.conf
sed -i 's/appendonly no/appendonly yes/g' redis.conf       #打开aof同步
sed -i 's/dir \.\//dir "/opt/redis/data/"/g' redis.conf       #配置数据文件存放路径
sed -i 's/slowlog-log-slower-than 10000/slowlog-log-slower-than 5000/g' redis.conf
sed -i 's/slowlog-max-len 128/slowlog-max-len 1000/g' redis.conf # -- sentinel.conf #修改sentinel.conf文件
echo 'daemonize yes' >> sentinel.conf         #后台方式运行sentinel
echo 'logfile /opt/redis/logs/sentinel.log' >> sentinel.conf
sed -i 's/sentinel monitor mymaster 127.0.0.1 6379 2/sentinel monitor mymaster 10.135.40.118 6379 2/g' sentinel.conf  #配置哨兵模式

4、修改slave机器配置文件,两台slave配置一样:

 # -- redis.conf
sed -i 's/daemonize no/daemonize yes/g' redis.conf      
sed -i 's/logfile ""/logfile "/opt/redis/logs/redis.log"/g' redis.conf     
sed -i 's/# save ""/save ""/g' redis.conf         
sed -i 's/appendonly no/appendonly yes/g' redis.conf      
sed -i 's/dir \.\//dir "/opt/redis/data/"/g'redis.conf           # SLOWLOG GET or SLOWLOG GET number
sed -i 's/slowlog-log-slower-than 10000/slowlog-log-slower-than 5000/g' redis.conf
sed -i 's/slowlog-max-len 128/slowlog-max-len 1000/g' redis.conf
echo "slaveof 10.135.40.118 6379" >> redis.conf     #指定master节点 # -- sentinel.conf
echo 'daemonize yes' >> sentinel.conf        
echo 'logfile /opt/redis/logs/sentinel.log' >> sentinel.conf
sed -i 's/sentinel monitor mymaster 127.0.0.1 6379 2/sentinel monitor mymaster 10.135.40.118 6379 2/g' sentinel.conf      

5、配置文件修改完成之后启动redis服务,从master开始启动,所有节点的启动方式和命令都是一样的。

 启动redis服务和sentinel服务:
[root@idxs21-108 redis]# /opt/redis/bin/redis-server /opt/redis/conf/redis.conf
[root@idxs21-108 redis]# /opt/redis/bin/redis-sentinel /opt/redis/conf/sentinel.conf
查看服务进程状态:
[root@idxs21- redis]# ps -ef | grep redis
root : pts/ :: grep redis
root Jul28 ? :: /opt/redis/bin/redis-sentinel *:
root Jul28 ? :: /opt/redis/bin/redis-server *:

6、测试

1>.测试数据同步

 主redis写入数据:
[root@idxs40- redis]# redis-cli -p
127.0.0.1:> set name abc
OK
127.0.0.1:> get name
"abc"
127.0.0.1:>
从redis读取数据:
[root@idxs40- redis]# redis-cli -p
127.0.0.1:> get name
"abc"
127.0.0.1:>
从redis读取数据:
[root@idxs40- redis]# redis-cli -p
127.0.0.1:> get name
"abc"
127.0.0.1:>

2>.redis默认是读写分离的,只有master能写,slave只能读:

 [root@idxs40- ~]# redis-cli -p
127.0.0.1:> set name
(error) READONLY You can't write against a read only slave.

这里可看到,slave节点默认只有读的权限,无法进行写入操作。

7、sentinel一些命令介绍 要使用sentinel的命令,我们需要用redis-cli命令进入到sentinel:

[root@idxs21- redis]# redis-cli -h 10.135.40.118 -p
①INFO sentinel的基本状态信息
②SENTINEL masters 列出所有被监视的主服务器,以及这些主服务器的当前状态
③SENTINEL slaves 列出给定主服务器的所有从服务器,以及这些从服务器的当前状态
④SENTINEL get-master-addr-by-name 返回给定名字的主服务器的 IP 地址和端口号
⑤SENTINEL reset 重置所有名字和给定模式 pattern 相匹配的主服务器。重置操作清除主服务器目前的所有状态, 包括正在执行中的故障转移, 并移除目前已经发现和关联的, 主服务器的所有从服务器和 Sentinel 。
⑥SENTINEL failover 当主服务器失效时, 在不询问其他 Sentinel 意见的情况下, 强制开始一次自动故障迁移,但是它会给其他sentinel发送一个最新的配置,其他sentinel会根据这个配置进行更新

8、如果master节点宕机,会从两台slave中自动选举出一台机器接替master角色。后期如果老的master节点重新恢复,重新加入集群中,也只能是salve节点。

Redis sentinel 哨兵模式的更多相关文章

  1. Redis sentinel 哨兵模式集群方案配置

    第一个方案是创建 redis cluster,第二种方案就是用哨兵模式来进行主从替换以及故障恢复.兵模式集群方案配置 一.sentinel介绍 Sentinel作用: 1):Master状态检测 2) ...

  2. redis sentinel哨兵模式集群搭建教程

    1.环境说明 我们将使用192.168.220.128.192.168.220.129两台机器搭建sentinel交叉主从为例 当前我们已在192.168.220.128上按redis安装教程安装了r ...

  3. 【Redis】Redis Sentinel 哨兵模式搭建

    Redis Sentinel介绍 Redis Sentinel是Redis的官方高可用性解决方案 Redis Sentinel为Redis提供高可用性.实际上,这意味着使用Sentinel可以创建一个 ...

  4. Redis 5 配置 Redis sentinel(哨兵模式)

    先了解一下哨兵都 做了什么工作:Redis 的 Sentinel 系统用于管理多个 Redis 服务器(instance), 该系统执行以下三个任务: * 监控(Monitoring): Sentin ...

  5. Redis笔记-Sentinel哨兵模式

    Redis以主从的模式搭建集群后,如果主节点Master挂掉,虽然可以实现将备用节点Slave切换成主节点,但是Redis本身并没有自动监控机制,需要借助Sentinel哨兵模式,实现监控并实现自动切 ...

  6. (六) Docker 部署 Redis 高可用集群 (sentinel 哨兵模式)

    参考并感谢 官方文档 https://hub.docker.com/_/redis GitHub https://github.com/antirez/redis happyJared https:/ ...

  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. 感受野RF的计算

    参考博客:https://blog.csdn.net/wgx571859177/article/details/80983043 设第N层的感受野为N_RF,卷积核尺寸为kernel_size,步长为 ...

  2. LTPS、IGZO、OLED都是什么?【转】

    转自:https://www.sohu.com/a/226454503_99913194 薄化行业的小伙伴,经常有听到LTPS.IGZO.OLED等英文缩写名词.但究竟他们是什么意思?他们之间有什么区 ...

  3. javascript闭包学习

    (function(){})()===>>>>函数会被立即执行function(){}是一个函数用括号包起来表示是函数表达式再加()表示函数自执行  如何理解闭包?1.定义和用 ...

  4. 圈水池 nyoj 78 凸包算法

    圈水池 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 有一个牧场,牧场上有很多个供水装置,现在牧场的主人想要用篱笆把这些供水装置圈起来,以防止不是自己的牲畜来喝水, ...

  5. Android 使用gradle版本冲突

    gradle默认版本冲突解决策略:自动依赖最高版本jar包 修改默认解决策略,使之出现版本错误时报错 configurations.all{ resolutionStrategy{ failOnVer ...

  6. Docker----在Docker中部署Asp.net core2.1以及修改发布

    本篇文章主要是如何在Docker容器中运行ASP.NET Core应用程序,以及修改系统之后,发布更新.本文章采用自定义的Docker文件 系统要求: 1.服务器或本地已经安装docker 一.创建一 ...

  7. vertx的Future设计

    异步痛点 1.回调地狱(CallBack hell) ; 解决方式 Promise 或 Future 2.执行异步后的结果如何回调currentThread ; 解决方式 Context 设计 3.如 ...

  8. 主席树——求区间第k个不同的数字(向右密集hdu5919)

    和向左密集比起来向右密集只需要进行小小的额修改,就是更新的时候从右往左更新.. 自己写的被卡死时间.不知道怎么回事,和网上博客的没啥区别.. /* 给定一个n个数的序列a 每次询问区间[l,r],求出 ...

  9. 使用Postman测试https接口时的小问题记录

    测试本地的WebApi接口时,接口是https,自己写的用httpclient测试是可以的, 用postman一直连接不了.原因正是由于https,不过postman在界面上已经给出了可能的原因和解决 ...

  10. HDU 1060  Leftmost Digit

    Leftmost Digit Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) T ...