кэширование — PHP Memcached продолжает писать на мертвый сервер

У меня есть эта досадная проблема, которую я не могу обернуть вокруг. Проблема в том, что мой клиент PHP Memcached продолжает пытаться записать на мертвый сервер. Когда я проверяю статистику серверов, с $ memcached-> getStats () это выглядит примерно так:

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

Что, насколько я понимаю, указывает на то, что сервер2 мертв? Но когда я пытаюсь записать данные в кластер, он продолжает пытаться записать половину ключей на этот мертвый сервер. Он отлично работает, когда оба сервера живы, но как только я убью один из них, это не повлияет на распределение ключей.

Мой экземпляр 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:
Информация о PHP

не Memcached::OPT_REMOVE_FAILED_SERVERS => true Скажите, что если сервер не работает, он должен быть удален из пула серверов? Я не правильно понимаю это? Когда я пытаюсь пропинговать мертвый сервер с PHP-клиента, это приводит к неизвестной ошибке хоста. Нужно ли проверять состояние каждого сервера перед добавлением их в пул с помощью addServers()?

Кроме того, каждый запрос на запись имеет getResultMessage() УСПЕХА.

Действительно ценю некоторый вклад в это,

-1

Решение

Проверьте этот выпуск на GitHub: https://github.com/php-memcached-dev/php-memcached/issues/154

Последовательное распределение означает, что данные ключи будут храниться на заданных серверах, несмотря ни на что. Распределение изменится, когда вы попросите драйвер пересчитать его, снова установив метод распространения, который больше не использует функции хеширования и мертвые серверы.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]