Итак, у меня есть два сервера Memcached. В моем PHP я создал службу Memcached, которая использует addServer
для управления серверами.Пул Memcached не работает должным образом
$app['memcached'] = $app->share(
function ($app) {
$memcached = new \Memcached;
$memcached->setOption(
\Memcached::OPT_PREFIX_KEY,
$app['memcached.config']['prefix']
);
foreach ($app['memcached.config']['servers'] as $server) {
$host = $server['hostname'];
$port = isset($server['port']) ? $server['port'] : 11211;
$memcached->addServer($host, $port);
}
return $memcached;
}
);
Затем я создаю страницу состояния, где я пытаюсь сделать простой набор и получить ключ, чтобы проверить, что все работает так, как ожидалось.
$time = time();
$memcached->set('system_check', $time);
$memcached_status = $memcached->get('system_check') == $time
? StatusInterface::STATUS_OK
: StatusInterface::STATUS_ERROR;
Это дает мне ОК половину времени, когда освежает и половину времени ОШИБКА.
Затем я выводим getServerList и getStats, чтобы увидеть больше информации о том, что происходит.
Это то, что я получаю.
Memcached явно зарегистрирован на двух серверах. (Сервер IP-адресов, затемняется х годов)
xx.xx.xx.xx 11211
xx.xx.xx.xx 11211
Статы дает мне эту половину времени:
Сервер 1:
pid 6027
uptime 4486
threads 4
time 1441804532
pointer_size 64
rusage_user_seconds 0
rusage_user_microseconds 84005
rusage_system_seconds 0
rusage_system_microseconds 76004
curr_items 4
total_items 122
limit_maxbytes 67108864
curr_connections 5
total_connections 156
connection_structures 6
bytes 2286
cmd_get 123
cmd_set 122
get_hits 118
get_misses 5
evictions 0
bytes_read 126989
bytes_written 145298
version 1.4.13
Сервер 2:
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:
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
Сервер 2:
pid 5201
uptime 5552
threads 4
time 1441805639
pointer_size 64
rusage_user_seconds 0
rusage_user_microseconds 132008
rusage_system_seconds 0
rusage_system_microseconds 60003
curr_items 3
total_items 121
limit_maxbytes 67108864
curr_connections 5
total_connections 95
connection_structures 7
bytes 566
cmd_get 124
cmd_set 121
get_hits 120
get_misses 4
evictions 0
bytes_read 18306
bytes_written 52682
version 1.4.13
Так его, как его только с помощью одного из серверов в то время ... это имеет смысл, если его пул и обрабатывает это внутренне. Отлично, но он пытается получить ключ «system_check» с сервера 1 и сервера 2 в разное время. Для меня это не имеет смысла. Он должен знать, где находится запись.
Я неправильно настроил серверы Memcached?