Redis中的Sentinel机制

如题所述

第1个回答  2022-07-15
Redis的Sentinel文档

概述:Redis的Sentinel系统用于管理多个Redis服务器,该系统执行以下三个任务:

如何使用?

启动Sentinel

    对于 redis-sentinel 程序,你可以用一下命令来启动Sentinel系统:

    对于 redis-server 程序,你可以用下面的命令来启动一个运行在Sentinel模式下的Redis服务器

    两种方式都可以启动一个sentinel实例,启动sentinel实例必须指定相应的配置文件,系统会使用配置文件来保存sentinel的当前状态,并在Sentinel重启时通过载入配置文件来进行状态还原。

    注意:如果启动Sentinel时没有指定相应的配置文件,或者指定的配置文件不可用(not writabel),那么Sentinel会拒绝启动。

    如何配置Sentinel?

    Redis 源码中包含了一个名为 sentinel.conf 的文件, 这个文件是一个带有详细注释的 Sentinel 配置文件示例。

运行一个 Sentinel 所需的最少配置如下所示:

    解读一下第一条指令的意思:

    其他选项的基本格式如下

学到这里我们进行实操一下,感受一下哨兵的威力!

    我们先在test目录下,新建三个配置文件:26379.conf、26380.conf、26381.conf(Sentinel服务器端口号默认是在redis服务器前拼个2),用 vi 命令创建这三个配置文件,然后我们在配置文件中写入一些简单的配置:

端口号:26379,哨兵名称:mymaster,主机地址:127.0.0.1,监控的redis端口号:6379,必须要2台从Sentinel服务器同意才会切换master,并进行故障迁移。(注意,这三个配置文件监控的redis服务器端口都是6379)

用相同的方法,创建了另外两个sentinel配置文件

我们先启动一个6379作为master

再启动6380、6381,作为两个slave

接下来正菜上场了!启动Sentinel!

可以发现,有两个slave正在跟随master,我们只要拿哨兵监控master,就可以看到有几个slave

我们继续启动,再接着启动两个Sentinel服务器

现在我们做一个小实验:如果我们将master服务器(6379)关闭,两个slave之间会发生什么?

当把master关闭之后,两个slave直接会有一段时间提示主服务器拒绝访问:

而哨兵开始也没有立马进行选举投票,选出新master,因为redis选举默认配的时间是有些长的,要过一点时间才开始选举投票,经过重新选举之后,sentinel选择了6381作为新的master。

那既然6381作为新秀,它应该有了很大的指导权,我们现在看看:

我们可以看到,在6381中设置的数据,确实在6380中可以查的到!说明6380在跟随6381,说明哨兵自动帮我们实现了故障转移。

我们再查看一下配置文件,看看有何变化?

可以发现,和原来我们写进去的2句配置完全不一样了,也就是说哨兵会自己改动配置文件。现在的master是6381。

接下来探讨一个问题:哨兵是如何发现其他哨兵的?

答案是:发布订阅机制。活着的master会去查看slave是谁,然后会去订阅其他的slave

我们可以用 psubscribe 去查看相关的发布订阅情况
相似回答
大家正在搜