第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 去查看相关的发布订阅情况