redis哨兵模式原理及实现

Springboot整合redis哨兵模式和相关配置文件

1.什么是哨兵机制?

监控(Monitoring): 哨兵(sentinel) 会不断地检查你的Master和Slave是否运作正常。
提醒(Notification): 当被监控的某个 Redis出现问题时, 哨兵(sentinel) 可以通过 API 向管理员或者其他应用程序发送通知。
自动故障迁移(Automatic failover): 当一个Master不能正常工作时,哨兵(sentinel) 会开始一次自动故障迁移操作,它会将与失效Master连接的其中一个Slave升级为新的Master, 并让与失效Master连接的其他Slave改为复制新的Master; 当客户端试图连接失效的Master时,集群也会向客户端返回新Master的地址,使得集群可以使用Master代替失效Master。
    1.1 哨兵(sentinel) 是一个分布式系统,你可以在一个架构中运行多个哨兵(sentinel) 进程,这些进程使用流言协议(gossipprotocols)来接收关于Master是否下线的信息,并使用投票协议(agreement protocols)来决定是否执行自动故障迁移,以及选择哪个Slave作为新的Master。
    1.2 每个哨兵(sentinel) 会向其它哨兵(sentinel)、master、slave定时发送消息,以确认对方是否”活”着,如果发现对方在指定时间(可配置)内未回应,则暂时认为对方已挂(所谓的”主观认为宕机” Subjective Down,简称sdown).若“哨兵群”中的多数sentinel,都报告某一master没响应,系统才认为该master"彻底死亡"(即:客观上的真正down机,Objective Down,简称odown),通过一定的vote算法,从剩下的slave节点中,选一台提升为master,然后自动修改相关配置。
    1.3 虽然哨兵(sentinel) 释出为一个单独的可执行文件 redis-sentinel ,但实际上它只是一个运行在特殊模式下的 Redis 服务器,你可以在启动一个普通 Redis 服务器时通过给定 --sentinel 选项来启动哨兵(sentinel)。
哨兵原理图及说明
在这里插入图片描述
(1)监控功能的体现,哨兵之间相互监控(哨兵1与哨兵2),每一个哨兵还监控主redis和从redis
(2)提醒的功能,比如当主redis挂掉时,我们可以通过哨兵节点的配置,比如调用脚本去发送通知。
(3)自动故障迁移,这一点只是主redis,当主redis挂掉以后,哨兵(sentinel)节点中,通过确认主redis挂掉以后,哨兵节点通过选举,选举出主leader哨兵,决定选举那个从redis成为主节点。

2实现哨兵模式
123哨兵
主: 192.168.223.129 3680: 192.168.223.130 3681
	192.168.223.131 3682
哨兵: 192.168.223.120 26379
      192.168.223.121 26379
      192.168.223.122 26379
哨兵最少是N,其中N>=3,主要是奇数,保证投票的时候N/2+1,多数大于少数,可以进行故障转移

完整配置请见最后文档

(1)主节点配置如下:创建一个redis6380.conf文件

################################## NETWORK #####################################
# 开启远程连接,需要注释绑定
bind 0.0.0.0
# 开启远程连接,需要把保护模式设为no
protected-mode no
################################# REPLICATION #################################
masterauth "123456"

在NETWORK里面配置bind,默认是127.0.0.1意思是只限本地连接,(0.0.0.0)任何ip都可以,建议配置成哨兵的ip和几个从节点的ip,从节点配置的时候注意要修改成主节点ip和其他从节点ip和哨兵节点ip(防止主redis挂掉以后,重启之后变成从节点,而这个时候其他从节点的之一变为主redis,从而会导致失败,所以要这样配置)
保护模式设为no
在REPLICATION配置主节点连接的密码masterauth <主节点密码>,主要是因为这个主节点有可能挂掉,重启之后变为从redis,需要连接的主节点ip和端口,会自动生成,而连接的密码就需要配置

命令启动启动方式及相关信息查看

./redis-server redis6380.conf
./redis-cli -p 6380 -a 123456 info

可以看到角色信息
在这里插入图片描述

(2)从节点配置如下:创建redis6381.conf,redis6382.conf文件
在这里插入图片描述
在REPLICATION中配置主节点信息

命令启动启动方式及相关信息查看

./redis-server redis6381.conf
./redis-cli -p 6381 -a 123456 info

其中一个节点信息如下,角色和连接的主节点
在这里插入图片描述

(3)哨兵节点配置如下:创建sentinel.conf文件

#Sentinel使用端口
port 26379
 
#打开非保护模式
protected-mode no
 
#守护线程启动(即后台启动)
daemonize yes
 
#守护进程会使用到的一个文件
pidfile "/var/run/redis-sentinel.pid"
 
#指定日志文件名,默认为"",空字符串也可用于强制Sentinel登录标准输出,指定后我们可以通过tail -f xxx.log查看日志
logfile "/usr/local/redis/bin/redis-sentinel.log"
 
#每个长时间运行的进程都应该有一个明确定义的工作目录。对于Redis Sentinel来说,启动时dir到/tmp是最简单的事情为进程不干扰管理任务,如卸载文件系统。(默认就是"/tmp",copy过来即可)
dir "/tmp"
 
#重要的来了
#sentinel monitor <master-name> <ip> <redis-port> <quorum>
#告诉sentinel去监听地址为ip:port的一个master,这里的master-name可以自定义,quorum是一个数字,指明当
#有多少个sentinel认为一个master失效时,master才算真正失效.需要注意的是master-ip 要写真实
#的ip地址而不要用回环地址(127.0.0.1)。
sentinel monitor mymaster 192.168.223.129 6380 2

 sentinel auth-pass mymaster 123456
#sentinel down-after-milliseconds <master-name> <milliseconds> 
#这个配置项指定需要多少时间无响应,一个master才会被这个sentinel主观地认为是不可用的.单位是毫秒,默认为30秒
sentinel down-after-milliseconds mymaster 10000

 
#sentinel parallel-syncs <master-name> <numslaves> 
#这个配置项指定了在发生failover主备切换时最多可以有多少个slave同时对新的master进行同步,这个数字越小,完成failover所需的时间就越长,但是如果这个数字越大,就意味着越 多的slave因为replication而不可用.可以通过将这个值设为1(默认就是1)来保证每次只有一个slave处于不能处理命令请求的状态
sentinel parallel-syncs mymaster 1

 
#sentinel failover-timeout <master-name> <milliseconds>
# failover过期时间,当failover开始后,在此时间内仍然没有触发任何failover操作,当前sentinel 将会认为此次failover失败,默认为3分钟,单位为毫秒
sentinel failover-timeout mymaster 180000

命令启动启动方式及相关信息查看

./redis-sentinel sentinel.conf
./redis-cli  -p 26379 -a 123456 info

哨兵节点信息如下,哨兵的数量和监控主从redis信息
在这里插入图片描述
主从节点都启动之后,在主节点查看信息
在这里插入图片描述

3模拟主节点故障,验证故障自动转移

(1)在主节点执行命令

./redis-cli -p 6380 -a 123456 shutdown

从节点130变成了主redis,实现了自动转移功能,通过哨兵模式,我们可以发现,我们配置连接主节点的信息被删掉了
在这里插入图片描述
在这里插入图片描述
(2)假如129(原来的主redis节点)从故障中恢复了,打开redis6381.conf最后一行,发现哨兵模式下自动修改成主节点信息
在这里插入图片描述
故障转移日志
在这里插入图片描述

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值