10.Redis哨兵架构

概述

sentinel哨兵是特殊的redis服务,不提供读写服务,主要用来监控redis实例节点。如果redis的主节点挂掉,利用哨兵机制,可以从剩下的从节点中选出主节点,弥补了上一节讲的主从复制架构不能自动选举主节点的难处。
有了sentinel哨兵之后,客户端第一次不会主动去找redis的主节点,而是去访问哨兵主节点的ip与端口,之后客户端就直接访问redis的主节点。
当redis的主节点发生变化,哨兵会第一时间感知到,并且将新的redis 主节点通知给client端。
redis的主目录下有sentinel哨兵的配置文件,src目录下有哨兵的启动服务。

在这里插入图片描述

redis哨兵架构搭配步骤

1.
#复制一份sentinel.conf文件
cp sentinel.conf sentinel_26379.conf 

2.
#将相关配置修改为如下值:
 	port 26379 
 	daemonize yes 
 	pidfile "/var/run/redis‐sentinel_26379.pid" 
 	logfile "26379.log" 
	dir "/usr/local/redis‐5.0.2/data" 
	# sentinel monitor <master‐name> <ip> <redis‐port> <quorum> 
	# quorum是一个数字,指明当有多少个sentinel认为一个master失效时(值一般为:sentinel总数/2 + 1),master才算真正失效
	sentinel monitor mymaster 192.168.20.136 6379 2  
	
3.	
#启动sentinel哨兵实例 
src/redis‐sentinel sentinel‐26379.conf

4.
#查看sentinel的info信息 
src/redis‐cli ‐p 26379 
127.0.0.1:26379>info 
可以看到Sentinel的info里已经识别出了redis的主从

5.可以自己再配置两个sentinel,端口26380和26381,注意上述配置文件里的对应数字都要修改

搭建结果

在这里插入图片描述
一个主节点,两个从节点,三个哨兵

哨兵的Jedis连接代码

public class JedisSentinelTest {
 
    public static void main(String[] args) {
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        jedisPoolConfig.setMaxTotal(20);
        jedisPoolConfig.setMaxIdle(10);
        jedisPoolConfig.setMinIdle(5);
 
        Set<String> sentinels = new HashSet<>();
        sentinels.add(new HostAndPort("192.168.20.136", 26379).toString());
        sentinels.add(new HostAndPort("192.168.20.136", 26380).toString());
        sentinels.add(new HostAndPort("192.168.20.136", 26381).toString());
 		 //JedisSentinelPool其实本质跟JedisPool类似,都是与redis主节点建立的连接池
 		 //JedisSentinelPool并不是说与sentinel建立的连接池,而是通过sentinel发现redis主节点并与其建立连接 
 		 //masterName需要与哨兵的配置文件中配置的主节点名称一致
        String masterName = "mymaster";
        JedisSentinelPool jedisSentinelPool = new JedisSentinelPool(masterName, sentinels,
                jedisPoolConfig, 3000, null);
 		Jedis jedis = null;
 		try {
        jedis = jedisSentinelPool.getResource();
        System.out.println(jedis.set("sentinel", "zhangsan")); 
        System.out.println(jedis.get("sentinel"));
        } catch (Exception e) {
  		e.printStackTrace();
        } finally {
        //注意这里不是关闭连接,在JedisPool模式下,Jedis会被归还给资源池。
        if(null != jedis)
            jedis.close();
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值