我们严重依赖 memcache,每月处理数十亿个请求。我们有 5 台 memcache 服务器。昨晚,我们的流量增加了 25%。图表显示,每个 memcache 的请求和传输数据都增加了,导致它们崩溃。这引发了连锁反应,每个 memcache 服务器都相继崩溃(每个服务器的负载增加)。
我们在 syslog、消息、memcache 日志文件中未发现任何日志(详细设置已关闭)。
我有两个问题:
我如何才能找出发生这种情况的确切原因。如果负载是 memcache 的问题,是否有任何文档说明正常 memcache(在合适的配置下运行)可以处理多少负载。我如何才能增加这个值。
我如何确保它们永远不会再次出现故障。它最终影响了我们的 mysql 服务器和复制,并影响了许多其他相关服务。我需要更多 memcache 服务器吗?
我使用这个 init.d 脚本启动了我的 memcache:http://pastebin.com/wfMnB4ta 其中 /etc/default/memcached 中的 ENABLE_MEMCACHE 为 YES
在/usr/share/memcached/scripts/启动memcached:http://pastebin.com/LaUugXye
谢谢
答案1
我猜你运行的是 1.4.5 或更早版本。
既然你提到流量增加,那么突然退出:
- 您可能已达到最大连接数限制(请参阅http://memcached.org/timeouts进行一些讨论)。
- 如果长时间超出连接限制,则会出现一个错误,导致 memcached 退出。
- 此问题在 1.4.6 版中得到部分修复,在 1.4.7 版中得到进一步修复,并在 1.4.9 版中得到完善。
如果您遇到崩溃,首先要确保使用的是最新稳定版本。如果您仍然遇到崩溃,最好的办法是联系实际邮件列表或提交包含信息的错误报告,而不是幸运地让维护人员通过 Twitter 搜索看到此信息。
定期升级以匹配最新稳定版本可以帮助您避免将来整个集群崩溃。
答案2
您还应该制定某种结构性解决方案来处理类似问题。例如,如果您注意到请求的响应时间正在增加,请减少请求数量。您可以通过多种方式做到这一点,包括禁用非必要服务。
不过,这种特定的故障可能无法避免。对于导致负载增加的故障,你无能为力。