Назад | Перейти на главную страницу

Проблема с избыточностью Memcached

Меня попросили установить сервер 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 лет.

Я пробовал оба memcache.session_redundancy=2 и memcache.session_redundancy=3 из-за этой известной ошибки PHP, но проблема сохраняется в любом случае.

Что еще я могу сделать?

заранее спасибо

Как вы, кажется, используете memcached и нет memcache, вам следует использовать вместо этого следующие настройки:

memcached.sess_number_of_replicas = 3
memcached.sess_binary_protocol = 1