述
上文中,使用了两种方式搭建redis主从,这两种方式无论是哪种,都会存在一个问题,那就是在主机宕机的时候,就会发生群龙无首的情况,那么如果在master挂掉的时候,能够从slave中选举出一个来充当master,就不需要我们去手动重启主机了,这就是哨兵模式
环境准备
本文环境基于上文中,如下这样的一个主从结构:
首先我们需要创建一个哨兵的配置文件,名称是sentinel.conf
,如果你的三个redis在不同的目录下,那就需要去三个目录下都创建一份哨兵的配置文件,创建命令是:1
touch sentinel.conf
然后通过vim编辑,内容如下:1
2
3
4
5sentinel monitor mymaster 172.16.12.3 6379 1
daemonize yes
logfile "/var/log/sentinel_log.log"
protected-mode no
sentinel auth-pass mymaster 123456
- 第一行的配置中 mymaster是给监控主机起的名字,这个是自定义的,然后后面是主机的地址和端口,最后的1表示有多少个哨兵认为主机挂掉了,就进行切换
- 第二行的配置表示哨兵在后台运行
- 第三行是哨兵的日志文件地址
- 第四行把保护模式关闭,保护模式如果开启只接受回环地址的ipv4和ipv6地址链接,拒绝外部链接,而且正常应该配置多个哨兵,避免一个哨兵出现独裁情况,如果配置多个哨兵那如果开启也会拒绝其他sentinel的连接.导致哨兵配置无法生效.
- 第五行如果redis配置了密码,那这里必须配置认证,否则不能自动切换
三个redis节点都要这样配置,三个sentinel.conf
文件的内容除了日志文件的名称要改其他都不需要改.
最后,配置完成之后,可以通过以下命令启动哨兵1
redis-sentinel sentinel.conf
按我们上面的配置,配置了后台运行和日志文件的地址,那就可以到去查看哨兵的运行日志.1
2
3cd /var/log/
cat sentinel_log.log
内容如下:
测试
好了哨兵起来了,然后主从关系也搭建好了,如下:
现在的结构是这样的:1
2
3Master: 172.16.12.3 6379
Slave: 172.16.12.3 6380
Slave: 172.16.12.3 6381
一主二仆,服务都是启动的. 然后现在关闭6379的服务,观察哨兵的日志输出,如下:
从图中可以看到在6379这个master挂掉之后,他把master换成了6381这个服务,然后我们在6381和6380上运行info replication
,看一下他们各自的身份,如下:
这时候,6381显示他是个master然后下面有一个slave是6380
最后,我们再把6379启动起来,启动起来之后看一下他的信息,如下:
6379重启之后,他的身份是slave了,并不是master了
好了,哨兵模式就介绍到这里, 如果用的是docker装的redis,在docker环境下配置哨兵的方法请前往docker分类中去查看,有详细说明