使用Redis behing AWS负载均衡器

时间:2015-10-14 12:56:31

标签: amazon-web-services redis amazon-elb

我们正在使用Redis从AWS ELB后面的Web应用程序(基于pub / sub)收集事件。 我们正在寻找一种解决方案,使我们能够针对不同的服务器进行扩展和高可用性。我们不希望在Redis集群中安装这两台服务器,我们的计划是使用cloudwatch监控它们,并在必要时在它们之间切换。

我们尝试了一个简单的测试,在ELB后面找到两个Redis服务器,远程登录ELB DNS,看看使用' redis-cli监视器会发生什么,但我们什么都看不到。 (在没有ELB的情况下尝试相同的情况看起来很好)

有什么建议吗?

谢谢

3 个答案:

答案 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中运行:

  1. 您是否向ELB注册了EC2实例?
  2. 您是否向ELB添加了正确的安全组设置(允许入站端口23)?
  3. 您是否添加了ELB侦听器,将ELB上的端口23映射到实例上的端口23?
  4. 你是否设置了合理的ELB健康检查(例如端口23上的TCP),以便ELB认为EC2实例是健康的?
  5. 如果ELB认为其背后的服务器不健康,那么ELB将不会向他们发送任何流量。

答案 2 :(得分:0)

在LB后面放置一对独立的redis节点可能不是你想要的。将会发生的是ELB将尝试平衡每个实例的连接,将一半分为一半,另一半分裂。这意味着一个连接发出的命令可能不会被另一个连接看到。它还意味着不共享数据。因此,客户端a可以发布消息,而正在订阅其他服务器的客户端b将不会看到该消息。

对于ELB背后的PUBSUB,您有一个次要问题。 ELB将关闭空闲连接。因此,如果您订阅了一个不忙的频道,您的ELB将关闭您的连接。我记得最大可以让这是60秒,这意味着如果你不是每隔一分钟发布一条消息就会断开你的客户端。

至于有多少问题取决于你的客户端库,坦率地说,根据我的经验,大部分都不能很好地处理它,因为他们不知道在重新建立连接时需要重新订阅,这意味着你必须自己编码。

如果你的c没有适当的哨兵支持,说哨兵+ redis解决方案会非常理想。在这种情况下。您的客户端要求哨兵与主人交谈,并且在连接失败时它会重复此过程。这将处理您描述的设置,而不会出现在ELB后面的问题。