如何调试 memcached“服务器已失败且已禁用直至定时重试”错误?

如何调试 memcached“服务器已失败且已禁用直至定时重试”错误?

我有一个两台 memcached 服务器设置。当 memcached 写入失败时,我会收到一封电子邮件通知。大约每天会出现一次“服务器已失败且已禁用,直到定时重试”错误,我不知道如何找到原因。

我正在使用 PHP Memcached 客户端。

我没有使用太长的密钥。我尝试添加 -v 标志,但没有帮助,日志仍然是空的。

如果我将 getStats 的输出添加到错误通知中,我会收到以下信息:

Array
(
    [192.168.0.3:11211] => Array
        (
            [pid] => 28167
            [uptime] => 3671962
            [threads] => 4
            [time] => 1358714713
            [pointer_size] => 64
            [rusage_user_seconds] => 24516
            [rusage_user_microseconds] => 130981
            [rusage_system_seconds] => 86246
            [rusage_system_microseconds] => 675512
            [curr_items] => 1616352
            [total_items] => 118339822
            [limit_maxbytes] => 2684354560
            [curr_connections] => 8
            [total_connections] => 78108681
            [connection_structures] => 356
            [bytes] => 981522779
            [cmd_get] => 1561752945
            [cmd_set] => 158718324
            [get_hits] => 1383072575
            [get_misses] => 178680370
            [evictions] => 0
            [bytes_read] => 138113231690
            [bytes_written] => 1091741700765
            [version] => 1.4.15
        )

    [192.168.0.4:11211] => Array
        (
            [pid] => -1
            [uptime] => 0
            [threads] => 0
            [time] => 0
            [pointer_size] => 0
            [rusage_user_seconds] => 0
            [rusage_user_microseconds] => 0
            [rusage_system_seconds] => 0
            [rusage_system_microseconds] => 0
            [curr_items] => 0
            [total_items] => 0
            [limit_maxbytes] => 0
            [curr_connections] => 0
            [total_connections] => 0
            [connection_structures] => 0
            [bytes] => 0
            [cmd_get] => 0
            [cmd_set] => 0
            [get_hits] => 0
            [get_misses] => 0
            [evictions] => 0
            [bytes_read] => 0
            [bytes_written] => 0
            [version] => 
        )

)

答案1

MEMCACHED_SERVER_TEMPORARILY_DISABLED或者 ”服务器已发生故障并被禁用,直至定时重试“由库生成libmemcached。我无法确认如何pecl_memcached处理此错误,但我认为它会被视为标准连接错误。当连接超过超时和/或重试限制时,将发出此消息。(请参阅 I/O 选项

当然,由于这是一个暂时的问题,您可以设计您的 PHP 应用程序以转移到下一个缓存服务器,或将受影响的服务器从服务器列表中拉出。

答案2

就我而言,关闭行为选项tcp_nodelay使其起作用。

这似乎是 的一个选项pylibmc,它是 的python包装器libmemcached,但文档说,这个选项属于 中可直接配置的选项libmemcached

更多信息请参阅pylibmc文档http://sendapatch.se/projects/pylibmc/behaviors.html

答案3

就我而言,我在代码中将 localhost 更改为“127.0.0.1”。并且我能够解决错误“服务器已失败且已被禁用,直到定时重试”

希望有帮助

'options' => array(
            'servers' => array('127.0.0.1', 11211),

答案4

就我而言,出现此错误消息的原因是服务器名称不正确。

准备配置字符串的代码不知怎么搞乱了,其中一个 memcache 服务器名称前面出现了一个空格字符。这导致在从服务器读取时出现上述错误消息。

我使用的是 PHP 和 Memcached 扩展。添加带空格的服务器名称没有任何问题,也就是说,没有对它们进行内部验证。只有在必须连接到服务器时才会检查它们。

相关内容