[horde] Memcache server questions
Andrew Morgan
morgan at orst.edu
Tue Mar 22 21:55:09 UTC 2011
On Sun, 16 Nov 2008, Michael M Slusarz wrote:
> 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).
Sorry to revive this old thread...
I'm looking to configure Horde3 to use a pair of memcache servers in a
redundant configuration as described above. However, I am having trouble
translating Michael's comments to the Horde GUI setup options.
Currently, I am using Memcache based sessions with the following config:
$conf['sessionhandler']['type'] = 'memcache';
$conf['sessionhandler']['memcache'] = true;
$conf['memcache']['hostspec'] = array('memcache1.oregonstate.edu');
$conf['memcache']['port'] = array('11211');
$conf['memcache']['weight'] = array();
$conf['memcache']['persistent'] = false;
$conf['memcache']['c_threshold'] = 0;
$conf['memcache']['compression'] = true;
$conf['memcache']['prefix'] = 'hordetest';
$conf['memcache']['large_items'] = true;
$conf['memcache']['enabled'] = true;
What would I change to start using a second, mirrored memcache server
named memcache2?
Thanks,
Andy
More information about the horde
mailing list