Redis Sentinel特性介绍

Redis哨兵提供了Redis的高可用功能,使用Sentinel之后可以在某些情况下无需人为介入自动的恢复Redis的服务不可用问题。

特性

哨兵主要提供以下能力:

  • 监控:不断的周期性的检查Redis的Master节点和Slave节点的信息
  • 通知:通过API可以通知系统管理员,被监控的Redis实例遇到了某种问题
  • 故障自动恢复:如果某一台Master节点不工作了,Sentinel可以启动故障切换功能,将某台Slave提升为Master,Sentinel会重新配置Slave,同时通知连接Sentinel的客户端,Master的地址改变了
  • 配置提供:客户端连接到Sentinel上获取当前的Redis Master地址
image-20190927072426181

哨兵是分布式部署的,哨兵设计的目的是为了多台哨兵节点能相互配合。运行多台哨兵有如下优点:

  • 故障检测是多台哨兵都同意这台Master不可用了,才认定Master不可用。如果节点数少,可能存在误判
    • 多个Sentinel发现Master节点有问题
    • 选举一个Sentinel作为Master,一般是发现Master不可用的Sentinel节点,Sentinel Master是具有提升Slave为Master功能的
    • 选出一个Slave作为新的Master
    • 通知其余Slave新的Master地址
    • 通知客户度主从变化
    • 等老的Master又被检测活之后,成为新Master的Slave
  • 就算挂掉了几台Sentinel,其余的Sentinel节点仍然正常工作,增强了系统的健壮性。

一套Sentinel集群可以监控多个Redis主从集群

三个定时任务

1 每10s每个Sentinel对Master和Slave执行Info信息

  • 发现Slave节点
  • 确认主从关系

2 每隔2s对每个Sentinel通过Master节点的Channel交换信息(pub/sub),注意是Master节点

  • 通过__ sentinel __:hello 频道交互,Sentinel交互数据的方式,新的Sentinel节点会自动的注册这个频道
  • 交互对节点的“看法”和自身信息

3 每隔1S对其它Sentinel和Redis节点执行ping

  • 心跳检测,失败判断依据

客户端连接Sentinel原理

Redis Sentinel高可用指的是服务端的高可用,如果我们直接连接到Redis 的Master节点挂掉了,那么我们的客户端就不可用了。

我们需要的是服务端高可用和客户端高可用的结合。

1 获取所有的Sentinel节点,遍历得到一个可用的Sentinel节点

2 在可用的Sentinel节点上执行,sentinel get-master-addr-by-name MasterName来返回Master节点信息,包含地址和端口

3 当获取到Master节点之后,执行role或者role replication来验证是否真的是Master节点

4 如果当Master节点发生了变化,Sentinel通知客户端主节点信息发生了变化。客户端接受到变化是通过一个Redis的Channel来实现

启动Sentinel

Sentinel默认监听的端口在TCP 26379,运行Sentinel有两种方式,效果是一样的:

redis-sentinel /path/to/sentinel.conf
redis-server /path/to/sentinel.conf --sentinel

未完待续

后面讲解Redis Sentinel的配置以及如何与Java,Spring Boot配合使用

你可能感兴趣的:(Redis Sentinel特性介绍)