Redis / Jedis没有单点故障和自动故障转移

在一个简单的情况下,有3个服务器,1个主服务器和2个从服务器,没有分片。 是否有经过validation的解决方案,java和Jedis没有单点故障,并且会自动处理单个服务器,即主服务器或从服务器(自动故障转移)。 例如,在没有任何数据丢失的情况下促进主人和重置。

在我看来,它应该是一个已解决的问题,但我找不到任何代码,只是对可能的方法进行高级描述。

实际上是谁覆盖并在生产中工作?

您可能想尝试使用Redis Sentinel来实现:

Redis Sentinel是一个旨在帮助管理Redis实例的系统。 它执行以下三个任务:

  • 监控 。 Sentinel会不断检查主实例和从属实例是否按预期工作。

  • 通知 。 Sentinel可以通过API通知系统管理员或其他计算机程序,其中一个受监控的Redis实例出现问题。

  • 自动故障转移 。 如果主服务器未按预期工作,Sentinel可以启动故障转移过程,其中从服务器升级为主服务器,其他其他服务器重新配置为使用新主服务器,并且使用Redis服务器的应用程序通知有关新服务器的地址。连接。

…或使用Zookeeper和Jedis_failover等外部解决方案:

JedisPool pool = new JedisPoolBuilder() .withFailoverConfiguration( "localhost:2838", // ZooKeeper cluster URL Arrays.asList( // List of redis servers new HostConfiguration("localhost", 7000), new HostConfiguration("localhost", 7001))) .build(); pool.withJedis(new JedisFunction() { @Override public void execute(final JedisActions jedis) throws Exception { jedis.ping(); } }); 

请参阅Zookeeper + Redis的演示文稿 。

[更新] …或使用Jedis + Sentinel的纯Java解决方案是使用处理Redis Sentinel事件的包装器,请参阅SentinelBasedJedisPoolWrapper 。

目前使用Jedis 2.4.2(来自git),我没有找到基于redis或sentinel进行故障转移的方法。 我希望有办法。 我正在考虑现在探索zookeeper选项。 redis集群在性能和稳定性方面表现良好,但仍处于测试阶段。

如果有人有更好的见解让我们知道。