前言
上篇文章我们讲了Redis的主从复制搭建,但是大家这里思考一个问题,如果我的主节点挂了,那是不是就只有从节点了。那就没有机器接受Redis的写请求了,那这样肯定是不行的对吧。
这里我们的哨兵机制就是解决这个问题:故障转移,如果主节点挂掉,就进行主从切换,让从节点升级为主节点,继续对外提供服务。
文章结尾可以发表一些问题、或者建议。你们的反馈能让老哥写出更好的文章。
哨兵简介
Sentinel(哨兵)是Redis高可用的解决方案,可以运行多个Sentinel组成一个哨兵分布式系统。
使用流言协议(gossip protocols)来接收主机是否下线;并使用投票协议(agreement protocols)来决定是否执行自动故障迁移;以及选择哪个从服务器作为新的主服务器。
Sentinel哨兵职责如下:
监控(Monitoring):Sentinel 会不断地定期检查你的主服务器和从服务器是否运作正常。
提醒(Notification): 当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。
自动故障迁移(Automaticfailover): 当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作,它会将失效主服务器的其中一个从服务器升级为新的主服务器,并让失效主服务器的其他从服务器改为复制新的主服务器; 当客户端试图连接失效的主服务器时,集群也会向客户端返回新主服务器的地址, 使得集群可以使用新主服务器代替失效服务器。
统一的配置管理:连接者询问sentinel取得主从的地址。
哨兵搭建
机器准备
主从复制的搭建,之前的文章讲过了,大家可以去参考
服务器名称
节点类型
IP地址
端口
Node1
Redis服务1(主节点Master)
192.168.14.101
6379
Node2
Redis服务2(从节点slave1)
192.168.14.102
6380
Node3
Redis服务3(从节点slave2)
192.168.14.103
6381
Sentinel1
哨兵服务1
192.168.14.101
26379
Sentinel2
哨兵服务2
192.168.14.102
26380
Sentinel3
肖兵服务3
192.168.14.103
26381
五个主要配置讲解
在每个主从Redis目录下新建一个名为sentinel.conf的文件,在该文件下配置如下命令。
命令总格式:sentinel
一:配置sentinel监控master
示例:sentinel monitor mymaster 127.0.0.1 6380 1
详解:sentinel监控的master的名字叫做mymaster,地址为127.0.0.1:6380;sentinel在集群中,需要多个sentinel互相沟通来确认某个master是否真的死了;数字1代表,当集群中有1个sentinel认为master死了时,才能真正认为该master已经不可用了。
二:配置sentinel心跳
示例:sentinel down-after-milliseconds mymaster 5000
详解:sentinel向master发送心跳PING,确认master是否存活,如果master在down-after-milliseconds时间(单位毫秒)范围内没有给sentinel回应PONG,或者回复一个错误消息,那么sentinel就主观的认为这个master不可用了
三:配置主从切换时,同步新master的salve个数
示例:sentinel parallel-syncs mymaster 1
详解:在发生failover主备切换时,这个选项指定了最多可以有多少个slave同时对新的master进行同步数据。这个数字越小,完成failover所需的时间就越长,但是如果这个数字越大,就意味着越多的slave因为replication而不可用。可以设为 1 来保证每次只有一个slave处于不能处理命令请求的状态
四:配置故障转移最大时间
示例:sentinel failover-timeout mymaster 60000(毫秒)
详解:若Sentinel进程在该配置值内未能完成故障转移的操作,则认为本次故障转移操作失败。
五:配置报警脚本
示例:sentinel notification-script mymaster