2015-09-09 4 views
0

Итак, у меня есть два сервера 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?

ответ

1

решаемые

При дальнейшем отладке Memcached серверов они ответили с кодом ошибки (MEMCACHED_SERVER_TEMPORARILY_DISABLED).

У хостинговой компании была плохая конфигурация iptables, которая не позволяла двум серверам memcached взаимодействовать друг с другом. Когда это было исправлено, все приступило к работе, как ожидалось.

Смежные вопросы