Java Redis-处理故障切换和负载平衡?

Java Redis-处理故障切换和负载平衡?,java,tomcat,redis,apache-zookeeper,high-availability,Java,Tomcat,Redis,Apache Zookeeper,High Availability,我有一个应用程序,用于连接到Redis服务器,以便将会话外部化。因为我们的目标是高可用性,所以我们希望以分布式方式运行Redis主从配置。我们能够成功地在一台具有多个主从配置的服务器上实现这一点,我们使用sentinal来实现这一点 当我们从一个服务器移动到多个服务器环境时,我们的问题就开始了,也就是说,我们有服务器S1、S2、S3和S1在S1中运行,而S2和S3运行从属进程。Sentinal很容易在s1主机死亡时进行切换,但我们的应用程序完全不知道切换,并且一直指向s1服务器的IP,而现在的主

我有一个应用程序,用于连接到Redis服务器,以便将会话外部化。因为我们的目标是高可用性,所以我们希望以分布式方式运行Redis主从配置。我们能够成功地在一台具有多个主从配置的服务器上实现这一点,我们使用sentinal来实现这一点

当我们从一个服务器移动到多个服务器环境时,我们的问题就开始了,也就是说,我们有服务器S1、S2、S3和S1在S1中运行,而S2和S3运行从属进程。Sentinal很容易在s1主机死亡时进行切换,但我们的应用程序完全不知道切换,并且一直指向s1服务器的IP,而现在的主机是s2。如何解决此问题,以及如何提高可用性

我们在Apache Tomcat中所做的配置更改位于Server.xml文件中,如下所示:-

<Valve className="com.radiadesign.catalina.session.RedisSessionHandlerValve" />
<Manager className="com.radiadesign.catalina.session.RedisSessionManager"
         host="localhost" <!-- optional: defaults to "localhost" -->
         port="6379" <!-- optional: defaults to "6379" -->
         database="0" <!-- optional: defaults to "0" -->
         maxInactiveInterval="60" <!-- optional: defaults to "60" (in seconds) --> />

数据库=“0”
maxInactiveInterval=“60”/>
如何应对这种情况并提高可用性。我读了一些zookeeper的插件,但没有一个是Java的,我甚至不知道如何实现同样的插件


如果需要,请随时询问任何澄清。

您可能想看看HAProxy。几天前,我在WindowsAzure中设置高可用性Redis服务时遇到了类似的情况。我在这里记录了如何做到这一点:

干杯

Sentinal很容易在s1主机死亡时进行切换,但我们的应用程序完全不知道切换,并且一直指向s1服务器的IP,而现在的主机是s2


试试看,它会自动更新Redis拓扑,特别是在您的情况下处理主控更改。它还支持Single/Sentinel/Cluster和AWS Elasticache模式,当然也支持实现。

我自己还没有做过,所以我不知道所有的细节,但我认为有了。@kuporific Ok我看到这个代理可以在没有sentinal的情况下进行切换。我不这么认为。抱歉,如果不清楚的话,但我的第一条评论中隐藏了两个链接,我会重复,以便更清楚:和