1 votes

Problème avec la redondance de Memcached

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 (pas memcache ) alors que vous utilisez memcache paramètres : ( memcache.allow_failover y memcache.session_redundancy ). Avez-vous essayé de rechercher les paramètres équivalents de memcached ?

2voto

Harrison Points 31

Comme vous semblez utiliser memcached et non memcache vous devriez plutôt utiliser les paramètres suivants :

memcached.sess_number_of_replicas = 3
memcached.sess_binary_protocol = 1

0 votes

Donc la réplication est réellement possible ? Je viens de le découvrir avec votre réponse, et j'ai enfin trouvé des informations sur php.net que je n'avais jamais vues auparavant ! Une seule question cependant, comment Memcached gère-t-il la redondance ? Je n'ai rien trouvé à ce sujet, est-ce qu'il le gère automatiquement ?

0 votes

Quelle version de memcached utilisez-vous ? Certaines ne semblent pas supporter sess_number_of_replicas . Voir stackoverflow.com/questions/24953136/

0 votes

J'ai la version 1.4.4 de Memcached (la dernière version disponible que je peux obtenir de notre dépôt "personnalisé"). Et la version 2.2.0 de l'extension PHP. Je ne trouve nulle part si cela fonctionnera ou non, cependant

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X