主从模式的弊端就是不具备高可用性,当master挂掉以后,Redis将不能再对外提供写入操作,因此sentinel应运而生。
Redis Sentinel是Redis官方提供的集群管理工具,主要有三大功能:
- 监控:能持续监控Redis的主从实例是否正常工作;
- 通知:当被监控的Redis实例出问题时,能通过API通知系统管理员或其他程序;
- 自动故障恢复:如果主实例无法正常工作,Sentinel将启动故障恢复机制把一个从实例提升为主实例,其他的从实例将会被重新配置到新的主实例,且应用程序会得到一个更换新地址的通知。
- 配置提供:因为sentinel保存着Redis主从的信息,所以Redis可以从sentinel那获得所有的配置信息。
Redis Sentinel是一个分布式系统,可以部署多个Sentinel实例来监控同一组Redis实例,当然只要有一个Sentinel实例就可以完成上面的功能,当然一个sentinel实例也是不具备高可用性,所以一般也会搭建sentinel集群。
一、Redis sentinel模式搭建
https://redis.io/topics/sentinel讲的很详细了,照做即可,这还有中文版的,不过版本低了一点,依然可以用,地址为:http://doc.redisfans.com/topic/sentinel.html。
二、Redis sentinel的Java客户端连接
sentinel就可以满足一般生产的需求了,所以开发过程中可以使用:
Set<String> sentinels = new HashSet<>( Arrays.asList("ip:port", "ip:port", "ip:port")); GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig(); //此处对poolConfig进行设置 JedisSentinelPool pool = new JedisSentinelPool("yiwangzhibujian", sentinels, poolConfig); Jedis jedis = pool.getResource(); //使用jedis进行操作 //使用完直接close即可,会自动判断,若单个连接则关闭,在连接池内则归还 jedis.close();
这样就可以了。