zoukankan      html  css  js  c++  java
  • Redis集群(九):Redis Sharding集群Redis节点主从切换后客户端自动重新连接

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

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

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

    3、使用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恢复正常

    二、示例代码:由于机器有限,只配置了一台机器,多台原理一样
    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();
        }
    }

    三、参考文档
    1. http://www.tuicool.com/articles/naeEJbv  基于Redis Sentinel的Redis集群(主从&Sharding)高可用方案
    2. http://blog.csdn.net/dc_726/article/details/48084373 Jedis分片Sentinel连接池实验
  • 相关阅读:
    BottomNavigationView3个项以上不显示文字的问题
    ViewPager中height=wrap_content无效,ScrollView里边用ListView显示不全解决办法
    Gson解析
    Parcelable Android SDK提供,基于内存,读写高于硬盘
    Serializable序列化 && 坑
    OpenStack中添加Floating IP
    Hadoop
    Redis
    ELK
    OpenStack
  • 原文地址:https://www.cnblogs.com/gossip/p/6208339.html
Copyright © 2011-2022 走看看