浅谈Redis Sentinel

版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/qq2430/article/details/80679439

什么是Sentinel

Redis Sentinel是一个用来监控redis集群中节点的状态,不用来存储数据。当集群中的某个节点有故障时,可以自动的进行故障转移的操作。通常为了保证sentinel的高可用,sentinel也会部署多个。sentinel的结构图如下所示:

这里写图片描述

定时任务

在redis sentinel中,一共有3个定时任务,通过这些任务,来发现新增节点和节点的状态。

  1. 每10秒每个sentinel节点对master节点和slave节点执行info操作。
    这里写图片描述
  2. 每2秒每个sentinel节点通过master节点的channel(sentinel:hello)交换信息。
    这里写图片描述
  3. 每1秒每个sentintel节点对master节点和slave节点以及其余的sentinel节点执行ping操作。
    这里写图片描述

主观下线和客观下线

  • 主观下线:当前sentintel节点认为某个redis节点不可用。

  • 客观下线:所有sentinel节点认为某个redis节点不可用。

故障转移过程

当多个sentinel认为master节点不可用,会进行故障转移操作,如下图所示。
这里写图片描述

1. 领导者选举

作用:选举出一个sentenel节点作为领导者去进行故障转移操作。

过程:

1). 每个做主观下线的sentinel节点向其他sentinel节点发送上面那条命令,要求将它设置为领导者。

2). 收到命令的sentinel节点如果还没有同意过其他的sentinel发送的命令(还未投过票),那么就会同意,否则拒绝。

3). 如果该sentinel节点发现自己的票数已经过半且达到了quorum的值,就会成为领导者。

4). 如果这个过程出现多个sentinel成为领导者,则会等待一段时间重新选举。

2. 选出新的master节点

redis sentinel会选一个合适的slave来升级为master,那么,如何选择一个合适的slave呢?顺序如下:

1). 选择slave-priority最高的slave节点(默认是相同)。

2). 选择复制偏移量最大的节点。

3). 如果以上两个条件都不满足,选runId最小的(启动最早的)。

3. 更改slave节点的master节点

当选举出新的master节点后,会将其余的节点变更为新的master节点的slave节点,如果原有的master节点重新上线,成为新的master节点的slave节点。

4. 通知客户端

当所有节点配置结束后,sentinel会通知客户端节点变更信息。

5. 客户端连接新的master节点

客户端收到节点信息后,会连接新的master节点。

故障转移操作

  1. 启动1个master节点,2个slave节点。master节点端口号6379,slave节点端口号为6380和6381,如下图所示。

    这里写图片描述

  2. 启动3个sentienl节点,端口号为26379、26380和26381,如下图所示。
    这里写图片描述

  3. 先看下主从关系,执行命令redis-cli info replication,可以看到端口号为6379的master节点有2个slave节点,端口号为6380和6381。
    这里写图片描述

  4. 将master进程杀死,因为master的端口是6379,所以我们来看6380的信息,等一段时间后执行命令redis-cli -p 6380 info replication,可以看到6380的slave升级到master了,有一个slave节点,端口号是6381。
    这里写图片描述

  5. 将6379的redis节点启动(原来的master),执行命令redis-cli -p 6380 info replication 查看主从信息,可以看到原来的master成为了新master的slave。
    这里写图片描述

猜你喜欢

转载自blog.csdn.net/qq2430/article/details/80679439