【问题标题】:Redis/Jedis no single point of failure and automated failoverRedis/Jedis 没有单点故障和自动故障转移
【发布时间】:2013-04-25 11:51:21
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    • 自动故障转移。如果 master 没有按预期工作,Sentinel 可以启动故障转移过程,将 slave 提升为 master, 其他额外的从站被重新配置为使用新的主站,并且 使用 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

    【讨论】:

    • 似乎没有一点我可以与哨兵一起使用的 java 代码。我得到了最重要的想法,但人们现在在生产中实际使用的是什么文字代码?
    • 管理 Redis 的自动故障转移没有 Sentinel 将始终需要外部软件。但是,您是否看过 FailSafe 实施? github.com/xetorthio/jedis/pull/386 它不如真正的故障转移,但如果您正在寻找快速解决方案,它可能是一个很好的起点
    • "但是人们现在在生产环境中实际使用 as 在文字代码中的是什么?" Zookeeper 和现在的 Redis Sentinel,主要是。
    • 这是您目前使用 Sentinel 和 Jedis 所需的代码:github.com/hamsterready/jedis-sentinel-pool/blob/master/src/…
    • 或者,您可以在故障转移发生时运行脚本,该脚本应该以某种方式使用新的主地址重新配置客户端。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2016-03-19
      • 1970-01-01
      • 2015-03-21
      • 2014-10-05
      • 2021-02-27
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多