Redis Sentinel 哨兵

Redis Sentinel 哨兵

主要作为哨兵,自动监听redis的运行状况,并在 redis 的主从发生故障时,完成自动的故障转移,以实现高可用

一. 基本架构及故障转移流程

  1. 基础架构
  1. 如下图,原 redis 主从之上,存在多个 sentinel 同时监听 redis 运行状况,客户端此时直接从 sentinel 获取连接信息。
  2. 可同时监控多套 master - slave,通过 master-name 作为区分标识

Redis Sentinel 哨兵_第1张图片
2. 故障转移自动恢复的流程

  • 1、多个sentinel发现并确认master出现故障
  • 2、选举出其中一个 sentinel 作为领导 leader
  • 3、选出其中一个 slave 成为新的 master,选取规则跟 slave-priority 有关,当优先级相同时,会选择偏移量最大(数据最完整)、runId最小的节点(启动时间最早)
  • 4、通知其余的 slave,成为新的 master 的 slave,复制规则和 parallel-syncs 参数有关
  • 5、通知客户端新的主从变化
  • 6、将原来的 master 配置为 slave,并对其保持关注,当其复活后,成为新的 slave

二、安装与配置

1、配置开启主从
2、配置开启 sentinel 监控主节点

1. 配置开启主从
  • 主节点配置如下
port 7000
daemonize yes
pidfile /var/run/redis-7000.pid
logfile "7000.log"
dir "/opt/soft/test/redis/data"
  • 两个从节点,端口分别为 7001,7002 配置如下
port ${port}
daemonize yes
pidfile /var/run/redis-${port}.pid
logfile "${port}.log"
dir "/opt/soft/test/redis/data"
slaveof 127.0.0.1 7000    
  • 三个 sentinel ,端口分别为 26379,26380,26381, 配置如下
    配置前可通过如下命令查看 sentinel 的默认配置

cat sentinel.conf | grep -v '#' | grep -v '^$'

port ${port}
daemonize yes
dir /opt/soft/test/redis/data/
logfile "${port}.log"

# 监听本机7000端口,超过2个sentinel都认为故障时即切换 master
sentinel monitor mymaster 127.0.0.1 7000 2 

# 超过30秒即认为发生故障
sentinel down-after-milliseconds mymaster 30000

sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
  • 此时对于三个 sentinel 分别执行启动并查看 redis 主从 及 sentinel 的状态

/usr/local/redis/bin/redis-sentinel /usr/local/redis/sentinel-26379.conf

redis-cli -p 26379 info

三、运行机制

1. 三个定时任务
  1. 每10秒每个 sentinel 对每个 master 和 slave 执行 info
  • 发现 slave 节点, 即配置时不需要配置 slave 节点
  • 确认主从关系
  1. 每2秒,每个 sentinel 通过 master 节点的 channel 交换信息(pub/sub)
  • 通过 sentinel:hello 频道交互
  • 以 master 作为平台,交互对节点的 “看法” 和自身信息
  1. 每1秒每个 sentinel 对其他的 sentinel 和 redis 执行 ping
  • 心跳检测过程,失败判断的依据
2. 领导者选举

原因:只有一个 sentinel 节点完成故障转移
选举:通过 sentinel is-masterdown-by-addr 命令都希望成为领导者
实现:raft 选举

四、手动进行节点运维

1. 可在线切换master到指定的实例上

sentinel failover masterName

你可能感兴趣的:(软件安装配置,java,redis,缓存)