У меня есть эта досадная проблема, которую я не могу обернуть вокруг. Проблема в том, что мой клиент 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;
}
не Memcached::OPT_REMOVE_FAILED_SERVERS => true
Скажите, что если сервер не работает, он должен быть удален из пула серверов? Я не правильно понимаю это? Когда я пытаюсь пропинговать мертвый сервер с PHP-клиента, это приводит к неизвестной ошибке хоста. Нужно ли проверять состояние каждого сервера перед добавлением их в пул с помощью addServers()
?
Кроме того, каждый запрос на запись имеет getResultMessage()
УСПЕХА.
Действительно ценю некоторый вклад в это,
Проверьте этот выпуск на GitHub: https://github.com/php-memcached-dev/php-memcached/issues/154
Последовательное распределение означает, что данные ключи будут храниться на заданных серверах, несмотря ни на что. Распределение изменится, когда вы попросите драйвер пересчитать его, снова установив метод распространения, который больше не использует функции хеширования и мертвые серверы.
Других решений пока нет …