我们正在使用Redis从AWS ELB后面的Web应用程序(基于pub / sub)收集事件。 我们正在寻找一种解决方案,使我们能够针对不同的服务器进行扩展和高可用性。我们不希望在Redis集群中安装这两台服务器,我们的计划是使用cloudwatch监控它们,并在必要时在它们之间切换。
我们尝试了一个简单的测试,在ELB后面找到两个Redis服务器,远程登录ELB DNS,看看使用' redis-cli监视器会发生什么,但我们什么都看不到。 (在没有ELB的情况下尝试相同的情况看起来很好)
有什么建议吗?
谢谢
答案 0 :(得分:3)
我在寻找类似问题时遇到了这个问题,但不同意接受的答案。虽然这已经很老了,但希望将来能帮到某人。
此处的问题更适合使用具有Redis复制自动故障转移配置的DNS故障转移。 DNS故障转移提供可用性组(如果您需要该级别的规模),并且复制组提供缓存时间。
http://docs.aws.amazon.com/Route53/latest/DeveloperGuide/dns-failover-configuring.html
主动 - 被动故障转移应该提供您想要的高可用性解决方案:
主动 - 被动故障转移:根据需要使用此故障转移配置 大多数时候可用的主要资源组 并且您希望第二组资源处于待机状态以防万一 所有主要资源都不可用。在回复时 查询,Amazon Route 53仅包含健康的主要资源。 如果所有主要资源都不健康,Amazon Route 53将开始运行 仅包含健康的辅助资源以响应DNS 查询。
设置DNS后,您可以将其指向Elasticache Redis故障转移组的URL,并在故障转移操作期间添加多个组以获得更高的可用性。
但是,您可能需要将应用程序设置为从不同端点进行写入和读取,以最大化架构的可伸缩性。
来源:
http://docs.aws.amazon.com/AmazonElastiCache/latest/UserGuide/Replication.html http://docs.aws.amazon.com/AmazonElastiCache/latest/UserGuide/AutoFailover.html
答案 1 :(得分:0)
假设您在VPC中运行:
如果ELB认为其背后的服务器不健康,那么ELB将不会向他们发送任何流量。
答案 2 :(得分:0)
在LB后面放置一对独立的redis节点可能不是你想要的。将会发生的是ELB将尝试平衡每个实例的连接,将一半分为一半,另一半分裂。这意味着一个连接发出的命令可能不会被另一个连接看到。它还意味着不共享数据。因此,客户端a可以发布消息,而正在订阅其他服务器的客户端b将不会看到该消息。
对于ELB背后的PUBSUB,您有一个次要问题。 ELB将关闭空闲连接。因此,如果您订阅了一个不忙的频道,您的ELB将关闭您的连接。我记得最大可以让这是60秒,这意味着如果你不是每隔一分钟发布一条消息就会断开你的客户端。
至于有多少问题取决于你的客户端库,坦率地说,根据我的经验,大部分都不能很好地处理它,因为他们不知道在重新建立连接时需要重新订阅,这意味着你必须自己编码。
如果你的c没有适当的哨兵支持,说哨兵+ redis解决方案会非常理想。在这种情况下。您的客户端要求哨兵与主人交谈,并且在连接失败时它会重复此过程。这将处理您描述的设置,而不会出现在ELB后面的问题。