Проблема с избыточностью 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.

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

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

Заранее благодарим

1
задан 1 April 2019 в 17:32
1 ответ

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

memcached.sess_number_of_replicas = 3
memcached.sess_binary_protocol = 1
1
ответ дан 3 December 2019 в 23:05

Теги

Похожие вопросы