2

我最近将我的内存缓存服务器移到了 AWS 中的弹性负载均衡器后面。我也在使用 Flask-Cache 和这个内存缓存。如果我没记错的话(我完全有可能),Flask-Cache 会打开与 memcache 的连接并保持打开状态。似乎ELB在一段时间后终止了这些长期存在的连接(我认为大约是60分钟)。这将导致如下错误:

SomeErrors: error 19 from flush_all: (0x4ff96f0) CONNECTION FAILURE, ::rec() returned zero, server has disconnected

如果有某种方法可以捕获这些错误并重新连接(或一些魔术设置为“尝试在连接失败时重新连接”),那将解决这个问题。

FWIW,我正在使用pylibmc,但没有看到任何明显的(对我而言)我可以通过的东西。

任何帮助将不胜感激!

4

1 回答 1

1

与 ELB 断开连接很常见,也很难调试。以下是一些可能会有所帮助的事情:

调试思路

  • 尝试在只有一个实例连接到 ELB 的暂存环境中调试问题。
  • 确保您有带有时间戳的应用程序日志记录,并且如果您在 Python 中捕获所有异常(这通常不是一个好主意),则记录该异常。如果您要捕获所有异常,您可能有一个微妙且隐藏的错误,看起来是别的东西。

  • 模拟故障(即从 ELB 中手动删除“一个”实例),现在查看您的日志并确保您在日志中看到这一点。如果您可以重现相同的行为,那么您就可以弄清楚如何解决它。

  • 查看像https://loader.io/这样的 Web 服务自动化测试工具。这对于模拟出现断开连接的情况非常有帮助。

  • 使用不同的负载均衡器尝试相同的应用程序,即 HAProxy(我可能会最后尝试)。

于 2016-10-16T22:59:33.473 回答