什么是哨兵
顾名思义,哨兵的作用就是监控Redis系统的运行状况。它的功能包括以下两个。
(1)监控主数据库和从数据库是否正常运行。
(2)主数据库出现故障时自动将从数据库转换为主数据库。
哨兵是一个独立的进程,使用哨兵的一个典型架构如图8-3所示。
image.png在一个一主多从的Redis系统中,可以使用多个哨兵进行监控任务以保证系统足够稳健,如图8-4所示。注意,此时不仅哨兵会同时监控主数据库和从数据库,哨兵之间也会互相监控。
image.png以图8-3所示架构进行模拟
redis环境:
192.168.1.102:6302(master)
192.168.1.103:6380(slave)
192.168.1.104:6381(slave)
首先启动三个redis数据库,然后将两个从库连接至主库(很简单,自行百度)
查看主库
image.png可见其连接了两个从库,配置正确,然后用同样的方法查看两个从库配置:
image.png image.png当出现的信息如上时,即表示一主多从的复制配置已经成功了。
接下来开始配置哨兵,建立一个配置文件sentinel.conf:
vim /etc/sentinel.conf
# 配置监听的主服务器,这里sentinel monitor代表监控,mymaster代表服务器的名称,可以自定义,192.168.1.102代表监控的主服务器,6303代表端口,1代表只有一个或一个以上的哨兵认为主服务器不可用的时候,才会进行failover操作。
sentinel monitor mymaster 192.168.1.102 6302 1
#如果主库设置了密码需要加上
sentinel auth-pass mymaster Rd123456..
启动sentinel进程
/bin/redis-sentinel /etc/sentinel.conf > /var/log/redis/sentinel.log &
tail -f /var/log/redis/sentinel.log
image.png
其中+slave表示新发现了从数据库,可见哨兵成功地发现了两个从数据库。现在哨兵已经在监控这3个Redis实例了,这时我们将主数据库(即运行在6302端口上的Redis实例)关闭(杀死进程或使用SHUTDOWN命令),等待指定时间后(可以配置,默认为30秒),哨兵会输出如下内容:
image.png+try-failover表示哨兵开始进行故障恢复,+failover-end表示哨兵完成故障恢复,期间涉及的内容比较复杂,包括领头哨兵的选举、备选从数据库的选择等,放到后面介绍,此处只需要关注最后3条输出。+switch-master表示主数据库从6302端口迁移到6381端口,即6381端口的从数据库被升格为主数据库,同时两个+slave则列出了新的主数据库的两个从数据库,端口分别为6380和6302。其中6302就是之前停止服务的主数据库,可见哨兵并没有彻底清除停止服务的实例的信息,这是因为停止服务的实例有可能会在之后的某个时间恢复服务,这时哨兵会让其重新加入进来,所以当实例停止服务后,哨兵会更新该实例的信息,使得当其重新加入后可以按照当前信息继续对外提供服务。此例中6302端口的主数据库实例停止服务了,而6381端口的从数据库已经升格为主数据库,当6302端口的实例恢复服务后,会转变为6381端口实例的从数据库来运行,所以哨兵将6302端口实例的信息修改成了6381端口实例的从数据库。
注意事项:
1、 如果系统中使用了redis 哨兵,由于在切换master的时候,原本的master可能变成slave,故也需要在原本主库redis /etc/redis.conf 上配置masterauth:password
2、将redis.conf中bind配置注释掉,以便所有服务器都可以连接
3、需要将所有服务器的主从redis端口开放
4、每台服务器上的主从redis密码必须相同,否则在切换到新的master的时候,会认证失败
5、当SELinux启动时,如果修改了redis默认端口,在进行主从连接时,可能出现权限错误等异常,这是因为SELinux对端口做了限制
解决方案(推荐第一种方案):
1、添加新的redis端口到SELinux认证中
semanage port -a -t redis_port_t -p tcp 6302
2、将SELinux设为宽容模式,修改/etc/sysconfig/selinux,将SELINUX修改为permissive
网友评论