Sentinel(哨岗、哨兵)是Redis的高可用性(high availability)解决方案:由一个或多个Sentinel实例(instance)组成的Sentinel系统(system)可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器,然后由新的主服务器代替已下线的主服务器继续处理命令请求。Redis Sentinel 是官方推荐的高可用性解决方案。它不会因为节点宕机而导致服务不可用,同时,它可以作为监控管理工具,可以提供节点监控、通知、自动故障恢复和客户端配置发现服务等,即使出现了故障,也能很快知道,并进行修复。
-
节点配置信息
# 主:ip:6379|从:ip:6380,ip:6381|sentinel:ip:26379,ip:26380,ip:26381
-
Redis主从配置
# master docker run --name redis-master --net=host -v /home/redis/data6379:/data -d redis:7.0 redis-server --port 6379 # slave1 docker run --name redis6380 --net=host -v /home/redis/data6380:/data -d redis:7.0 redis-server --slaveof 192.168.4.123 6379 --port 6380 # slave2 docker run --name redis6381 --net=host -v /home/redis/data6381:/data -d redis:7.0 redis-server --slaveof 192.168.4.123 6379 --port 6381
-
Sentinel集群配置
# 新建文件 # sentinel-26379.conf protected-mode no bind 0.0.0.0 port 26379 dir "/home/redis_sentinel/log" logfile "/home/redis_sentinel/log/26379.log" daemonize no sentinel monitor redis-master 192.168.4.123 6379 2 sentinel down-after-milliseconds redis-master 5000 sentinel failover-timeout redis-master 180000 sentinel parallel-syncs redis-master 1 # sentinel-26380.conf protected-mode no bind 0.0.0.0 port 26380 dir "/home/redis_sentinel/log" logfile "/home/redis_sentinel/log/26380.log" daemonize no sentinel monitor redis-master 192.168.4.123 6379 2 sentinel down-after-milliseconds redis-master 5000 sentinel failover-timeout redis-master 180000 sentinel parallel-syncs redis-master 1 # sentinel-26381.conf protected-mode no bind 0.0.0.0 port 26381 dir "/home/redis_sentinel/log" logfile "/home/redis_sentinel/log/26381.log" daemonize no sentinel monitor redis-master 192.168.4.123 6379 2 sentinel down-after-milliseconds redis-master 5000 sentinel failover-timeout redis-master 180000 sentinel parallel-syncs redis-master 1
# 启动命令 docker run -p 26379:26379 --restart=always --name sentinel-26379 -v /home/redis_sentinel/sentinel-26379.conf:/etc/redis/sentinel.conf -v /home/redis_sentinel/data/sentinel-26379-data:/data -v /home/redis_sentinel/log:/home/redis_sentinel/log -d redis:7.0 redis-sentinel /etc/redis/sentinel.conf --appendonly yes docker run -p 26380:26380 --restart=always --name sentinel-26380 -v /home/redis_sentinel/sentinel-26380.conf:/etc/redis/sentinel.conf -v /home/redis_sentinel/data/sentinel-26380-data:/data -v /home/redis_sentinel/log:/home/redis_sentinel/log -d redis:7.0 redis-sentinel /etc/redis/sentinel.conf --appendonly yes docker run -p 26381:26381 --restart=always --name sentinel-26381 -v /home/redis_sentinel/sentinel-26381.conf:/etc/redis/sentinel.conf -v /home/redis_sentinel/data/sentinel-26381-data:/data -v /home/redis_sentinel/log:/home/redis_sentinel/log -d redis:7.0 redis-sentinel /etc/redis/sentinel.conf --appendonly yes
-
参数说明
# 容器内的root拥有真正root权限,否则容器内root只是外部普通用户权限 --privileged=true # 映射配置文件 -v /home/redis_sentinel/sentinel-26379.conf:/etc/redis/sentinel.conf # 映射数据目录 -v /home/redis_sentinel/data/sentinel-26379-data:/data # 指定配置文件启动redis-sentinel进程 redis-sentinel /etc/redis/sentinel.conf # 开启数据持久化 --appendonly yes
-
Redis命令
# 进入容器 docker exec -it 容器名称 /bin/bash # redis客户端 redis-cli -p port # 查看主从配置 info replication # 从其中某一个可用的连接地址拿到所有相关的集群sentinel信息,使用的redis管道命令是 sentinel sentinels redis-master # 查看master信息 sentinel master redis-master # 查看slaves信息 sentinel slaves redis-master
-
错误信息
# 这里保错的原因是因为挂载的配置路径没有写的权限,执行chmod 777 -R 加目录即可 1:X 08 Jun 2023 02:19:32.579 # Could not rename tmp config file (Device or resource busy) 1:X 08 Jun 2023 02:19:32.580 # WARNING: Sentinel was not able to save the new configuration on disk!!!: Device or resource busy