Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PHP Memcached sessions replica issue

I have setup a couple of Memcached servers to use as PHP session storage, but despite trying various settings I'm unable to get the session keys to appear in both servers.

My php.ini is as follows:

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

My memcached.ini is variations of:

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

If I run memcached using -vv I can see keys are being written to the first server:

<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.

However the second server just gets connects/disconnects, but nothing is stored:

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

So as soon as you kill the first server sessions are lost an there is no failover.

Anyone know what's going on here?

Edit:

We created a few sessions in different browsers, it looks like the keys are being distributed, but not replicated.

Server 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]
like image 536
Philio Avatar asked Jul 25 '14 10:07

Philio


Video Answer


1 Answers

It turns out that the version of memcached bundled with Ubuntu 14.04 (2.1.0) doesn't support the sess_number_of_replicas option. We installed the latest version from PECL and this solved the problem.

like image 138
Philio Avatar answered Oct 02 '22 08:10

Philio