Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 使用Redis behing AWS负载平衡器_Amazon Web Services_Redis_Amazon Elb - Fatal编程技术网

Amazon web services 使用Redis behing AWS负载平衡器

Amazon web services 使用Redis behing AWS负载平衡器,amazon-web-services,redis,amazon-elb,Amazon Web Services,Redis,Amazon Elb,我们使用Redis从AWS ELB背后的web应用程序(基于发布/订阅)收集事件。 我们正在寻找一种解决方案,使我们能够为不同的服务器扩展和提高可用性。我们不希望将这两台服务器放在Redis集群中,我们的计划是使用cloudwatch监视它们,并在必要时在它们之间切换 我们尝试了一个简单的测试,定位ELB后面的两个Redis服务器,对ELB DNS进行远程登录,并使用“Redis cli monitor”查看发生了什么,但什么也看不到。(在没有ELB的情况下尝试相同的方法似乎很好) 有什么建议吗

我们使用Redis从AWS ELB背后的web应用程序(基于发布/订阅)收集事件。 我们正在寻找一种解决方案,使我们能够为不同的服务器扩展和提高可用性。我们不希望将这两台服务器放在Redis集群中,我们的计划是使用cloudwatch监视它们,并在必要时在它们之间切换

我们尝试了一个简单的测试,定位ELB后面的两个Redis服务器,对ELB DNS进行远程登录,并使用“Redis cli monitor”查看发生了什么,但什么也看不到。(在没有ELB的情况下尝试相同的方法似乎很好)

有什么建议吗


谢谢

假设您正在VPC中运行:

  • 您是否向ELB注册了EC2实例
  • 您是否向ELB添加了正确的安全组设置(允许入站端口23)
  • 您是否添加了一个ELB侦听器,将ELB上的端口23映射到实例上的端口23
  • 您是否设置了合理的ELB运行状况检查(例如端口23上的TCP),以便ELB认为EC2实例正常

  • 如果ELB认为其背后的服务器不健康,则ELB不会向其发送任何流量。

    假设您在VPC中运行:

  • 您是否向ELB注册了EC2实例
  • 您是否向ELB添加了正确的安全组设置(允许入站端口23)
  • 您是否添加了一个ELB侦听器,将ELB上的端口23映射到实例上的端口23
  • 您是否设置了合理的ELB运行状况检查(例如端口23上的TCP),以便ELB认为EC2实例正常

  • 如果ELB认为其背后的服务器不健康,则ELB不会向其发送任何流量。

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

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

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


    也就是说,如果您的c、IS没有适当的sentinel支持,sentinel+redis解决方案将非常理想。在这种情况下。您的客户机请求哨兵与主机通话,一旦连接失败,它将重复此过程。这将处理您描述的设置,而不会出现在ELB后面的问题

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

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

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


    也就是说,如果您的c、IS没有适当的sentinel支持,sentinel+redis解决方案将非常理想。在这种情况下。您的客户机请求哨兵与主机通话,一旦连接失败,它将重复此过程。这将处理您描述的设置,而不会出现在ELB后面的问题

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

    对于您的问题,更适合将DNS故障切换与Redis复制自动故障切换配置一起使用。DNS故障切换提供可用性组(如果需要该级别的扩展),复制组提供缓存启动时间

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

    主动-被动故障切换:在需要时使用此故障切换配置 大部分时间可用的主要资源组 您希望第二组资源处于备用状态,以备不时之需 所有主要资源都将不可用。当回应 查询时,Amazon Route 53仅包括健康的主要资源。 如果所有的主要资源都不健康,亚马逊53号路线就开始了 仅包括响应DNS的正常辅助资源 查询

    设置DNS后,您将指向Elasticache Redis故障切换组的URL,并在故障切换操作期间添加多个组以提高可用性

    但是,您可能需要将应用程序设置为从不同的端点写入和读取,以最大限度地提高体系结构的可伸缩性

    资料来源:


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

    这更适合你的工作