• 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连接池实验
  • 相关阅读:
    hdu 2896 AC自动机模版题
    快递公司送货员送到货时,打电话通知客户来取的改进
    Scala数据类型中的Symbol(符号文本)
    hdu 3065 AC自动机模版题
    Oracle DB 复制数据库
    Java打包生成exe(使用exe4j和inno setup)
    C#的Lambda表达式嵌套例子
    WPF设置控件获得焦点FocusManager
    Winform给TextBox设置默认值(获取焦点后默认值消失)
    使用signtool.exe来验证程序的数字签名是否成功(命令行)
  • 原文地址:https://www.cnblogs.com/gossip/p/6208339.html
Copyright © 2020-2023  润新知