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

时间:2013-05-01 13:19:02

标签: java amazon-web-services nosql redis jedis

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

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

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

2 个答案:

答案 0 :(得分:9)

您可能想尝试Redis Sentinel来实现这一目标:

  

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

     
      
  • <强>监控即可。 Sentinel会不断检查您的主实例和从属实例是否按预期工作。

  •   
  • <强>通知即可。 Sentinel可以通过API通知系统管理员或其他计算机程序一个错误   受监控的Redis实例。

  •   
  • 自动故障转移。如果主服务器未按预期工作,Sentinel可以启动故障转移过程,其中从服务器被提升为主服务器   其他额外的从站被重新配置为使用新的主站,和   使用Redis服务器的应用程序通知了新地址   在连接时使用。

  •   

...或使用ZookeeperJedis_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();
    }
});

请参阅此presentation of Zookeeper + Redis

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

答案 1 :(得分:1)

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

如果有人有更好的见解,请告诉我们。