Redis集群(九):Redis Sharding集群Redis节点主从切换后客户端自动从新链接

上文介绍了Redis Sharding集群的使用, 点击阅读
本文介绍当某个Redis节点的Master节点发生问题,发生主从切换时,Jedis怎样自动重连新的Master节点

​1、步骤以下:
一、配置三组主从结构的redis集群, 参考

二、设置哨兵(某个master节点):哨兵的做用主要是监控master节点的状态,当master节点挂掉时经过选举机制选出一个slave节点成为一个新的master,哨兵的使用可 参考
   sentinel.conf配置说明,下面的mymaster很重要,表示是master节点的名称,jedis指定master使用该名称,而不是IP+端口
   sentinel monitor mymaster 127.0.0.1 6379 1

三、使用ShardedJedisSentinelPool链接池
   a) 该类是一个开源项目,地址为: https://github.com/warmbreeze/sharded-jedis-sentinel-pool
   b)  ShardedJedisSentinelPool经过MasterListener线程(有几个哨兵就有几个线程) 监控哨兵的状态,若是对应的master节点发生问题,如主从切换,则经过redis的pub/sub该监听器线程
   c) MasterListener的run方法调用initPool重置链接池,即链接新的master机器
   d) 调用pool.getResource() 发生主从切换,当次redis操做使用新的master机器
   e) 调用 pool.getResource()发生主从切换,当次redis操做无效并抛出SocketException,下次redis恢复正常

2、示例代码:因为机器有限,只配置了一台机器,多台原理同样
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class ShardedSentinelTest {
 
     public static void main(String[] args) {
         GenericObjectPoolConfig config = new GenericObjectPoolConfig();
 
         List<String> masters = new ArrayList<String>();
         masters.add( "mymaster" );
 
 
         Set<String> sentinels = new HashSet<String>();
         sentinels.add( "xxxxxx:29111" );
 
 
         ShardedJedisSentinelPool pool = new ShardedJedisSentinelPool(masters, sentinels, config, 60000 );
         ShardedJedis jedis = pool.getResource();
 
         for ( int i = 1 ; i < 10000 ; i++) {
             String val = jedis.set( "ss" + i, "vv" + i);
             System.out.println(jedis.get( "ss" + i));
         }
         jedis.close();
         pool.destroy();
     }
}

3、参考文档
  1. http://www.tuicool.com/articles/naeEJbv  基于Redis Sentinel的Redis集群(主从&Sharding)高可用方案
  2. http://blog.csdn.net/dc_726/article/details/48084373 Jedis分片Sentinel链接池实验
相关文章
相关标签/搜索