我最近将我的memcache服务器移到AWS的Elastic Load Balancer后面。我也在使用Flask-Cache和这个内存缓存。如果我没有弄错(并且我完全有可能),Flask-Cache会打开与memcache的连接并保持打开状态。似乎ELB在一段时间后终止了这些长期存在的联系(我认为它大约需要60分钟)。这将导致错误,如:
SomeErrors: error 19 from flush_all: (0x4ff96f0) CONNECTION FAILURE, ::rec() returned zero, server has disconnected
如果有某些方法我可以捕获这些错误并重新连接(或者某些魔术设置为"尝试重新连接连接失败"),这将解决此问题。
FWIW,我使用的是pylibmc
,但是没有看到任何明显的(对我而言)我可以通过。
非常感谢任何帮助!
答案 0 :(得分:1)
与ELB断开连接很常见,也很难调试。以下是一些可能有用的内容:
调试想法
确保您有带有时间戳的应用程序日志记录,并且如果您捕获Python中的所有异常(这通常不是一个好主意),则记录该异常。如果你捕获所有异常,你可能会有一个微妙而隐藏的错误。
模拟失败(即从ELB手动删除“one”实例),现在查看您的日志并确保在日志中看到这一点。如果你可以重现相同的行为,你可以找出如何解决它。
查看像https://loader.io/这样的Web服务自动化测试工具。这对于模拟断开连接时的条件非常有用。
使用不同的负载均衡器尝试相同的应用程序,即HAProxy(我可能最后尝试这个)。