redis 官网文档 sentinel 简单翻译 && 简单总结QA
笔记只是笔记,适当做总结可以提前提炼出将来可能在实践中遇到的问题。
sentinel简单Q-A:
Q1:sentinel有什么特点?
A1:
主从模式是redis高可用的一个基本模式,但是没有自动故障转移,sentinel实现了自动故障转移;
sentinel可以monitor多套master-replica集群,以master-name区分;
sentinel可以发现其他的sentinel,还可以通过monitor的master节点来发现它的replicas节点列表,这种自动发现功能是通过订阅了“__sentinel:hello”通道实现的,机理是每个sentinel往通道上发布自己信息,监控同一个master的sentinel可以收到其他sentinel发布的信息。
Q2:使用sentinel后客户端有什么改变?
A2:
使用sentinel架构后,客户端不再处理繁多的redis master和replica节点的地址信息,只需要和sentinel进行连接就可以获取到相应的 master-replica 集群的地址信息。这在 redis 节点变更时能做到客户端层面透明无“感知”。
虽然通过Q1中的部分内容我们知道 sentinel可以发现其他的sentinel,但是出于需要在客户端高可用的考虑,仍应该填写两个或两个以上的sentinel节点信息(从厮大的《深入理解Kafka核心设计与实践原理》学的,想学 kafka 的童鞋们推荐入手一本),避免只填一个节点导致单点故障。代码示例如下:
(注意:不管用什么redis客户端,需要你用的redis客户端支持sentinel API)
1 public static void testSentinel() throws Exception { 2 String masterName = "mymaster"; 3 Set<String> sentinels = new HashSet<>(); 4 sentinels.add("192.168.92.100:26379"); 5 sentinels.add("192.168.92.101:26379"); 6 7 JedisSentinelPool pool = new JedisSentinelPool(masterName, sentinels); 8 Jedis jedis = pool.getResource(); 9 jedis.set("key1", "value1"); 10 pool.close(); 11 }