Redis Sentinel (哨兵模式)
(一)配置好redis主备两个实例
端口号分别为: Master: 6379 Slave:6381,并启动;
具体配置请参照 《Redis快速部署(主备)》
(二)配置哨兵
Redis哨兵实际上是一个特殊的redis实例,使用配置文件sentinel.conf进行启动
#1.哨兵启动的端口
port 26379
#2.指定master节点地址,最后一个数字表示需要多少sentinel同意才能执行failover
sentinel monitor master1 127.0.0.1 6379 1
#3.选填,如果redis设置了密码,这里也需要设置,不然sentinel无法连接redis
sentinel auth-pass master1 <password>
#4.选填,指定已知的slave,如果不填Sentinel可以自动识别,Sentinel会在运行过程中动态的修改这一项
sentinel known-slave master1 127.0.0.1 6381
#5.第一次心跳检测识别到故障之后重试多少时间(单位毫秒,每秒重试一次)
sentinel down-after-milliseconds master1 5000
#6.选填,用于协调多台sentinel,如果已经有sentinel去做failover了,则等待这个时间后再试,保持默认3分钟即可
sentinel failover-timeout master1 180000
#7.用于协调多台sentinel,sentinel每做一次failover数字递增,默认从1开始计数即可
sentinel config-epoch master1 1
#8.选填,已知的其他Sentinel,如果不填Sentinel可以自动识别
sentinel known-sentinel master1 127.0.0.1 26380 a5ce2add75d868d47ce8e7cae9a744f2c900d67d
#9.master down掉多长时间后进行主从切换,默认为3分钟,这里改为1分钟
sentinel failover-timeout master1 60000
(三)启动哨兵
ui@localhost src]$ ./redis-server ../sentinel.conf --sentinel &
查看当前启动的redis进程:
ui@localhost src]$ ps -ef |grep 'redis' 500 8337 3880 0 00:07 pts/1 00:00:06 ./redis-server *:26379 [sentinel] 500 8413 3880 0 00:28 pts/1 00:00:01 ./redis-server 127.0.0.1:6379 500 8469 3880 0 00:41 pts/1 00:00:00 ./redis-server 127.0.0.1:6381 500 8485 3940 0 00:44 pts/3 00:00:00 ./redis-cli -p 6381 500 8494 3880 0 00:46 pts/1 00:00:00 grep redis
(四)通过client连接redis,测试redis是否正常
- 先连接Master,测试读写操作,正常
ui@localhost src]$ ./redis-cli -p 6379 127.0.0.1:6379> set foo 123 OK 127.0.0.1:6379> get foo "123" 127.0.0.1:6379> exit
- 再连接Slave,测试读写, Slave只能读,不能写;
ui@localhost src]$ ./redis-cli -p 6381 127.0.0.1:6381> get foo "123" 127.0.0.1:6381> set foo 12333 (error) READONLY You can't write against a read only slave.
(五)测试failover
- 我们手动kill掉Master的进程
ui@localhost src]$ kill 8413
- 查看哨兵的日志输出,发现已经开始做failover,把原来的slave选为master,如下:
8337:X 06 Jul 00:47:54.989 # +sdown master master1 127.0.0.1 6379 8337:X 06 Jul 00:47:54.989 # +odown master master1 127.0.0.1 6379 #quorum 1/1 8337:X 06 Jul 00:47:54.989 # +new-epoch 238 8337:X 06 Jul 00:47:54.989 # +try-failover master master1 127.0.0.1 6379 8337:X 06 Jul 00:47:55.042 # +vote-for-leader a5ce2add75d868d47ce8e7cae9a744f2c900d67d 238 8337:X 06 Jul 00:47:55.042 # +elected-leader master master1 127.0.0.1 6379 8337:X 06 Jul 00:47:55.042 # +failover-state-select-slave master master1 127.0.0.1 6379 8337:X 06 Jul 00:47:55.100 # +selected-slave slave 127.0.0.1:6381 127.0.0.1 6381 @ master1 127.0.0.1 6379 8337:X 06 Jul 00:47:55.100 * +failover-state-send-slaveof-noone slave 127.0.0.1:6381 127.0.0.1 6381 @ master1 127.0.0.1 6379 8337:X 06 Jul 00:47:55.172 * +failover-state-wait-promotion slave 127.0.0.1:6381 127.0.0.1 6381 @ master1 127.0.0.1 6379 8337:X 06 Jul 00:47:55.686 # +promoted-slave slave 127.0.0.1:6381 127.0.0.1 6381 @ master1 127.0.0.1 6379 8337:X 06 Jul 00:47:55.686 # +failover-state-reconf-slaves master master1 127.0.0.1 6379 8337:X 06 Jul 00:47:55.693 # +failover-end master master1 127.0.0.1 6379 8337:X 06 Jul 00:47:55.693 # +switch-master master1 127.0.0.1 6379 127.0.0.1 6381 8337:X 06 Jul 00:47:55.693 * +slave slave 127.0.0.1:6379 127.0.0.1 6379 @ master1 127.0.0.1 6381
- 再次测试6381的读写,此时6381已经从slave变成了master,所以读写都可以正常执行。
127.0.0.1:6381> set foo 12333 (error) READONLY You can't write against a read only slave. 127.0.0.1:6381> get foo "123" 127.0.0.1:6381> set foo 999 OK
- 尝试连接原来的master 6379,已经kill掉了
ui@localhost src]$ ./redis-cli -p 6379 Could not connect to Redis at 127.0.0.1:6379: Connection refused Could not connect to Redis at 127.0.0.1:6379: Connection refused
- 重启6379后,查看哨兵日志输出,可以看到6379被当作6381的slave了
8337:X 06 Jul 00:54:28.058 # -sdown slave 127.0.0.1:6379 127.0.0.1 6379 @ master1 127.0.0.1 6381 8337:X 06 Jul 00:54:37.995 * +convert-to-slave slave 127.0.0.1:6379 127.0.0.1 6379 @ master1 127.0.0.1 6381
- 再次连接6379进行读写操作,证实6379确实变成了slave了。
ui@localhost src]$ ./redis-cli -p 6379 127.0.0.1:6379> get foo "999" 127.0.0.1:6379> set foo 1234 (error) READONLY You can't write against a read only slave.
(六)哨兵日志说明:
- 1. 主观下线(Subjectively Down, 简称 SDOWN)指的是单个 Sentinel 实例对服务器做出的下线判断。
- 2. 客观下线(Objectively Down, 简称 ODOWN)指的是多个 Sentinel 实例在对同一个服务器做出 SDOWN 判断, 并且通过SENTINEL is-master-down-by-addr 命令互相交流之后, 得出的服务器下线判断。
备注:
- 客观下线条件只适用于主服务器: 对于任何其他类型的 Redis 实例, Sentinel 在将它们判断为下线前不需要进行协商, 所以从服务器或者其他 Sentinel 永远不会达到客观下线条件。
- 只要一个 Sentinel 发现某个主服务器进入了客观下线状态, 这个Sentinel 就可能会被其他 Sentinel 推选出, 并对失效的主服务器执行自动故障迁移操作。
相关推荐
Redis Sentinel,或者称为哨兵模式,是Redis集群架构中的一个重要组成部分,主要用于实现高可用性(HA)。在单机模式下,Redis服务器一旦宕机,将会导致服务不可用,哨兵模式就是为了克服这个问题而设计的。它监控...
综上所述,Redis哨兵模式通过监控、故障检测和自动故障转移,极大地提升了Redis服务的可用性和稳定性。在实际应用中,结合Jedis客户端的使用,能够实现灵活且可靠的Redis数据访问。通过深入理解哨兵模式的配置和原理...
本文将深入探讨如何配置Redis的哨兵模式,并将其与SpringMVC集成。 首先,我们来看哨兵(Sentinel)模式。哨兵模式是Redis提供的高可用性解决方案,它可以监控主从节点的状态,当主节点故障时,哨兵会自动进行故障...
Redis哨兵主从模式是指 Redis 的一种高可用性解决方案,通过哨兵模式实现自动故障切换和虚拟IP漂移,以提供高可用性的Redis服务。下面是相关知识点的详细解释: 一、Redis主从复制模式 Redis主从复制模式是一种...
总结,Redis 4.0.6的哨兵模式部署涉及主从复制、哨兵配置和故障转移逻辑。正确配置并解决存储乱码问题,能确保Redis集群的稳定性和数据的正确性。务必注意监控和日志分析,以便及时发现并解决问题。
【Redis Sentinel哨兵集群详解】 Redis Sentinel是一种高可用性解决方案,它是Redis官方提供的一种分布式系统,专门用于监控Redis集群中的Master主服务器状态。在Master出现故障时,Sentinel能够自动进行故障转移,...
Redis Sentinel,也称为Redis哨兵模式,是Redis官方提供的一个高可用性解决方案,用于监控、故障检测以及在主从架构中自动完成故障转移。在这个实例配置中,我们将深入理解哨兵系统的工作原理,并学习如何设置和操作...
此脚本文件用于zabbix监控redis哨兵时收集redis sentinel监控信息。
Redis Sentinel是Redis的一个高可用性解决方案,它提供了监控、故障检测和自动故障转移等功能,确保在主Redis服务器出现故障时,系统能够无缝地切换到备份节点,从而保持服务的连续性和稳定性。SpringBoot是一个轻量...
Redis Sentinel(哨兵)部署 Redis Sentinel是Redis的高可用性解决方案,当主节点发生故障时,可以自动进行故障转移。部署Redis Sentinel主要涉及以下几个关键点: 1. Redis Sentinel的作用与优点 Redis Sentinel...
### Redis哨兵模式集群部署详解 #### 一、Redis哨兵模式概述 Redis哨兵(Sentinel)是一种用于实现高可用性的解决方案。它通过一组哨兵进程来监控主服务器和从服务器是否工作正常,在主服务器出现问题时自动进行故障...
综上所述,这个项目旨在展示如何在SSM框架下使用Redis哨兵模式实现高可用的缓存和session共享,同时也包含了基本的数据操作示例,对于理解和实践分布式系统中的缓存管理和高可用性设计具有重要的参考价值。
### Redis 主从配置与 Sentinel 哨兵模式详解 #### 一、Redis 主从配置 在分布式系统中,为了提高数据处理能力和系统的可用性,通常会采用 Redis 的主从复制模型。通过设置一个主节点(Master)和一个或多个从节点...
以下是对Redis Sentinel哨兵模式的详细说明: **一、Redis Sentinel的基本功能** 1. **监控(Monitoring)**:Sentinel系统持续检查主服务器和从服务器的状态,确保它们正常运行。如果发现某个服务器出现异常,比如...
示例:$sentinel = new \Jenner\RedisSentinel\Sentinel(); $sentinel->connect('127.0.0.1', 6379); $address = $sentinel->getMasterAddrByName('mymaster'); $redis = new Redis(); $redis->connect($...
哨兵模式旨在确保Redis集群在主服务器出现故障时能够自动切换到从服务器,保持服务的连续性。 一、Redis主从复制 主从复制是哨兵模式的基础,它允许数据在主节点和一个或多个从节点之间同步。当主节点写入新数据时...
Linux下安装配置redis详细教程,并配置哨兵模式,redis中文详解. 注意:对只使用redis服务,只需要在主Redis里面配置requirepass,在从Redis里面配置masterauth,密码保持一致,密码尽可能复杂,以免被攻击破解。 ...
本文将深入探讨如何在Spring框架中整合Redis哨兵模式,实现高可用的Redis服务。 首先,我们需要理解Redis哨兵系统的工作原理。哨兵系统是由多个哨兵节点组成的,它们会持续监控主Redis实例和从Redis实例的状态。...
为了保证数据库的高可用性和故障转移,Redis提供了哨兵模式(Sentinel mode)来监控Redis主从服务器,实现自动故障恢复。本文将详细介绍在Windows环境下搭建Redis哨兵模式的步骤,并解释相关配置参数。 首先,要...
完成以上步骤后,你将拥有一个一主两从三哨兵的 Redis Sentinel 集群。接下来,我们将讨论如何整合这个集群到 SpringBoot 应用中。 在 SpringBoot 中整合 Redis Sentinel,你需要以下几步操作: 1. **添加依赖** ...