Sentinel(哨岗、哨兵)是Redis的高可用性(high availability)解决方案:由一个或多个Sentinel实例(instance)组成的Sentinel系统(system)可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器,然后由新的主服务器代替已下线的主服务器继续处理命令请求。
Redis Sentinel 是官方推荐的高可用性解决方案。它不会因为节点宕机而导致服务不可用,同时,它可以作为监控管理工具,可以提供节点监控、通知、自动故障恢复和客户端配置发现服务等,即使出现了故障,也能很快知道,并进行修复。
1主2从3哨兵模式
环境搭建:
1、拉取docker镜像
2、本地ip为192.168.8.145
3、各Redis的ip和端口如下:
主:ip:6379
从:ip:6380,ip:6381
sentinel:ip:26379,ip:26380,ip:26381
二、部署主从redis
docker run --name redis6379 --net=host -v /home/redis/data6379:/data -d redis:latest redis-server --port 6379
docker run --name redis6380 --net=host -v /home/redis/data6380:/data -d redis:latest redis-server --slaveof 192.168.2.139 6379 --port 6380
docker run --name redis6381 --net=host -v /home/redis/data6381:/data -d redis:latest redis-server --slaveof 192.168.2.139 6379 --port 6381
命令说明:
-p 6379:6379 : 将容器的6379端口映射到主机的6379端口
-v /home/redis/data6379:/data : 将主机中目录/home/redis/data6379:/data 挂载到容器的/data
--name redis6381: 给出容器名称
-d: 后台运行
redis:latest: 镜像名称
执行命名查看redis 同步情况:
docker logs -f redis6379
docker logs -f redis6380
docker logs -f redis6381
三、部署sentinel
新建文件 sentinel-26379.conf、sentinel-26380.conf、sentinel-26381.conf:
protected-mode no
bind 0.0.0.0
port 26379
dir "/home/redis_sentinel/log"
logfile "/home/redis_sentinel/log/26379.log"
daemonize yes
sentinel monitor mymaster 192.168.8.145 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster 1
protected-mode no
bind 0.0.0.0
port 26380
dir "/home/redis_sentinel/log"
logfile "/home/redis_sentinel/log/26380.log"
daemonize yes
sentinel monitor mymaster 192.168.8.145 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster 1
protected-mode no
bind 0.0.0.0
port 26381
dir "/home/redis_sentinel/log"
logfile "/home/redis_sentinel/log/26381.log"
daemonize yes
sentinel monitor mymaster 192.168.8.145 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster 1
配置说明:
logfile "sentinel.log":输出日志目录
sentinel monitor mymaster 192.168.8.145 6379 2:
哨兵监控的主服务器名称为mymaster,
ip为192.168.8.145,端口为6379,
将这个主服务器标记为失效至少需要2个哨兵进程的同意
执行命令启动3台sentinel
docker run -p 26379:26379 --restart=always --name sentinel-26379 -v /home/redis_sentinel/sentinel/sentinel-26379.conf:/etc/redis/sentinel.conf -v /home/redis_sentinel/sentinel/sentinel-26379-data:/data -v /home/redis_sentinel/log:/home/redis_sentinel/log -d redis redis-sentinel /etc/redis/sentinel.conf
docker run -p 26380:26380 --restart=always --name sentinel-26380 -v /home/redis_sentinel/sentinel/sentinel-26380.conf:/etc/redis/sentinel.conf -v /home/redis_sentinel/sentinel/sentinel-26380-data:/data -v /home/redis_sentinel/log:/home/redis_sentinel/log -d redis redis-sentinel /etc/redis/sentinel.conf
docker run -p 26381:26381 --restart=always --name sentinel-26381 -v /home/redis_sentinel/sentinel/sentinel-26381.conf:/etc/redis/sentinel.conf -v /home/redis_sentinel/sentinel/sentinel-26381-data:/data -v /home/redis_sentinel/log:/home/redis_sentinel/log -d redis redis-sentinel /etc/redis/sentinel.conf
命令说明:
-p 26379:26379 : 将容器的26379端口映射到主机的26379端口
-v /app/redis/data:/data : 将主机中目录/app/redis/data挂载到容器的/data
--name sentinel: 给出容器名称
-d: 后台运行
redis:latest: 镜像名称
redis-sentinel sentinel.conf: sentinel的启动命令,指定配置文件
执行docker logs -f sentinel-26379 查看启动情况
查看sentinel配置文件
启动完成后查看sentinel配置文件,sentinel会将发现的redis节点和sentinel节点写入到配置文件中
Spring Boot 2 整合Redis哨兵模式
Spring Boot 2 整合Redis哨兵模式除了配置稍有差异,其它与整合单实例模式类似,配置示例为:
spring:
redis:
password: passw0rd
timeout: 5000
sentinel:
master: mymaster
nodes: 192.168.40.201:26379,192.168.40.201:36379,192.168.40.201:46379 # 哨兵的IP:Port列表
jedis: # 或lettuce
pool:
max-active: 8
max-wait: -1
max-idle: 8
min-idle: 0