一.Redis-sentinel简介
Redis 的 Sentinel 系统用于管理多个 Redis 服务器(instance),Redis 的 Sentinel 为Redis提供了高可用性。使用哨兵模式创建一个可以不用人为干预而应对各种故障的Redis部署。
1.该系统有以下三个作用:
1).监控(Monitoring):Sentinel会不断地检查你的主服务器和从服务器是否允许正常。
2).提醒(Notification):当被监控的某个Redis服务器出现问题时,Sentinel可以通过API向管理员或者其他应用程序发送通知。
3).自动故障迁移(Automatic failover): (1)当一个主服务器不能正常工作时,Sentinel会开始一次自动故障迁移操作,他会将失效主服务器的其中一个从服务器升级为新的主服务器,并让失效主服务器的其他从服务器改为复制新的主服务器;(2)客户端试图连接失败的主服务器时,集群也会向客服端返回新主服务器的地址,是的集群可以使用新主服务器代替失效服务器。
2.sentinel的分布式特性:
Redis Sentinel 是一个分布式系统, 你可以在一个架构中运行多个 Sentinel 进程(progress), 这些进程使用流言协议(gossip protocols)来接收关于主服务器是否下线的信息, 并使用投票协议(agreement protocols)来决定是否执行自动故障迁移, 以及选择哪个从服务器作为新的主服务器。单个sentinel进程来监控redis集群是不可靠的,当sentinel进程宕掉后(sentinel本身也有单点问题,single-point-of-failure)整个集群系统将无法按照预期的方式运行。所以有必要将sentinel集群,这样有几个好处:
有一些sentinel进程宕掉了,依然可以进行redis集群的主备切换;
如果只有一个sentinel进程,如果这个进程运行出错,或者是网络堵塞,那么将无法实现redis集群的主备切换(单点问题);
如果有多个sentinel,redis的客户端可以随意地连接任意一个sentinel来获得关于redis集群中的信息
一个健壮的部署至少需要三个哨兵实例。
三个哨兵实例应该放置在客户使用独立方式确认故障的计算机或虚拟机中。例如不同的物理机或不同可用区域的虚拟机。【本次讲解是一个机器上进行搭建,和多级是一个道理】
二.实践
1.redis主从架构的搭建过程参考主从架构,这里不再详细解说。
2.配置sentinel,分别在redis的目录下创建三个新的文件sentinel.conf,取代掉原来的文件,然后在文件中加上以下配置
# 这个是Redis6379配置内容,其他文件同理新增然后改一下端口即可,26380,和 26381。
#当前Sentinel服务运行的端口
port 26379
# 哨兵监听的主服务器
sentinel monitor mymaster 127.0.0.1 6379 2
# 3s内mymaster无响应,则认为mymaster宕机了
sentinel down-after-milliseconds mymaster 3000
#如果10秒后,mysater仍没启动过来,则启动failover
sentinel failover-timeout mymaster 10000
# 执行故障转移时, 最多有1个从服务器同时对新的主服务器进行同步
sentinel parallel-syncs mymaster 1
解释:
sentinel monitor mymaster 127.0.0.1 6379 2
mymaster: 是自己定义的服务器的名字,
后面是监听的主节点的ip和端口
2表示
3.启动对应端口的sentinel
在对应的安装目录下启动对应的配置文件,启动命令如下:
./redis-sentinel ../sentinel.conf
4.查看是否启动成功:
出现以上页面表示哨兵的集群架构搭建完成.
5.测试故障转移
1).查看此时的主从节点状态
可以看到此时端口为6379的系统是主节点,下面测试使6379的服务器宕机,在客户端输入shutdown命令,使其宕机,再次查看现在的主从节点
可以看到6380的系统变成了主节点,并且其下只有一个从节点,哨兵监控架构的故障转移就完成了。