客户端实现高可用
- 获取所有sentinel的节点
- 找到可用节点
- 获取master地址
- 验证是否为master节点
- 如果master发生变化,sentinel发布消息,客户端订阅。
JedlisSentinelPool sentinelPool=new JedisSentinelPool(masterName,sentinelSet,poolConfig,timeout);
Jedis jedis=null;
try
jedis=redisSentinelPool.getresource();
catch(){}
finally{
jedis.close();//归还
}
sentinel故障转移
- master宕机时从salve节点中选择一个合适的节点作为新的master节点
- 然后重新组成1主多从的集群
- 对原来的master节点进行标识,如果复活服务于新的master节点成为slave节点.
- 合适的slave节点: 1.优先级高的优先成为master, 可以通过slave-priority配置值 2. 复制偏移量最大的slave节点 3. runId最小节点
常见问题
- 节点上下线:
seninel failover mastername
高可用读写分离
- JedisSentinelPool 是的实现
总结
RedisSentinel是Redis的高可用实现方案
故障发现, 故障自动转移/配置中心/客户端通知
RedisSentinel 是从2.8版本开始正式生产可用
尽量部署在不同机器上
ResiSentinel 中的Setnintl节点个数应该大于3,最好为奇数
通过三个定时任务实现了Sentinel节点对于主节点/从节点,七月Sentinel节点的监控.
Redis Sentinel在对接点做失败判断是分为主管下线和客观下线.