[horde] Memcache server questions
Michael M Slusarz
slusarz at horde.org
Mon Nov 17 01:24:42 UTC 2008
Quoting Kevin Konowalec <webadmin at ualberta.ca>:
> Michael:
>
> How do you set memcache up to do that? At the moment we have a
> cluster of servers that horde points at but if any one of those
> servers goes down the sessions stored on it are lost. How can you
> set it up so memcache servers are truly redundant (ie so sessions
> are not lost if one machine fails)?
If you want true, 100% fool-proof redundancy, then you will have to
understand that memcache-only sessions is *NOT* designed to do this.
There are several hacks to improve the redundancy of the servers (see
below), but they are all workarounds to the underlying issue that
memcache was never meant to reliably store persistent data. memcache
was designed as a caching backend, and doing anything else on top of
that is necessarily stretching what the original design decisions
meant to accomplish.
The implementation of the Horde memcache session handler has been
based around several ideas:
1.) A memcache server will rarely crash. The memcache process itself
is not a particularly complex, nor process/memory intensive process
(most likely, an installation will run into issues with bandwidth
limitations long before they will have issues with load on a server).
And a assumption I use when coding for large installations is that the
memcache processes live on their own boxes (Obviously, that is not a
requirement- I run a memcache process on the same server as the
fastcgi processess for example). As such, redundancy is important,
but not as important as performance. This last portion ties in with
number 2:
2.) A session timeout due to a memcache failure is to be avoided, if
possible, but is not a catastrophic event. Thus, trapping session
failures events and provided a clean exit and proper error messages to
the user is important. If running a cluster of memcache machines,
failure of the server holding the session information will not take
down the entire system - a user will be able to login immediately
after a session failure with their session information being stored on
one of the new
That being said, the following two solutions can improve redundancy of
the servers:
1.) Use a SQL backend. This will provide the best redundancy, with
the downside of being more resource intensive (although we only write
to the SQL backend if the session data has changed, and only after the
page is displayed to the user).
2.) Use the session handler. The memcache module provides a session
handler that is different than the Horde session handler, but may
provide better redundancy. Do note:
* The main functional difference between the two is that the
"memcache" handler will not provide Horde session information, while
the "Horde memcache" handler will
* I don't know if the "memcache" handler is smart enough to not
write to the backend if the session data hasn't changed. If not, the
"Horde memcache" handler has a performance improvement here.
* If willing to run the beta version of the memcache module
(version 3+; as opposed to the stable version 2 branch), there is an
option to adding redundancy to session data if using "memcache"
handler. This is something that is no currently possible with "Horde
memcache" handler since the PECL API does not expose an option to
determine how many servers to write a key to. See, e.g.,
http://pecl.php.net/bugs/bug.php?id=11637
Obviously there is no way to know how any given installation has their
backend setup, but I honestly can't think of a reason why you wouldn't
want to combine all your memcache servers into a single pool (as
opposed to breaking them up into smaller pools). A site that has, for
example, several boxes running lighttpd (or an equivalent) as a
frontend, and multiple boxes running fastcgi and multiple boxes
running memcached in the backend gives the prized goal of an
installation where all elements are hotswappable (along with the
advantage that a single configuration for all elements is needed).
michael
--
___________________________________
Michael Slusarz [slusarz at horde.org]
More information about the horde
mailing list