redis 哨兵(sentinel)
2017-07-28 17:01
337 查看
redis哨兵
哨兵自动故障转移自动通知应用最新master信息
无需担心,master挂了,程序不需要修改IP啥的,由哨兵自动完成
修改sentinel.conf
protected-mode no # 默认只允许本机访问sentinel服务
工具类
package redis.client.sentinel; import org.apache.commons.pool2.impl.GenericObjectPoolConfig; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPoolConfig; import redis.clients.jedis.JedisSentinelPool; import java.util.HashSet; import java.util.Map; import java.util.Set; /** * Created by dailin on 2017/7/27. */ public class Redis_Sentinel { public static JedisSentinelPool sentinelPool = null; private static JedisPoolConfig jedisPoolConfig = null; private Redis_Sentinel(){} private static void initSentinelPool(Set<String> sentinels){ synchronized (Redis_Sentinel.class){ if (sentinelPool == null) { GenericObjectPoolConfig gPoolConfig=new GenericObjectPoolConfig(); gPoolConfig.setMaxIdle(10); gPoolConfig.setMaxTotal(10); gPoolConfig.setMinIdle(1); gPoolConfig.setMaxWaitMillis(10); gPoolConfig.setJmxEnabled(true); sentinelPool = new JedisSentinelPool("mymaster",sentinels,gPoolConfig); } } } public static Jedis getJedis(Set<String> sentinels){ initSentinelPool(sentinels); return sentinelPool.getResource(); } public static void returnJedis(Jedis jedis){ sentinelPool.returnResource(jedis); } }
测试类
import org.junit.Before; import org.junit.Test; import redis.client.sentinel.Redis_Sentinel; import redis.clients.jedis.HostAndPort; import redis.clients.jedis.Jedis; import java.util.HashSet; import java.util.List; import java.util.Set; /** * Created by dailin on 2017/7/27. */ public class TestSentinel { Set<String> sentinel = null; @Before public void init() { sentinel = new HashSet<String>(); sentinel.add("192.168.56.130:26379"); sentinel.add("192.168.56.131:26379"); } @Test public void testSentinel(){ while(true) { try{ Jedis jedis = Redis_Sentinel.getJedis(sentinel); String result = jedis.get("dai"); HostAndPort currentHostMaster = Redis_Sentinel.sentinelPool.getCurrentHostMaster(); System.out.println("master:"+currentHostMaster.getHost()+"-port:"+currentHostMaster.getPort()); Redis_Sentinel.returnJedis(jedis); System.out.println(result); }catch (Exception e){ e.printStackTrace(); } } } }
这个测试类会一直访问redis,当master被停止后,程序抛出异常,过了一小会新的master被选出,程序又正常执行,所以使用jedis连接redis时,只需要传入sentinel的地址即可,自动在redis的master宕机后,自动更新连接新master信息。
相关文章推荐
- Redis-Sentinel Redis的哨兵模式
- 结合redis设计与实现的redis源码学习-21-哨兵(Sentinel.c)
- Laravel 5的redis哨兵(sentinel)支持
- redis哨兵(sentinel)原理
- redis 从sentinel的日志文件分析3个哨兵的master-slave切换实验
- redis学习笔记---redis的哨兵Sentinel
- Redis:Sentinel哨兵
- 【Redis】的哨兵(sentinel)详解
- 搭建redis-sentinel(哨兵机制)集群
- redis的哨兵(sentinel)配置和python程序应用示例
- spring配置单Redis,Sentinel 哨兵模式,Redis Cluster集群,Redis Sharding集群
- 基于sentinel(哨兵)实现redis集群的管理
- Sentinel Redis哨兵模式
- 基于Sentinel(哨兵)搭建实现Redis高可用集群
- 基于哨兵(Sentinel)模式搭建Redis集群搭建
- (转)Redis(四)哨兵_sentinel
- Redis高可用集群-哨兵模式(Redis-Sentinel)搭建配置教程【Windows环境】
- Redis的哨兵模式(Sentinel)
- redis哨兵(sentinel)原理
- 基于keepalived、redis sentinel的多实例redis集群【1】---路由以及哨兵配置