phpsessionherokumemcachedmemcachier

How to setup Memcached with failover support in Heroku/PHP 5.6 environment?


Recently, our PHP web app became unavailable for a few minutes since one of our Memcached nodes died (we use Memcachier as a Memcached provider).

This was our user.ini configuration (Heroku uses user.ini as a place where you define your configuration), which worked, but apparently didn't support failover:

session.save_handler=memcached
session.save_path=${MEMCACHIER_SERVERS} # I understand this is redundant, but I just kept it as-is because I didn't write the original user.ini
session.save_path="PERSISTENT=SFSESSID ${MEMCACHIER_SERVERS}"
session.gc_maxlifetime=1209600
session.gc_probability=1

memcached.sess_binary=1
memcached.sess_sasl_username=${MEMCACHIER_USERNAME}
memcached.sess_sasl_password=${MEMCACHIER_PASSWORD}

Our new user.ini configuration, which is aimed to provide failover capability

session.save_handler=memcached
session.save_path="PERSISTENT=SFSESSID ${MEMCACHIER_SERVERS}"
session.gc_maxlifetime=1209600
session.gc_probability=1

memcached.sess_sasl_username=${MEMCACHIER_USERNAME}
memcached.sess_sasl_password=${MEMCACHIER_PASSWORD}
memcached.sess_binary=1
memcached.sess_number_of_replicas=1
# I also tried memcached.sess_consistent_hash=1, to no avail

The MEMCACHIER_SERVERS env var looks like this: 123.45678.us-east-1.heroku.prod.memcachier.com:11211,123.45678.us-east-1.heroku.prod.memcachier.com:11211. I think this means we have 2 nodes.

The problem we are getting with the new configuration are timeouts, and lots of errors regarding PHP session functions (session_start(), session_write_close()).

Why is that happening?

Remember, we're not using Memcached inside our PHP code at all, but only as our session storage engine.

I did try contacting Memcachier support, but the customer representative could only provide recommended PHP code (which we don't need).


Solution

  • Since the bounty expired and the question will get closed soon, I'm gonna go ahead with @jdotjdot's suggestion and switch from Memcachier to MemcachedCloud addon.