我们正在使用Redis从AWS ELB后面的Web应用程序(基于pub / sub)收集事件。我们正在寻找一种解决方案,以允许我们针对不同的服务器进行扩展并实现高可用性。我们不希望将这两个服务器放在Redis集群中,我们的计划是使用cloudwatch监视它们,并在必要时在它们之间切换。
我们尝试了一个简单的测试,即在ELB后面放置两个Redis服务器,对ELB DNS进行远程登录,然后使用“ redis-cli monitor”查看会发生什么,但是我们什么也没看到。(在没有ELB的情况下尝试相同的操作似乎很好)
有什么建议?
谢谢
在LB后面放置一对独立的redis节点可能不是您想要的。将会发生的事情是ELB将尝试平衡每个实例的连接,将一半拆分为一个,将一半拆分为另一个。这意味着一个连接发出的命令可能不会被另一连接看到。这也意味着没有数据共享。因此,客户端a可以发布一条消息,而订阅另一台服务器的客户端b将看不到该消息。
对于ELB后面的PUBSUB,您有另一个问题。ELB将关闭空闲连接。因此,如果您订阅的频道不忙,则ELB将关闭您的连接。我记得您最多可以将其设置为60秒,这意味着如果您不每隔一分钟发布一条消息,您的客户端就会断开连接。
至于有多少问题取决于您的客户端库,并且坦率地说,根据我的经验,大多数问题并不能很好地解决,因为他们不知道需要在重新建立连接时重新订阅,这意味着您将自己编写代码。
也就是说,如果您的c没有适当的哨兵支持,则哨兵+ Redis解决方案将是非常理想的。在这种情况下。您的客户要求哨兵与主机对话,如果连接失败,它将重复此过程。这将处理您描述的设置,而不会出现在ELB后面的问题。