我遇到了 Memcached 池的问题。我将尝试添加错误的所有上下文,看看你们是否可以帮助我解决这个问题。
语境:
- PHP 5.5.17 (cgi-fcgi) (内置: Sep 24 2014 20:38:04)
- php-pecl-memcache-3.0.8-2.fc17.remi.5.5.x86_64
- nginx版本:nginx/1.0.15
我的问题:
我正在创建与 memcached 的连接并保存几个密钥,首先在一个服务器中,如下所示:
$_memcache = new Memcache;
$_memcache->addServer("127.0.0.1", "11211", true, 50, 3600, 45);
因此,假设我在该服务器中添加了几个密钥,并且我可以毫无问题地获取这些密钥,实际上我可以,当我看到我的站点并且我的代码正在调用以获取密钥时,它正在获取它。
现在的问题是,假设这些密钥已经保存并且没有问题,我将另一个 memcached 服务器添加到池中,这样:
$_memcache = new Memcache;
$_memcache->addServer("10.0.0.2", "11211", true, 50, 3600, 45);
$_memcache->addServer("10.0.0.3", "11211", true, 50, 3600, 45);
但是在我刷新站点以运行我的代码并获取存储在第一台服务器中的密钥之前,我停止了该服务器编号 1 (10.0.0.2) 中的 memcached,之后我刷新了我的站点,然后我收到了 502 错误(错误的网关)
我在 NGINX 的日志中看到的错误是:
[错误] 9364#0: *329504 recv() 在从上游读取响应头时失败(104:连接重置),客户端:XX.XX.XXX.XXX,服务器:_,请求:“GET / HTTP/1.1 ", 上游: "fastcgi://unix:/run/php-fastcgi/sock:", 主机: "www.myhost.com"
那么,为什么我会收到这个错误。我唯一的理论是,由于某种原因,由于连接是持久的,当我停止 memcached 服务器时没有正确关闭,但这只发生在我有一个 X > 1 服务器池时。如果我只使用那个并停止,我将看不到错误。
PHP 5.5 有任何我不知道的 fastcgi 套接字错误。
注意:我遇到的这个问题在以前的 PHP 版本 5.3 上没有发生,在更改版本后发生了这种情况。
注意:当我不使用持久连接似乎可以工作,但是这个站点有巨大的流量并且它不会处理打开的连接数量时,我在开发环境中测试了这个。
任何帮助或任何建议都非常受欢迎。
提前致谢!