Redis-处理故障转移和负载平衡



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

当我们从一个服务器环境转移到多个服务器环境时,我们的问题就开始了,即假设我们有服务器s1、s2、s3和Master在s1中运行,而s2和s3运行从属进程。每当s1主机死亡时,Sentinal很容易进行切换,但我们的应用程序完全不知道切换,并一直指向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) --> />

如何应对这种情况并提高可用性。我读过一些使用zookeeper的插件,但没有一个是针对Java的,甚至不知道我们将如何实现同样的插件。

如有需要,请随时要求澄清。

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

http://robertianhawdon.me.uk/2014/02/11/sysops-installing-a-high-availability-redis-service-on-centos-6-x-in-windows-azure/

干杯

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

Try Redisson它会自动更新Redis拓扑,特别是在您的情况下处理主更改。它还支持Single/Sentinel/Cluster和AWS Elasticache模式,当然还实现了Tomcat会话管理器。

最新更新