Redis Sentinel的主要功能
Sentinel 的主要功能包括 主节点存活检测、主从运行情况检测、自动故障转移 (failover)、主从切换。Redis 的 Sentinel 最小配置是 一主一从。
Redis 的 Sentinel 系统可以用来管理多个 Redis 服务器,该系统可以执行以下四个任务:
监控
Sentinel 会不断的检查 主服务器 和 从服务器 是否正常运行。
通知
当被监控的某个 Redis 服务器出现问题,Sentinel 通过 API 脚本 向 管理员 或者其他的 应用程序 发送通知。
自动故障转移
当 主节点 不能正常工作时,Sentinel 会开始一次 自动的 故障转移操作,它会将与 失效主节点 是 主从关系 的其中一个 从节点 升级为新的 主节点,并且将其他的 从节点 指向 新的主节点。
配置提供者
在 Redis Sentinel 模式下,客户端应用 在初始化时连接的是 Sentinel 节点集合,从中获取 主节点 的信息。
主观下线和客观下线
默认情况下,每个 Sentinel 节点会以 每秒一次 的频率对 Redis 节点和 其它 的 Sentinel 节点发送 PING 命令,并通过节点的 回复 来判断节点是否在线。
主观下线
主观下线 适用于所有 主节点 和 从节点。如果在 down-after-milliseconds 毫秒内,Sentinel 没有收到 目标节点 的有效回复,则会判定 该节点 为 主观下线。
客观下线
客观下线 只适用于 主节点。如果 主节点 出现故障,Sentinel 节点会通过 sentinel is-master-down-by-addr 命令,向其它 Sentinel 节点询问对该节点的 状态判断。如果超过 <quorum> 个数的节点判定 主节点 不可达,则该 Sentinel 节点会判断 主节点 为 客观下线。
架构图如下
master 、slave配置文件内容
cat 6380/redis-6380.conf
port 6380
logfile "./redis-6380"
#守护进程模式
daemonize yes
cat 6381/redis-6381.conf
port 6381
logfile "./redis-6381"
daemonize yes
replicaof 127.0.0.1 6380
sentinel 配置文件内容
cat 26379/redis-sentinel.conf
port 26379
# 守护进程模式
daemonize yes
pidfile /var/run/redis-sentinel.pid
logfile /var/log/redis/sentinel.log
dir /tmp
# 哨兵监控这个master,在至少quorum个哨兵实例都认为master down后把master标记为odown
# (objective down客观down;相对应的存在sdown,subjective down,主观down)状态。
# slaves是自动发现,所以你没必要明确指定slaves。
sentinel monitor mymaster 127.0.0.1 6379 2
# master或slave多长时间(默认30秒)不能使用后标记为s_down状态。
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
# 若sentinel在该配置值内未能完成failover操作(即故障时master/slave自动切换),则认为本次failover失败。
sentinel failover-timeout mymaster 180000
sentinel deny-scripts-reconfig yes
cat 26380/redis-sentinel.conf
port 26380
daemonize yes
pidfile /var/run/redis-sentinel.pid
logfile /var/log/redis/sentinel.log
dir /tmp
sentinel monitor mymaster 127.0.0.1 6380 2
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
sentinel deny-scripts-reconfig yes
cat 26381/redis-sentinel.conf
port 26381
daemonize yes
pidfile /var/run/redis-sentinel.pid
logfile /var/log/redis/sentinel.log
dir /tmp
sentinel monitor mymaster 127.0.0.1 6380 2
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
sentinel deny-scripts-reconfig yes
启动各服务
redis-server 6380/redis-6380.conf
redis-server 6381/redis-6381.conf
redis-server 26379/redis-sentinel.conf --sentinel
redis-server 26380/redis-sentinel.conf --sentinel
redis-server 26381/redis-sentinel.conf --sentinel
#启动后配置文件会被修改
验证集群状态
#连接到sentinel节点
redis-cli -h 127.0.0.1 -p 26381
#查询主节点状态
127.0.0.1:26381> SENTINEL get-master-addr-by-name mymaster
1) "127.0.0.1"
2) "6380"
#查询哨兵状态
127.0.0.1:26381> info sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=127.0.0.1:6380,slaves=1,sentinels=3
#模拟故障 关闭主节点进程
#再次查询
127.0.0.1:26381> SENTINEL get-master-addr-by-name mymaster
1) "127.0.0.1"
2) "6381"
#成功切换
#验证成功
参考资料
https://www.cnblogs.com/bingshu/p/9776610.html 博客
https://redis.io/topics/sentinel 官网资料