JedisSentinelPool 连接 master

本文深入探讨了Sentinel服务端及客户端的高可用机制,包括故障转移、通知机制及客户端接入流程。Sentinel通过发布订阅模式实现客户端与服务端间master状态变化的通知,确保客户端能及时获取并连接新的master,维持服务的连续性和稳定性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

sentinel 高可用

  • sentinel 的高可用是服务端的高可用;
  • 服务端的 master 挂了可以完成故障转移,客户端如果感知不到这个转移是没有作用的;

客户端高可用基本原理

  1. client 拿着 sentinel 节点集合 + materName,遍历 sentinel 集合,获取一个可用的 sentinel 节点;
  2. client 拿着 masterName 向获取到的可用的 sentinel 节点要 master 的地址;
  3. client 拿着 master 的地址验证一下其到底是不是 master;
  4. 如果 master 发生的转移,sentinel 是可以感知的,client 和 sentinel 之间的通知是通过发布订阅模式,client 订阅了 sentinel 的某个频道,频道中有 master 的变化,如果 master 发生了变化,就会在这个频道中发布一条消息,订阅的 client 就可以获取,在取新的 master 进行连接;

客户端接入流程

  1. sentinel 地址集合;
  2. materName;
  3. 不是代理模式,只有第一次连接的时候通过 sentinel,后面直接连 master 了;

JedisSentinelPool 示例

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisSentinelPool;

import java.util.HashSet;
import java.util.Set;

public class JedisSentinel {

    public static void main(String[] args) {

        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxTotal(10);
        config.setMaxWaitMillis(1000);

        String masterName = "mymaster";
        Set<String> sentinelSet = new HashSet<>();
        sentinelSet.add("127.0.0.1:26379");
        sentinelSet.add("127.0.0.1:26380");
        sentinelSet.add("127.0.0.1:26381");
        JedisSentinelPool pool = new JedisSentinelPool(masterName, sentinelSet, config);

        Jedis jedis = null;
        try {
            jedis = pool.getResource();
            String value = jedis.get("hello");
            System.out.println(value);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (jedis != null) {
                jedis.close();
            }
        }

    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值