当前位置: 代码迷 >> 综合 >> 7.redis sentinel
  详细解决方案

7.redis sentinel

热度:93   发布时间:2023-12-05 18:45:50.0

主从复制存在的问题:

出现问题要手动进行故障转移
写能力和存储能力受限

自动故障转移:
客户端不会管谁是master谁是slave 客户端链接sentinel 由sentinel通知客户端master是那个然后进行直连;
在这里插入图片描述
sentinel可以监控多套主从复制 以master-name来区分,当master出现故障时候选取一个sentinel作为领导将主从复制进行故障转移;由于此操作只需要一个sentinel就可以完成所以在第二步会选取sentinel
在这里插入图片描述

sentinel故障转移原理

sentinel的三个定时任务
在这里插入图片描述
第二个定时任务为第三个的基础,相当于每个sentinel都采用发布订阅模式订阅了相同的频道 ,每2秒通过sentinel的master节点的channel和其他的sentinel交换信息;

主观下线和客观下线
在这里插入图片描述
主观下线:是单个sentinel节点对redis节点失败的判定;
客观下线:是所有sentinel节点对redis节点失败的判定,如果设置为2 那么两个sentinel节点认为该redis失败那么它才算失
败,一般这个数值设置为总sentinel的数量除以2然后加1;

redis下线后 选出sentinel领导者
在这里插入图片描述
sentinel集群内部会选出一个领导者,来对redis主从进行故障转移;

选出领导者进行故障转移
在这里插入图片描述
在这里插入图片描述
什么是合适的slave:
1.优先级
2.偏移量最大说明复制的越完整
3.runId最小 说明最先创建

节点维护

手动故障转移,通过sentinel发送命令,进行故障转移
在这里插入图片描述

高可用读写分离

sentinel中,读写分离时客户端读数据连接的是slave节点,但是当slave节点宕机sentinel是无法对slave节点进行故障转移的,因为sentinel监控的只是master节点只会转移master节点 对slave只会做一个主下线的判断,所以可以将slave进行一个池连接,但是这样写会出现其他问题(例如主观下线判断不准确) 并且提高复杂度,如果redis的性能下降,可以考虑集群
在这里插入图片描述

搭建sentinel

在这里插入图片描述

1.sentinel 端口

2.sentinel地址

3.sentinel日志

4.sentinel monitor 监控名称 地址 端口 2(这个2代表至少有两个sentinel认为sentinel有问题那么才进行故障转移)

5.相当于sentinel去连接master 如果30000毫秒还不通; 如果当前sentinel与master直接的通讯中,在指定时间内没有响应或者响应错误代码,那么 当前sentinel就认为master失效(SDOWN,“主观”失效)

6.这个配置项指定了在发生failover主备切换时最多可以有多少个slave同时对新的master进行 同步。在从Redis实例较多的情况下这个数字越小,同步的时间越长,完成故障转移所需的时间就越长。,但是如果这个数字越大,就意味着越 多的slave因为replication而不可用。可以通过将这个值设为 1 来保证每次只有一个slave 处于不能处理命令请求的状态。

7.默认超过这个时间认为故障转移失败,需要人工进行故障转移

9.sentinel auth-pass mymaster 123456 主节点的密码

10.正常redis-server可以通过配置文件来指定守护进程启动以及指定日志路径,但sentinel就不一样了。正常启动redis的sentinel时,进程会直接在前台跑,一退出sentinel进程就关了,解决方案 以守护进程的方式启动 daemonize yes

11.解除保护模式 允许远程访问 protected-mode no

只使用单个sentinel进程来监控redis集群是不可靠的,当sentinel进程宕掉后(sentinel本身也有单点问题,single-point-of-failure)整个集群系统将无法按照预期的方式运行。所以有必要将sentinel集群,这样有几个好处:

  • 即使有一些sentinel进程宕掉了,依然可以进行redis集群的主备切换;
  • 如果只有一个sentinel进程,如果这个进程运行出错,或者是网络堵塞,那么将无法实现redis集群的主备切换(单点问题);
  • 如果有多个sentinel,redis的客户端可以随意地连接任意一个sentinel来获得关于redis集群中的信息。
    sentinel的集群 只需要复制一样的配置sentinel.conf文件,修改端口号,然后分别启动就可以。sentinel会根据 master 名字 地址 来互相关联,交互信息。

sentinel 启动命令:redis-server.exe sentinel.conf --sentinel
redis-cli -p sentinel端口 登陆然后输入info 查询sentinel信息

spingBoot配置sentinel

     spring:redis:password: 123456sentinel:#sentinel监听的名称master: mymaster #sentinel的ip和端口 如果有多个sentinel用逗号隔开nodes: 192.168.1.127:26379 

比较有用的文章:
redis哨兵主备切换的数据丢失问题:异步复制、集群脑裂
sentinel 启动步骤