哨兵是什么?
sentinel哨兵是特殊的redis服务,不提供读写服务,主要用来监控redis实例节点。
哨兵模式架构中,client端在首次访问Redis服务时,实际上访问的是哨兵(sentinel),sentinel会将自己监控Redis实例的master节点信息返回给client端,client后续就会直接访问Redis的master节点,并不是每次都从哨兵处获取master节点的信息。
sentinel会实时监控所有的Redis实例是否可用,当监控到Redis的master节点发生故障后,会从剩余的slave节点中选举出一个作为新的master节点提供服务,并将新master节点的地址通知给client端,其他的slave节点会通过slaveof命令重新挂载到新的master节点下。当原来的master节点恢复后,也会作为slave节点挂在新的master节点下
个人理解哨兵就是监控redis主从集群的一种架构,监控的同时保证客户端链接最新的主redis节点
哨兵架构搭建
首先大家redis主从集群,可以参考redis docker搭建主从复制,我是搭建了1主,2从节点
doker 启动哨兵 最少3台
docker run --name redis-sentinel-16379 -p 16379:16379 --restart=always -v /home/tools/redis/sentinel/16379/data:/data -v /home/tools/redis/sentinel/16379/sentinel.conf:/etc/sentinel.conf -d redis:6.0 redis-sentinel /etc/sentinel.conf
docker run --name redis-sentinel-16380 -p 16380:16380 --restart=always -v /home/tools/redis/sentinel/16380/data:/data -v /home/tools/redis/sentinel/16380/sentinel.conf:/etc/sentinel.conf -d redis:6.0 redis-sentinel /etc/sentinel.conf
docker run --name redis-sentinel-16381 -p 16381:16381 --restart=always -v /home/tools/redis/sentinel/16381/data:/data -v /home/tools/redis/sentinel/16381/sentinel.conf:/etc/sentinel.conf -d redis:6.0 redis-sentinel /etc/sentinel.conf
复制相同的sentinel.conf配置文件,修改对应的端口即可参考如下
#不限制ip
bind 0.0.0.0
# 让sentinel服务后台运⾏
#daemonize yes
# 禁止保护模式
#protected-mode no
# sentinel monitor <master-redis-name> <master-redis-ip> <master-redis-port> <quorum>
# 配置监听的主服务器,master-redis-name代表服务器的名称,master-redis-ip代表监控的主redis服务,master-redis-port代表端⼝
# quorum是一个数字,指明当有多少个sentinel认为一个master失效时(值一般为:sentinel总数/2 + 1),master才算真正失效
sentinel monitor mymaster 192.168.0.134 6381 2
#哨兵端口号 16379 16380 16381
port 16379
# sentinel auth-pass定义服务的密码,mymaster是服务名称,123456是Redis服务器密码
# sentinel auth-pass mymaster 123456
#超过5秒master还没有连接上,则认为master已经停⽌
#sentinel down-after-milliseconds mymaster 5000
#如果该时间内没完成failover操作,则认为本次failover失败
#sentinel failover-timeout mymaster 180000
#sentinel parallel-syncs mymaster 1
logfile "sentinel.log"
进入哨兵容器执行 redis-cli -p 16379 查看哨兵信息 info