官方文档:https://redis.io/topics/sentinel

一:Redis哨兵模式

Sentinel(哨兵)用于监控Redis集群中的Master状态的工具,是Redis高可用解决方法,哨兵可以监视一个或多个redis master服务,以及这些master服务的所有从服务;当某个master服务宕机后,会把这个master下的某个从服务升级为master来替代一宕机的master继续工作。

结论:

master挂了之后,由于哨兵监控,剩余slave会进行选举,选举后其中一个成为master,当原来的master恢复后,他会成为slave。

redis 哨兵没发现从节点 redis哨兵状态查看_Redis高可用

 

二:配置哨兵监控master和启动哨兵x 3【3台节点都要配置一样的哨兵】

1、配置哨兵监控master
   1.1  哨兵sentinel.conf所在路径:cd /home/software/redis-5.0.5/sentinel.conf

redis 哨兵没发现从节点 redis哨兵状态查看_Redis哨兵机制_02

拷贝sentinel.conf到 /usr/local/redis/ 下

cp sentinel.conf /usr/local/redis/

redis 哨兵没发现从节点 redis哨兵状态查看_Redis哨兵机制_03

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。

 

二:哨兵检查【哨兵高可用集群】

redis 哨兵没发现从节点 redis哨兵状态查看_ooc_04

 

三:故障转移【哨兵个数设置为奇数(3-5-7),才可以做到少数服从多数】

设置3个哨兵,整个分布式环境下网络环境复杂非常复杂,网络发生波动

主观下线:当只有1个哨兵可能检测到了master不存在(ping包无法到达master),对于其它哨兵是可以检测到master的,当只有1个哨兵认为master挂了,这是不做数的,这是一种主观臆断,还不能做故障转移。

因为我们设置的quorum=2,意思是在哨兵集群里面哨兵有多个。

真正(客观)下线:那么当有2个哨兵检测到了master挂掉了(ping包无法到达master),那么这个时候就可以断定master节点是真的挂掉了,随后就可以做故障转移了。

redis 哨兵没发现从节点 redis哨兵状态查看_redis 哨兵没发现从节点_05

 

 

四、解决原master恢复后不同步的问题

redis 哨兵没发现从节点 redis哨兵状态查看_ooc_06

一般master数据无法同步给slave的方案检查为如下:

1、网络通信问题,要保证互相ping通,即内网互通。

2、关闭防火墙,对外的端口开放(虚拟机中建议永久关闭防火墙云服务器需要保证内网互通)

3、统一所有密码,通过逐台检查机器以防某个节点被遗漏。