使用 Redis 作为 AWS 负载均衡器

Using Redis behing AWS load balancer

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

我们尝试了一个简单的测试,在 ELB 后面定位两个 Redis 服务器,telnet ELB DNS 并查看使用 'redis-cli monitor' 会发生什么,但我们什么也没看到。 (在没有 ELB 的情况下尝试同样的方法似乎没问题)

有什么建议吗?

感谢

假设您在 VPC 中 运行:

  1. 您是否向 ELB 注册了 EC2 实例?
  2. 您是否为 ELB 添加了正确的安全组设置(允许入站端口 23)?
  3. 您是否添加了将 ELB 上的端口 23 映射到实例上的端口 23 的 ELB 侦听器?
  4. 您是否设置了合理的 ELB 健康检查(例如端口 23 上的 TCP)以便 ELB 认为 EC2 实例是健康的?

如果 ELB 认为它后面的服务器不健康,那么 ELB 将不会向它们发送任何流量。

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

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

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

也就是说,如果您的 c 没有适当的哨兵支持,哨兵 + redis 解决方案将是非常理想的。在这种情况下。您的客户端请求哨兵与 master 进行对话,并在连接失败时重复此过程。这将处理您描述的设置,而不会出现落后于 ELB 的问题。

我在寻找类似问题时遇到了这个问题,但不同意接受的答案。尽管这已经很老了,但希望它能对将来的人有所帮助。

对于您在此处提出的问题,将 DNS 故障转移与 Redis 复制自动故障转移配置结合使用更为合适。 DNS 故障转移提供可用性组(如果您需要该级别的规模),复制组提供缓存正常运行时间。

http://docs.aws.amazon.com/Route53/latest/DeveloperGuide/dns-failover-configuring.html

主动-被动故障转移应该提供您想要的高可用性解决方案:

Active-passive failover: Use this failover configuration when you want a primary group of resources to be available the majority of the time and you want a secondary group of resources to be on standby in case all of the primary resources become unavailable. When responding to queries, Amazon Route 53 includes only the healthy primary resources. If all of the primary resources are unhealthy, Amazon Route 53 begins to include only the healthy secondary resources in response to DNS queries.

设置 DNS 后,您可以将其指向 Elasticache Redis 故障转移组的 URL 并在故障转移操作期间添加多个组以获得更高的可用性。

但是,您可能需要将应用程序设置为从不同端点写入和​​读取,以最大限度地提高架构的可扩展性。

来源:

http://docs.aws.amazon.com/AmazonElastiCache/latest/UserGuide/Replication.html http://docs.aws.amazon.com/AmazonElastiCache/latest/UserGuide/AutoFailover.html