Сессии Отказоустойчивые с PHP-memcache против memcached

Коллеги!

Я запускаю php 5.3 (5.3.8) с клиентской библиотекой memcache (2.2.6) (http://pecl.php.net/package/memcache) для работы с сервером memcached.Моя цель - иметь отказоустойчивое решение для механизма сеансов, а именно:

  • Поддержка только собственных сеансов php (без специальных обработчиков)
  • Несколько серверов memcached в пуле

Я ожидаю, что если один из серверов memcached не работает, php попытается использовать второй сервер в пуле [успешно подключит его и станет счастливым], однако, когда первый сервер memcached в пуле не работает, я получаю следующую ошибку:

Session start failed. Original message: session_start(): Server 10.0.10.111 (tcp 11211) failed with: Connection refused (111)

пока соответствующие настройки php :

session.save_handler memcache
session.save_path tcp://10.0.10.111:11211?persistent=1&weight=1&timeout=1&retry_interval=10, tcp://10.0.10.110:11211?persistent=1&weight=1&timeout=1&retry_interval=10

и настройки memcache (хотя я думаю, что они близки к стандартным):

Directive   Local Value
memcache.allow_failover 1
memcache.chunk_size 8192
memcache.default_port   11211
memcache.default_timeout_ms 1000
memcache.hash_function  crc32
memcache.hash_strategy  standard
memcache.max_failover_attempts  20

Memcached все еще работает на втором сервере и полностью доступен с WEB-сервера:

telnet 10.0.10.110  11211
Trying 10.0.10.110...
Connected to 10.0.10.110 (10.0.10.110).
Escape character is '^]'.
get aaa
END
quit
Connection closed by foreign host.

Другими словами, вместо того, чтобы запрашивать все перечисленных серверов последовательно происходит сбой после неудачной попытки подключения к первому серверу в очереди. Наконец, я понимаю, что доступны версии клиентской библиотеки 3.0.x, однако она не выглядит для меня слишком надежной, поскольку все еще находится в бета-версии.

Посоветуйте, пожалуйста, как я могу добиться желаемого поведения со стандартным PHP, клиентской библиотекой и сервером.

Большое спасибо!

Лучшее, Евгений

12
задан Eugene 23 February 2012 в 00:32
поделиться