当前位置: 代码迷 >> 综合 >> Redis分布式集群实战(三)——搭建Redis哨兵(Sentinel)模式
  详细解决方案

Redis分布式集群实战(三)——搭建Redis哨兵(Sentinel)模式

热度:54   发布时间:2023-12-09 02:25:03.0

文章目录

  • 一、哨兵模式
      • 1、定义
      • 2、功能作用
      • 3、原理
      • 4、工作方式
      • 5、配置文件
  • 二、搭建Redis哨兵模式
  • 三、故障转移的具体步骤:

一、哨兵模式

主从切换技术的方法是:当主服务器宕机后,需要手动把一台从服务器切换为主服务器,这就需要人工干预,费事费力,还会造成一段时间内服务不可用。哨兵模式就是为了解决此类问题而产生的。

1、定义

Sentinel(哨兵)是用于监控redis集群中Master状态的工具,是Redis 的高可用性解决方案,sentinel哨兵模式已经被集成在redis2.4之后的版本中。sentinel系统可以监视一个或者多个redis master服务,以及这些master服务的所有slave;当某个master服务下线时,自动将该master下的slave升级为master服务替代已下线的master服务继续处理请求。

sentinel可以让redis实现主从复制,当一个集群中的master失效之后,sentinel可以选举出一个新的master用于自动接替master的工作,集群中的其他redis服务器自动指向新的master同步数据。一般建议sentinel采取奇数台,防止某一台sentinel无法连接到master导致误切换。

在这里插入图片描述

2、功能作用

监控(monitoring):Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。
提醒(Notifation):当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。
自动故障转移(Automatic failover):当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作, 它会将失效主服务器的其中一个从服务器升级为新的主服务器, 并让失效主服务器的其他从服务器改为复制新的主服务器; 当客户端试图连接失效的主服务器时, 集群也会向客户端返回新主服务器的地址, 使得集群可以使用新主服务器代替失效服务器。

3、原理

哨兵模式是一种特殊的模式,首先Redis提供了哨兵的命令,哨兵是一个独立的进程。其原理是 哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个Redis实例。

在这里插入图片描述
这里的哨兵有 两个作用

  • 通过发送命令,让Redis服务器返回监控其运行状态,包括主服务器和从服务器。
  • 当哨兵监测到master宕机,会自动将slave切换成master,然后通过发布订阅模式通知其他的从服务器,修改配置文件,让它们切换主机。

然而一个哨兵进程对Redis服务器进行监控,可能会出现问题,为此,我们可以使用多个哨兵进行监控。各个哨兵之间还会进行监控,这样就形成了多哨兵模式

故障切换(failover)的过程:假设主服务器宕机,哨兵1先检测到这个结果,系统并不会马上进行failover过程, 仅仅是哨兵1主观的认为主服务器不可用,这个现象成为 主观下线当后面的哨兵也检测到主服务器不可用,并且数量达到一定值时,那么哨兵之间就会进行一次投票,投票的结果由一个哨兵发起,进行failover操作。切换成功后,就会通过发布订阅模式,让各个哨兵把自己监控的从服务器实现切换主机,这个过程称为 客观下线。这样对于客户端而言,一切都是透明的,客户端并不知晓。切换后,主备redis配置文件6379.conf和主备redis的sentinel.conf的内容都会发生改变,即主redis的6379.conf中会多一行slaveof的配置,sentinel.conf的监控目标会随之调换。

监控同一个Master的Sentinel会自动连接,组成一个分布式的Sentinel系统,互相通信并交换彼此关于被监视服务器的信息。

Sentinel状态持久化
snetinel的状态会被持久化地写入sentinel的配置文件中。每次当收到一个新的配置时,或者新创建一个配置时,配置会被持久化到硬盘中,并带上配置的版本戳。这意味着,可以安全的停止和重启sentinel进程

4、工作方式

1)每个Sentinel以每秒钟一次的频率向它所知的Master,Slave以及其他 Sentinel 实例发送一个PING命令。

2)如果一个实例(instance)距离最后一次有效回复PING命令的时间超过 own-after-milliseconds 选项所指定的值,则这个实例会被Sentinel标记为主观下线

3)如果一个Master被标记为主观下线,则正在监视这个Master的所有 Sentinel 要以每秒一次的频率确认Master的确进入了主观下线状态。

4)当有足够数量的Sentinel(大于等于配置文件指定的值)在指定的时间范围内确认Master的确进入了主观下线状态&#x