Jul 29, 2009 23
Wie kann ich mehrere Instanzen von memcached auf einem Server laufen lassen?
Problem
Ich brauche mehr als einen Memcached Server.
Lösung
Virtuellemaschinen
Ich kann für jeden memcached server eine Virtuellemaschine erstellen.
Probleme
- mehr speicher (system+memcached)
- eine ip addresse pro Instanz
- mehr Aufwand
Multiple Instanzen mithilfe von Ports
Dafür müssen die Skripte init.d und start-memcached gepatched werden um Multiple Instanzen zum laufen zubekommen.
Nach dem patch sucht es nach Konfigurationsdateien die folgendem Muster entsprechen /etc/memcached_*.conf. Wenn es keine Dateien findet benutzt es die /etc/memcached.conf Konfigurationsdatei. Es ist also rückwärtskompatibel.
Wenn du nun 2 memached Instanzen erstellen möchtest kopiere die Konfigurationsdatei und ändere den Port, Speicher …
cp /etc/memcached.conf /etc/memcached_myserver_1.conf cp /etc/memcached.conf /etc/memcached_myserver_2.conf
Befehle
startet alle Server
/etc/init.d/memcached start
startet nur einen bestimmten Server
/etc/init.d/memcached start myserver_1
stopt alle Server
/etc/init.d/memcached stop
stopt nur einen bestimmten Server
/etc/init.d/memcached stop myserver_1
Die Änderungen
/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;


Letzte Kommentare