PHP memcached session redundancy

memcachememcachedPHPphp-memcached

I'm trying to follow How To Share PHP Sessions on Multiple Memcached Servers article and implement that to my environment:

/etc/php.d/memcache.ini:

# grep -v ^\; /etc/php.d/memcache.ini
extension=memcache.so
memcache.allow_failover=1
memcache.session_redundancy=2
session.save_handler=memcache
session.save_path='tcp://192.168.52.143:11211, tcp://192.168.52.142:11211'
# 

phpinfo();:

# php -i | grep -E 'memcache.allow_failover|memcache.session_redundancy|session.save_handler|session.save_path'
memcache.allow_failover => 1 => 1
memcache.session_redundancy => 2 => 2
session.save_handler => memcache => memcache
session.save_path => tcp://192.168.52.142:11211, tcp://192.168.52.143:11211 => tcp://192.168.52.142:11211, tcp://192.168.52.143:11211
# 

both systems are RHEL6 and running php-5.3.3:

# cat /etc/redhat-release 
Red Hat Enterprise Linux Server release 6.6 (Santiago)
# rpm -q php php-pecl-memcache
php-5.3.3-40.el6_6.x86_64
php-pecl-memcache-3.0.5-4.el6.x86_64
# 

TCP wise: .142 is able to get to .143:11211, and .143 is able to get to .142:11211, SELinux is in Permissive mode.

I am able to see some chunks stored in one memcached server, but not in another.

What am I doing wrong?

Best Answer

That DigitalOcean article I wrote has memcache.session_redundancy, your config file has used memcache.redundancy, both are different and that may be the reason why it isn't working as expected.

The default value of memcache.redundancy is 1 and it works fine for this setup.

extension=memcache.so
memcache.allow_failover=1
memcache.session_redundancy=2
session.save_handler=memcache
session.save_path = 'tcp://192.168.52.143:11211,tcp://192.168.52.142:11211'

http://php.net/manual/en/memcache.ini.php

Edit

Your comment:

IP are in reverse on another server, but syntax is the same.

This is where the problem lies, the session.save_path must be exact on all servers.

So both the servers must have 'tcp://192.168.52.143:11211,tcp://192.168.52.142:11211'

Read Step Two of that article, all 3 servers have the exact same order.

Edit #2

The value of memcache.session_redundancy must be equal to no. of servers + 1 due to a bug in PHP.

So in your case it must be:

memcache.session_redundancy=3