Redis哨兵模式下,java客户端连接的是哨兵还是Redis的实例?Redis实例Master挂了怎么办?哨兵实例挂了怎么办?
Redis哨兵模式下,java客户端连接的是哨兵还是Redis的实例?Redis实例Master挂了怎么办?哨兵实例挂了怎么办?Redis客户端每次都从哨兵拿master的信息吗?
问题,一个一个解决。
java客户端连接的是哨兵还是Redis的实例?
连接的是哨兵
Redis实例Master挂了怎么办?
Master挂了,sentinel会进行提议,选举出一个sentinel,让选举出来的sentinel去选举新的master。
选举sentinel代表是根据谁先提议,得票数的规则选举。
选举master是根据在线的、响应快的、偏移量大的,runId来决定。
哨兵实例挂了怎么办?
此刻选举不出来master,但是redis客户端有缓存,还可以继续用缓存中的master。
Redis客户端每次都从哨兵拿master的信息吗?
sentinel哨兵是特殊的redis服务,不提供读写服务,主要用来监控redis实例节点。
哨兵架构下client端第一次从哨兵找出redis的主节点,后续就直接访问redis的主节点,不会每次都通过 sentinel代理访问redis的主节点,当redis的主节点发生变化,哨兵会第一时间感知到,并且将新的redis 主节点通知给client端(这里面redis的client端一般都实现了订阅功能,订阅sentinel发布的节点变动消息)