小编典典

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

redis

在简单情况下,如果3台服务器具有1个主服务器和2个从属服务器而没有分片。是否有使用Java和Jedis的经过验证的解决方案,该解决方案没有单点故障,并且将自动处理单个服务器(无论是主服务器还是从服务器)(自动故障转移)。例如,提升主机并在故障后重置,而不会丢失任何数据。

在我看来,这似乎应该是一个已解决的问题,但是我找不到关于它的任何代码,而仅是对实现此方法的高级描述。

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


阅读 431

收藏
2020-06-20

共1个答案

小编典典

您可能想尝试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();
    }
});

请参阅Zookeeper + Redis的演示文稿

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

2020-06-20