Меня попросили установить сервер Memcached на двух серверах (по одному на каждом). Для записей я запускаю PHP 5.6.5. Вот моя установка:
memcached.ini:
extension=memcached.so
memcache.allow_failover=1
memcache.session_redundancy=3
php -i | grep memcached
memcached support => enabled
libmemcached version => 1.0.16
memcached.compression_factor => 1.3 => 1.3
memcached.compression_threshold => 2000 => 2000
memcached.compression_type => fastlz => fastlz
memcached.serializer => php => php
memcached.sess_binary => 0 => 0
memcached.sess_connect_timeout => 1000 => 1000
memcached.sess_consistent_hash => 0 => 0
memcached.sess_lock_expire => 0 => 0
memcached.sess_lock_max_wait => 0 => 0
memcached.sess_lock_wait => 150000 => 150000
memcached.sess_locking => 1 => 1
memcached.sess_number_of_replicas => 0 => 0
memcached.sess_prefix => memc.sess.key. => memc.sess.key.
memcached.sess_randomize_replica_read => 0 => 0
memcached.sess_remove_failed => 0 => 0
memcached.sess_sasl_password => no value => no value
memcached.sess_sasl_username => no value => no value
memcached.store_retry_count => 2 => 2
memcached.use_sasl => 0 => 0
Registered save handlers => files user memcache memcached
session.save_handler => memcached => memcached
php.ini
session.save_handler = memcached
session.save_path = 'tcp://10.109.6.122:11211,tcp://10.105.164.25:11211'
Однако у меня, похоже, есть проблема с избыточностью сервера. Чуть ниже у меня есть таблица тестов, которую я выбрал для тестирования. WAS
- это сервер Apache, а MEMCACHE
- работающий сервер Memcached.
+---------+------------+---------+------------+
| WAS1 | MEMCACHED1 | WAS2 | MEMCACHED2 |
+---------+------------+---------+------------+
| Started | Started | Stopped | Stopped |
| Stopped | Stopped | Started | Started |
| Started | Stopped | Stopped | Started |
| Stopped | Started | Started | Stopped |
+---------+------------+---------+------------+
Ниже приведен код, который я использую для тестирования. Дело в том, что $ session-> id
должен увеличиваться без проблем.
<?php
require_once "cron_init.php";
$session = new Zend_Session_Namespace('lastCommande');
$session->type = 'test';
if (!isset($session->id)) {
$session->id = 1;
echo "Première visite par ici \n" ;
}
else {
echo "Nombre de visite pour l'instant : " . $session->id . "\n";
$session->id++;
}
print_r($_COOKIE);
Теоретически все работает нормально. Когда я "выключаю" один из серверов (оба Apache + Memcached с одного из серверов), я продолжаю получать увеличивающееся число, но в зависимости от того, какой сервер Memcached я останавливаю (в основном, Memcached1
), увеличивающийся число, которое я получаю, неверно.
Например, если я остановлю Memcached1
, Memcache2
будет иметь свои собственные данные. На данный момент $ session-> id
равно 18 для Memcached1
и 14 для Memcached2
, при этом оба они должны быть на 14 или 18.
I попробовали оба memcache.session_redundancy = 2
и memcache.session_redundancy = 3
из-за этой известной ошибки PHP, но проблема сохраняется в любом случае.
Что еще я могу сделать?
Заранее благодарим
Как вы, похоже, используете memcached
, а не кэш памяти
, вместо этого следует использовать следующие параметры:
memcached.sess_number_of_replicas = 3
memcached.sess_binary_protocol = 1