Can a pool of memcache daemons be used to share sessions more efficiently?
- by Tom
We are moving from a 1 webserver setup to a two webserver setup and I need to start sharing PHP sessions between the two load balanced machines. We already have memcached installed (and started) and so I was pleasantly surprized that I could accomplish sharing sessions between the new servers by changing only 3 lines in the php.ini file (the session.save_handler and session.save_path):
I replaced:
session.save_handler = files
with:
session.save_handler = memcache
Then on the master webserver I set the session.save_path to point to localhost:
session.save_path="tcp://localhost:11211"
and on the slave webserver I set the session.save_path to point to the master:
session.save_path="tcp://192.168.0.1:11211"
Job done, I tested it and it works. But...
Obviously using memcache means the sessions are in RAM and will be lost if a machine is rebooted or the memcache daemon crashes - I'm a little concerned by this but I am a bit more worried about the network traffic between the two webservers (especially as we scale up) because whenever someone is load balanced to the slave webserver their sessions will be fetched across the network from the master webserver. I was wondering if I could define two save_paths so the machines look in their own session storage before using the network. For example:
Master:
session.save_path="tcp://localhost:11211, tcp://192.168.0.2:11211"
Slave:
session.save_path="tcp://localhost:11211, tcp://192.168.0.1:11211"
Would this successfully share sessions across the servers AND help performance? i.e save network traffic 50% of the time. Or is this technique only for failovers (e.g. when one memcache daemon is unreachable)?
Note: I'm not really asking specifically about memcache replication - more about whether the PHP memcache client can peak inside each memcache daemon in a pool, return a session if it finds one and only create a new session if it doesn't find one in all the stores. As I'm writing this I'm thinking I'm asking a bit much from PHP, lol...
Assume: no sticky-sessions, round-robin load balancing, LAMP servers.