Jul 29, 2009 23
How can i run multiple instances of memcached on one server?
Problem
I need more then one memcached server.
Solution
Virtual machine
I can build for each memcached server a virtal machine.
Problems
- more memory (system+memcached)
- one ip address for each instance
- more work
Multiple instances via ports
For this it needs to patch the init.d and start-memcached scripts to run multiple instances.
After the patch it search for configuration files that match the following pattern /etc/memcached_*.conf. When it found no file it use the /etc/memcached.conf configuration file. So it breaks no backward compatibility.
When you want to create 2 memached instances copy the configuration file and change the port, memory …
cp /etc/memcached.conf /etc/memcached_myserver_1.conf cp /etc/memcached.conf /etc/memcached_myserver_2.conf
Commands
start all servers
/etc/init.d/memcached start
start only a specific server
/etc/init.d/memcached start myserver_1
stop all servers
/etc/init.d/memcached stop
stop only a specific server
/etc/init.d/memcached stop myserver_1
The patches
/usr/share/memcached/scripts/start-memcached
26,30d25 > if (scalar(@ARGV) == 2) { > $etcfile = shift(@ARGV); > $pidfile = shift(@ARGV); > } >
/etc/init.d/memcached
16a17 > DAEMONNAME=memcached 18d18 < NAME=memcached 20d19 < PIDFILE=/var/run/$NAME.pid 26a26,63 > FILES=(/etc/memcached_*.conf); > # check for alternative config schema > if [ -r "${FILES[0]}" ]; then > CONFIGS=(); > for FILE in "${FILES[@]}"; > do > # remove prefix > NAME=${FILE#/etc/}; > # remove suffix > NAME=${NAME%.conf}; > > # check optional second param > if [ $# -ne 2 ]; > then > # add to config array > CONFIGS+=($NAME); > elif [ "memcached_$2" == "$NAME" ]; > then > # use only one memcached > CONFIGS=($NAME); > break; > fi; > done; > > if [ ${#CONFIGS[@]} == 0 ]; > then > echo "Config not exist for: $2" >&2; > exit 1; > fi; > else > CONFIGS=(memcached); > fi; > > CONFIG_NUM=${#CONFIGS[@]}; > for ((i=0; i < $CONFIG_NUM; i++)); do > NAME=${CONFIGS[${i}]}; > PIDFILE="/var/run/${NAME}.pid"; > 30c67 < start-stop-daemon --start --quiet --exec $DAEMONBOOTSTRAP --- > start-stop-daemon --start --quiet --exec "$DAEMONBOOTSTRAP" -- /etc/${NAME}.conf $PIDFILE 50c87 < start-stop-daemon --start --quiet --exec $DAEMONBOOTSTRAP --- > start-stop-daemon --start --quiet --exec "$DAEMONBOOTSTRAP" -- /etc/${NAME}.conf $PIDFILE 54c91 < N=/etc/init.d/$NAME --- > N=/etc/init.d/$DAEMONNAME 59a97 > done;


Recent Comments