A typical Developer Blog
by Gordon Franke
Icon

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;

Related posts:

  1. Wechseln von Doctrine to Doctrine_Core mit einem Befehl Um deinen Code von Doctrine auf Doctrine_Core umzustellen kannst du...

Related posts brought to you by Yet Another Related Posts Plugin.

Author: Gordon Franke

Category: Uncategorized, unix

Tagged: , , , , , ,

3 Responses

  1. Dave sagt:

    Could you post the full files or email me the 2 files? I’m having some problems when trying to run the patch

  2. FYI

    Make sure you check line 1 on /etc/init.d/memcached

    it should be :

    #! /bin/bash

    not

    #! /bin/sh

    else the code will not work.

Leave a Reply

CommentLuv Enabled