跟我一起学Redis之加个哨兵让主从复制更加高可用

主从复制的实现在已经分享过,虽然主从复制本身的确让读写分离更加高效,但是对于整体高可用存在很大的劣势:当主节点宕机了之后还需要人为重新进行主从关系配置;这不是开玩笑嘛,这样人为干预,故障恢复不及时,损失就难免啦。谁维护谁不爽,睡个觉都提心吊胆。

找个哨兵站岗,专门用来监控主服务器,一旦有变故,哨兵自动处理,这样故障恢复及时且更加智能;接下来就来玩玩。

正文

Redis哨兵(Sentinel)其实本质就是一个RedisServer节点,通过设置运行模式来开启哨兵的功能;主要功能如下:

监控(Monitoring):哨兵节点会不断的检查的主服务和从服务的运行状态;

自动故障迁移(Automatic failover):当Redis主从模式中的主服务器发生故障时,哨兵节点会根据一定的策略自动进行故障迁移,即在原有主服务器下的从服务器中,自动选出一个从服务器作为新的主服务器,及时处理故障;

通知(Notification):当被监控的Redis服务器故障时,哨兵节点可以向相关人员或客户端发送通知提醒;

配置提供者(Configuration provider):可以通过哨兵节点为客户端提供主从模式中的主节点地址,这里的客户端指平时写的程序;

老规矩,还是先不说那么多理论,先来实操一把,然后再来总结:

哨兵模式搭建

先来个最基础的:一个哨兵监控一主二从的环境;后面小伙伴就知道如何扩展啦,如下图所示(这里通过一台机器演示,所以通过端口进行区分各个redis节点):

image-20210114141345708

Redis哨兵模式是基于Redis主从复制的,所以先来搭建主从复制环境,这个过程在中已经详细分享,这里就不细说,直接动手啦;

搭建主从复制环境,如上图所示,6377作为主服务器,6388和6399作为从服务器,这里是通过配置文件的形式修改,最终效果如下:

image-20210114142426244

主从复制环境搭建完毕之后,接下来需要有一个哨兵对其进行监控;之前有说过,Redis的功能通过配置文件就能快速实现,针对哨兵有一个单独的配置文件,这里就起名为:sentinel.conf,内容如下:

sentinel monitor mymaster 127.0.0.1 6377 1

大概意思就是哨兵要监控对应的主服务器,其他啥都不用配置;

这里对于配置文件内容先不解释这么多,接下来会专门进行介绍,先把环境搭建起来,玩一把再说;

启动哨兵,两种方式:

redis-sentinel启动,redis-sentinel其实是用redis的一个代码分支分离出来的,安装完redis就有,命令如下:

./redis-sentinel ZoeConfig/sentinel.conf

redis-server启动,指定为哨兵模式即可,命令如下:

./redis-server ZoeConfig/sentinel.conf --sentinel

启动效果如下:

image-20210114164300813

如上图所示,Redis哨兵其实本质还是一个Redis节点,只是运行模式不一样而已;

哨兵模式运行起来,模拟主服务器宕机,这里直接将6377服务器shutdown, 注意看哨兵打印的日志:

先将主服务器6377关掉,如下:

image-20210114165824631

由于哨兵定时对主服务器进行监控,如果在30秒内(默认30秒)发现主服务器无法正常通讯时,就开始进行投票选举原主服务器下的从服务器作为新主服务器,哨兵打印日志如下:

image-20210114170909938

大概流程如下图:

image-20210115105820011

哨兵最后的状态会持久化到指定的配置文件中,之前只是简单配置了一条监控语句,现在如下:

image-20210115122612914

验证故障转移结果;

光说6388变成了主服务器没证据,连上6388看看,同时再看看6399有没有换新主人,如下图:

6388主从信息

image-20210114171247927

对应的配置文件中将之前的主从关系配置已经去掉了。

6399主从信息

image-20210114171516670

对应的配置文件也已经改了,如下:

image-20210114171713342

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpdwjw.html