2014-07-25 8 views
6

Mam kilka serwerów Memcached do użycia jako pamięć sesji PHP, ale pomimo próby różnych ustawień nie mogę uzyskać kluczy sesji, aby pojawić się na obu serwerach.PHP Memcached session replika issue

Moja php.ini jest następujący:

session.save_handler = memcached 
session.save_path = "192.168.134.38:11211,192.168.134.234:11211" 

Moja memcached.ini jest warianty:

extension=memcached.so 
memcached.sess_consistent_hash=1 
memcached.sess_number_of_replicas=1 
memcached.sess_binary=1 

Jeśli uruchomić memcached użyciu -vv widzę klawisze są zapisywane na pierwszy serwer:

<30 new auto-negotiating client connection 
30: Client using the binary protocol 
<30 Read binary protocol data: 
<30 0x80 0x0c 0x00 0x28 
<30 0x00 0x00 0x00 0x00 
<30 0x00 0x00 0x00 0x28 
<30 0x00 0x00 0x00 0x00 
<30 0x00 0x00 0x00 0x00 
<30 0x00 0x00 0x00 0x00 
<30 GET memc.sess.key.9bn8cdu9c1j7ko1tmflgr433k1 
>30 Writing bin response: 
>30 0x81 0x0c 0x00 0x28 
>30 0x04 0x00 0x00 0x00 
>30 0x00 0x00 0x03 0xc6 
>30 0x00 0x00 0x00 0x00 
>30 0x00 0x00 0x00 0x00 
>30 0x00 0x00 0x00 0x00 
<30 Read binary protocol data: 
<30 0x80 0x01 0x00 0x28 
<30 0x08 0x00 0x00 0x00 
<30 0x00 0x00 0x03 0xcb 
<30 0x00 0x00 0x00 0x00 
<30 0x00 0x00 0x00 0x00 
<30 0x00 0x00 0x00 0x00 
<30 SET memc.sess.key.9bn8cdu9c1j7ko1tmflgr433k1 Value len is 923 
>30 Writing bin response: 
>30 0x81 0x01 0x00 0x00 
>30 0x00 0x00 0x00 0x00 
>30 0x00 0x00 0x00 0x00 
>30 0x00 0x00 0x00 0x00 
>30 0x00 0x00 0x00 0x00 
>30 0x00 0x00 0x00 0x05 
<30 Read binary protocol data: 
<30 0x80 0x07 0x00 0x00 
<30 0x00 0x00 0x00 0x00 
<30 0x00 0x00 0x00 0x00 
<30 0x00 0x00 0x00 0x00 
<30 0x00 0x00 0x00 0x00 
<30 0x00 0x00 0x00 0x00 
>30 Writing bin response: 
>30 0x81 0x07 0x00 0x00 
>30 0x00 0x00 0x00 0x00 
>30 0x00 0x00 0x00 0x00 
>30 0x00 0x00 0x00 0x00 
>30 0x00 0x00 0x00 0x00 
>30 0x00 0x00 0x00 0x00 
<30 connection closed. 

Jednak drugi serwer po prostu łączy się/rozłącza, ale nic nie jest przechowywane:

<30 new auto-negotiating client connection 
30: Client using the ascii protocol 
<30 quit 
<30 connection closed. 

Tak szybko, jak zabijesz pierwsze sesje serwera, zostaną utracone i nie nastąpi przełączenie awaryjne.

Ktoś wie, co się tutaj dzieje?

Edit:

Stworzyliśmy kilka sesji w różnych przeglądarkach, wygląda na to, że klawisze są rozmieszczone, ale nie replikowane.

Serwer 1:

stats cachedump 12 100 
ITEM memc.sess.key.80iie5lhm36mddkekdk488q923 [922 b; 1406287763 s] 

Server 2:

stats cachedump 12 100 
ITEM memc.sess.key.ehd1nsm6icc2qsotbkcp8i9sd7 [874 b; 1406287898 s] 
ITEM memc.sess.key.d3p0id333ggbd0004n4rcc4890 [875 b; 1406287868 s] 
ITEM memc.sess.key.7hek9e2aakgqv9sm2bcq5fbfb3 [922 b; 1406287842 s] 

Odpowiedz

7

Okazuje się, że wersja memcached pakiecie z Ubuntu 14.04 (2.1.0) nie obsługuje opcji sess_number_of_replicas. Zainstalowaliśmy najnowszą wersję PECL, co rozwiązało problem.