On m'a demandé de mettre en place un serveur Memcached sur deux serveurs (un sur chaque). Pour mémoire, j'utilise PHP 5.6.5. Voici ma configuration :
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'
Cependant, il semble que j'aie un problème avec la redondance des serveurs. Juste en dessous, j'ai cette grille de test que j'ai choisi de tester. WAS
est un serveur Apache, et MEMCACHE
est le serveur Memcached en cours d'exécution.
+---------+------------+---------+------------+
| WAS1 | MEMCACHED1 | WAS2 | MEMCACHED2 |
+---------+------------+---------+------------+
| Started | Started | Stopped | Stopped |
| Stopped | Stopped | Started | Started |
| Started | Stopped | Stopped | Started |
| Stopped | Started | Started | Stopped |
+---------+------------+---------+------------+
Ci-dessous le code que j'utilise pour tester. Le fait est que le $session->id
est censé s'incrémenter sans problème.
<?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);
Théoriquement, tout fonctionne bien. Lorsque j'arrête l'un des serveurs (Apache + Memcached de l'un des serveurs), je continue à avoir un nombre incrémentiel, mais selon le serveur Memcached que j'arrête (principalement, Memcached1
), le nombre incrémentiel que j'obtiens n'est pas correct.
Par exemple, si je m'arrête Memcached1
, Memcache2
aura ses propres données. En ce moment, $session->id
est de 18 pour Memcached1
et 14 pour Memcached2
alors qu'ils devraient être tous deux à 14 ou 18 ans.
J'ai essayé les deux memcache.session_redundancy=2
y memcache.session_redundancy=3
à cause de ce bug PHP bien connu, mais le problème persiste dans tous les cas.
Que puis-je faire d'autre ?
Merci d'avance
0 votes
Vous semblez utiliser
memcached
(pasmemcache
) alors que vous utilisezmemcache
paramètres : (memcache.allow_failover
ymemcache.session_redundancy
). Avez-vous essayé de rechercher les paramètres équivalents de memcached ?