官方文档:https://redis.io/topics/sentinel
一:Redis哨兵模式
Sentinel(哨兵)用于监控Redis集群中的Master状态的工具,是Redis高可用解决方法,哨兵可以监视一个或多个redis master服务,以及这些master服务的所有从服务;当某个master服务宕机后,会把这个master下的某个从服务升级为master来替代一宕机的master继续工作。
结论:
master挂了之后,由于哨兵监控,剩余slave会进行选举,选举后其中一个成为master,当原来的master恢复后,他会成为slave。
二:配置哨兵监控master和启动哨兵x 3【3台节点都要配置一样的哨兵】
1、配置哨兵监控master
1.1 哨兵sentinel.conf所在路径:cd /home/software/redis-5.0.5/sentinel.conf
拷贝sentinel.conf到 /usr/local/redis/ 下
cp sentinel.conf /usr/local/redis/
1.2 配置sentinel.conf:cd /usr/local/redis/
# 哨兵端口
port 26379
#
pidfile "/usr/local/redis/sentinel/redis-sentinel.pid"
#
daemonize yes
#
protected-mode no
# 保存执行哨兵时产生的日志
logfile "/usr/local/redis/sentinel/redis-sentinel.log"
# 哨兵工作空间(目录)
dir "/usr/local/redis/sentinel"
1.3 核心配置
# 配置哨兵(2个哨兵),将mymaster修改为imooc-master、127.0.0.1为本节点的ip
#sentinel monitor mymaster 127.0.0.1 6379 2
sentinel monitor imooc-master 192.168.1.182 6379 2
# 密码 :sentinel auth-pass <master-name> <password>
sentinel auth-pass imooc-master imooc
# master被sentinel认定为失效的间隔时间,毫秒为单位
sentinel down-after-milliseconds imooc-master 10000
# 剩余的slaves重新和新的master做同步的并行个数
sentinel parallel-syncs imooc-master 1
# 主备切换的超时时间,哨兵要去做故障转移,这个时候哨兵也是一个进程,如果他没有去执行,超过这个时间后,会由其他的哨兵来处理
sentinel failover-timeout imooc-master 180000
1.4 3台节点都要配置一样的哨兵,把配置文件拷贝到182和183节点。
2、启动哨兵 x 3
redis-sentinel sentinel.conf
3、测试
master挂了,看slave是否成为master
master恢复,观察slave状态
4、结论
master挂了以后,由于哨兵监控,剩余slave会进行选举,选举后其中一个成为master,当原来的master恢复后,他会成为slave。
二:哨兵检查【哨兵高可用集群】
三:故障转移【哨兵个数设置为奇数(3-5-7),才可以做到少数服从多数】
设置3个哨兵,整个分布式环境下网络环境复杂非常复杂,网络发生波动
主观下线:当只有1个哨兵可能检测到了master不存在(ping包无法到达master),对于其它哨兵是可以检测到master的,当只有1个哨兵认为master挂了,这是不做数的,这是一种主观臆断,还不能做故障转移。
因为我们设置的quorum=2,意思是在哨兵集群里面哨兵有多个。
真正(客观)下线:那么当有2个哨兵检测到了master挂掉了(ping包无法到达master),那么这个时候就可以断定master节点是真的挂掉了,随后就可以做故障转移了。
四、解决原master恢复后不同步的问题
一般master数据无法同步给slave的方案检查为如下:
1、网络通信问题,要保证互相ping通,即内网互通。
2、关闭防火墙,对外的端口开放(虚拟机中建议永久关闭防火墙云服务器需要保证内网互通)
3、统一所有密码,通过逐台检查机器以防某个节点被遗漏。