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
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐