【问题标题】:PHP Memcached keeps writing to dead serverPHP Memcached 不断写入死服务器
【发布时间】:2017-07-28 20:24:17
【问题描述】:

我有一个烦人的问题,我似乎无法解决问题。问题是我的 PHP Memcached 客户端不断尝试写入死服务器。当我使用 $memcached->getStats() 检查服务器的统计信息时,它看起来像这样:

{
   "server1:11211": {
      "pid" : 15,
      "uptime" : 600
      ...
   },
   "server2:11211": {
      "pid" : -1,
      "uptime" : 0
      ...
   },
}

据我了解,这表明 server2 已死?但是当我尝试将数据写入集群时,它会一直尝试将一半的密钥写入这个死服务器。当两台服务器都处于活动状态时它工作得很好,但是一旦我杀死其中一个,它似乎不会影响密钥的分配方式。

我的 Memcached 实例如下所示:

protected static function getMemcached()
{
    if(!self::$memcached)
    {
        self::$memcached = new Memcached();

        self::$memcached->setOptions(array(
            Memcached::OPT_CONNECT_TIMEOUT => 100,
            Memcached::OPT_LIBKETAMA_COMPATIBLE => true,
            Memcached::OPT_REMOVE_FAILED_SERVERS => true,
            Memcached::OPT_SERVER_FAILURE_LIMIT => 2,
            Memcached::OPT_RETRY_TIMEOUT => 1
        ));

        // Prevent adding a server to the connection pool each request
        if (!self::$memcached->getServerList())
        {
            // Add new connection
            self::$memcached->addServers(self::getHosts());
        }

    }

    return self::$memcached;
}

PHP 信息:

Memcached::OPT_REMOVE_FAILED_SERVERS => true 不是说如果服务器宕机了就应该从服务器池中移除吗?我没有正确理解这一点吗?当我尝试从 PHP 客户端 ping 死服务器时,会导致未知主机错误。在使用addServers() 将它们添加到池之前,是否需要检查每个服务器的状态?

此外,每个写入请求都有一个成功的getResultMessage()

非常感谢您对此的一些意见,

【问题讨论】:

    标签: php caching memcached distributed


    【解决方案1】:

    在 GitHub 上查看此问题:https://github.com/php-memcached-dev/php-memcached/issues/154

    一致分布意味着给定的密钥无论如何都将存储在给定的服务器上。当您要求驱动程序重新计算分布时,分布将发生变化,通过再次设置分布方法,更新散列函数并且不再使用死服务器。

    【讨论】:

    • 感谢您的回复。如果我知道我必须打开一个新连接并在每次获取后应用Memcached::OPT_LIBKETAMA_COMPATIBLE 选项?
    • 不是每次get之后。我会尝试这样的事情: if (!self::$memcached->getServerList()) { // 添加新连接 self::$memcached->addServers(self::getHosts()); } else { // 获取统计信息并检查节点是否失败 // 重新连接到活动服务器 } 我没有测试过这个解决方案,但我认为缓存将从头开始,因为分布会改变
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-01
    • 1970-01-01
    • 2012-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多