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

Der*_*gan 7 java amazon-web-services nosql redis jedis

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

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

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

FGR*_*eau 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();
    }
});
Run Code Online (Sandbox Code Playgroud)

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

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

  • 或者,您可以在发生故障转移时运行脚本,并且脚本应该使用新的主地址以某种方式重新配置客户端. (4认同)