【问题标题】:flask-cache memcache connection auto-reconnectflask-cache memcache 连接自动重新连接
【发布时间】:2017-02-15 09:44:59
【问题描述】:

我最近将我的内存缓存服务器移到了 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,但没有看到任何明显的(对我而言)我可以通过的东西。

任何帮助将不胜感激!

【问题讨论】:

    标签: flask memcached flask-cache


    【解决方案1】:

    与 ELB 断开连接很常见,也很难调试。以下几点可能会有所帮助:

    调试思路

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

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

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

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

    【讨论】:

    • 嗨,诺亚,非常感谢您的回答。我很确定我在 ELB 上断开了连接,我希望在pylibmc 中进行一些咒语或设置,甚至当长时间运行的连接保持打开状态时,redis 会在错误时自动重新连接。不过,如果我需要进行更深入的调查,我会听取您的建议。再次感谢!
    • 另一件要尝试的事情是 strace 进程:stackoverflow.com/questions/4053142/…
    猜你喜欢
    • 1970-01-01
    • 2011-02-02
    • 2015-03-12
    • 2010-12-06
    • 1970-01-01
    • 2011-09-05
    • 1970-01-01
    • 1970-01-01
    • 2010-11-08
    相关资源
    最近更新 更多