Colleghi!Sessioni Failover con PHP-memcache contro memcached
Sto eseguendo php 5.3 (5.3.8) con la libreria client memcache (2.2.6) (http://pecl.php.net/package/memcache) per gestire il server memcached. Il mio obiettivo è quello di avere una soluzione di failover per le sessioni del motore, vale a dire:
- Solo nativo supporto sessioni PHP (nessun gestori personalizzati)
- pochi server memcached nel pool
Quello che mi aspetto è che nel caso in cui uno dei server memcached sia inattivo, php tenterà di utilizzare il secondo server nel pool [lo collegherà e diventerà felice], tuttavia quando il primo server memcached nel pool è inattivo sto ricevendo il seguente errore:
Session start failed. Original message: session_start(): Server 10.0.10.111 (tcp 11211) failed with: Connection refused (111)
mentre impostazioni PHP rilevanti sono:
session.save_handler memcache
session.save_path tcp://10.0.10.111:11211?persistent=1&weight=1&timeout=1&retry_interval=10, tcp://10.0.10.110:11211?persistent=1&weight=1&timeout=1&retry_interval=10
e memcache impostazioni (mentre penso che è vicino allo standard) sono:
Directive Local Value
memcache.allow_failover 1
memcache.chunk_size 8192
memcache.default_port 11211
memcache.default_timeout_ms 1000
memcache.hash_function crc32
memcache.hash_strategy standard
memcache.max_failover_attempts 20
Memcached ancora in esecuzione sul secondo server e perfettamente accessibile da il server Web:
telnet 10.0.10.110 11211
Trying 10.0.10.110...
Connected to 10.0.10.110 (10.0.10.110).
Escape character is '^]'.
get aaa
END
quit
Connection closed by foreign host.
Quindi, in altre parole, invece di interrogare tutto o Se i server elencati si bloccano sequenzialmente dopo un tentativo fallito di connettere il primo server nella coda. Finalmente mi rendo conto che ci sono versioni della libreria client 3.0.x disponibili, tuttavia non sembra troppo affidabile per me dato che è ancora in versione beta.
Si prega di consigli su come ottenere il comportamento desiderato con PHP standard, client lib e server.
Grazie mille!
migliore, Eugene
Sei sicuro che la direttiva session.save_path consente più valori (separati da virgola)? Non ho visto alcun esempio reale che esamina i documenti php. –
@Mike Sicuramente lo fa http://php.net/manual/en/memcached.sessions.php: 'Definisce una virgola separata da hostname: porta le voci da utilizzare per il pool del server di sessione, ad esempio "sess1: 11211, sess2 : 11211" '. – Eugene
Grazie per il link, non ho visto quella pagina, dovrebbe essere almeno referenziato dai documenti di sessione, tipo sepolto sotto memcached. Nell'OP si menziona l'errore; 'Server 10.0.10.111 (tcp 11211) non riuscito', e hai dato l'esempio che puoi telnet in 10.0.10.110, puoi confermare che puoi effettivamente telnet in 10.0.10.111? –