This repository is private.
All pages are served over SSL and all pushing and pulling is done over SSH.
No one may fork, clone, or view it unless they are added as a member.
Every repository with this icon (
) is private.
Every repository with this icon (
This repository is public.
Anyone may fork, clone, or view it.
Every repository with this icon (
) is public.
Every repository with this icon (
moxi /
README
moxi - a memcached proxy with energy and pep Dependencies: -- libevent, http://www.monkey.org/~provos/libevent/ (libevent-dev) -- libmemcached, http://tangent.org/552/libmemcached.html To compile moxi, after you got the dependencies: ./autogen.sh ./configure make For example, if libevent is installed in /opt/local, you'd do... ./autogen.sh ./configure --with-libevent=/opt/local make Using moxi: In moxi terminology, "upstream" are the memcached clients, and "downstream" are the memcached servers. moxi -z <port=<memcached_host:memcached_port(,*)>> moxi will listen on the given port and accept connections from upstream memcached clients. It will forward requests to downstream memcached servers running on memcached_host:memcached_port. For example... moxi -z 11211=my_memcached_server:11222 Above, moxi will listen on port 11211 and forward requests to the memcached running on my_memcached_server that's listening on port 11222. You can list more than one memcached_host:memcached_port, separated by commas. For example... moxi -z 11211=memcached_1:11211,memcached_2:11211 The default downstream port is 11211, so you can also just use... moxi -z 11211=memcached_1,memcached_2 If you have some memcached servers running on the same server, but on different ports, you can put moxi in front of them with something like... moxi -z 11211=server:11222,server:11233 To get more command line usage info: moxi -h Tests: # To test that moxi still behaves like memcached # and passes all the tests that memcached passes... # make test # To test moxi in a simple proxy topology of... # client <-> moxi <-> memcached # ./t/moxi.pl # To test moxi in a chained proxy topology of... # client <-> moxi <-> moxi <-> moxi <-> memcached # ./t/moxi.pl chain # To test moxi in a fanout topology of... # client <---> moxi <---> memcached # |-> memcached # |-> memcached # |-> memcached # ./t/moxi.pl fanout # To test moxi in a fanout and back in again topology of... # client <---> moxi <---> moxi <-> memcached # |-> moxi <-| # |-> moxi <-| # |-> moxi <-| # ./t/moxi.pl fanoutin # To test moxi proxy cases... # ./moxi -z 11333=localhost:11311 -t 1 python t/moxi_mock.py More notes: If using Linux, you need a kernel with epoll. Sure, libevent will work with normal select, but it sucks. epoll isn't in Linux 2.4 yet, but there's a backport at: http://www.xmailserver.org/linux-patches/nio-improve.html You want the epoll-lt patch (level-triggered). If you're using MacOS, you'll want libevent 1.1 or higher to deal with a kqueue bug. Also, be warned that the -k (mlockall) option to memcached might be dangerous when using a large cache. Just make sure the memcached machines don't swap. memcached does non-blocking network I/O, but not disk. (it should never go to disk, or you've lost the whole point of it) The memcached website is at: http://www.danga.com/memcached/








