Memcached

Posted on Posted in linux, web

Memcached es una utilidad empleada para cachear en memoria RAM datos u objetos continuamente usados, evitando así el acceso continuo a una BD o en definitiva a una unidad de almacenamiento. Para servidores web hay una utilidad llamada memcache, sin D, la cual permite ínter actuar a nuestro servidor con dicha utilidad. Más info aquí.

Para instalarlo en nuestro servidor seguiremos el siguiente procedimiento:

Instalación Memcache

Memcache es la utilidad para PHP, la cual consultará al servidor memcached antes de recurrir a la BD o al Disco Duro. Primero descargamos la utilidad desde aquí o mediante wget:

wget http://pecl.php.net/get/memcache-2.2.6.tgz

Extraemos y nos colocamos en el directorio extraido invocando al phpize, compilador de php.

tar xvfz memcache-2.2.6.tgz
cd memcache-2.2.6
/usr/local/etc2/apache22/php/bin/phpize
./configure --with-apxs=/usr/local/etc/apache22/bin/apxs \
--with-php-config=/usr/local/etc/apache22/php/bin/php-confige
make
make install
php.ini

Modificamos nuestro php.ini, el cual deberemos tenerlo en la carpeta conf del servidor apache, sino lo tenemos lo buscamos en nuestro servidor y lo copiamos:

# locate php.ini
/etc/php5/apache2/php.ini
/etc/php5/cli/php.ini
/root/php-5.3.6/php.ini-development
/root/php-5.3.6/php.ini-production

Modificamos el php.ini para que acepte el nuevo módulo, por debajo de la directiva extensión_dir:

# MEMCACHE
extension=memcache.so

Y reiniciamos el servidor apache, para que cargue el nuevo módulo, ahora si cargamos el php.info de nuestro servidor comprobaremos si lo ha cargado, sino hemos creado una página invocando al php.info aquí un ejemplo:

<?php
phpinfo();
?>

Instalación de Memcached

Ahora vamos con la parte del servidor el cual va a cachear en memoria las peticiones (objetos) más solicitados, facilitándolos a las aplicaciones que lo soliciten. Para compilar la aplicación son necesarias las librerías de libevent, por lo que las instalamos:

yum install libevent-devel

Ahora compilamos e instalamos memcached:

wget http://memcached.googlecode.com/files/memcached-1.4.9.tar.gz
tar –xvzf memcached-1.4.9.tar.gz
cd memcached-1.4.9
./configure --prefix=/usr/local/etc/memcached
make
make install
PATH

Sera necesario configurar el path apuntando a los binarios de memcached:

vi /etc/profile
…
PATH=$PATH:/usr/local/etc/memcached/bin
……
 DEMonio

Por último configuramos el script de arranque:

Lo que hacemos básicamente es iniciar diferentes demonios de memcached cada uno escuchando en un puerto diferente (puerto usado por las aplicaciones que lo requieran)

#!/bin/sh
#
# memcached Startup script for memcached processes
#
# chkconfig: - 90 10
# description: Memcache provides fast memory based storage.
# processname: memcached

# These mappings correspond one-to-one with Drupal's settings.php file.
export PATH=$PATH:/usr/local/etc/memcached/bin

#[ -f memcached ] || exit 0

prog="memcached"

start() {
echo -n $"Starting $prog "
# Sessions cache.
memcached -m 16 -l 0.0.0.0 -p 11211 -d -u nobody
# Default cache.
memcached -m 32 -l 0.0.0.0 -p 11212 -d -u nobody
# Block cache.
memcached -m 32 -l 0.0.0.0 -p 11213 -d -u nobody
# Content cache. Holds fully loaded content type structures.
memcached -m 16 -l 0.0.0.0 -p 11214 -d -u nobody
# Filter cache. Usually the busiest cache after the default.
memcached -m 32 -l 0.0.0.0 -p 11215 -d -u nobody
# Form cache.
memcached -m 32 -l 0.0.0.0 -p 11216 -d -u nobody
# Menu cache.
memcached -m 32 -l 0.0.0.0 -p 11217 -d -u nobody
# Page cache. Bigger than most other caches.
memcached -m 128 -l 0.0.0.0 -p 11218 -d -u nobody
# Views definition cache.
memcached -m 1 -l 0.0.0.0 -p 11219 -d -u nobody
# Views data cache (may need to be increased if heavily used).
memcached -m 32 -l 0.0.0.0 -p 11220 -d -u nobody

# More caches that might be added later:

# Users table.
#/usr/bin/memcached -m 24 -l 0.0.0.0 -p 11219 -d -u nobody
# Path source cache.
#/usr/bin/memcached -m 4 -l 0.0.0.0 -p 11220 -d -u nobody
# Path destination cache.
#/usr/bin/memcached -m 6 -l 0.0.0.0 -p 11221 -d -u nobody
RETVAL=$?
echo
return $RETVAL
}

stop() {
if test "x`pidof memcached`" != x; then
echo -n $"Stopping $prog "
killall memcached
echo
fi
RETVAL=$?
return $RETVAL
}

case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
condrestart)
if test "x`pidof memcached`" != x; then
stop
start
fi
;;
*)
echo $"Usage: $0 {start|stop|restart|condrestart}"
exit 1

esac

exit $RETVAL

Lo agregamos a los runlevels 3,4,5:

chkconfig --add memcached

Arrancamos el servicio y listo, memcached funcionando y sirviendo.

/etc/init.f/memcached start
nobody 19585  0.0  0.0  44696   776 ? Ssl  20:03   0:00 memcached -m 16 -l 0.0.0.0 -p 11211 -d -u nobody
nobody 19592  0.0  0.0  44696   776 ? Ssl  20:03   0:00 memcached -m 32 -l 0.0.0.0 -p 11212 -d -u nobody
nobody 19597  0.0  0.0  43812   768 ? Ssl  20:03   0:00 memcached -m 32 -l 0.0.0.0 -p 11213 -d -u nobody
nobody 19606  0.0  0.0  44836   768 ? Ssl  20:03   0:00 memcached -m 16 -l 0.0.0.0 -p 11214 -d -u nobody
nobody 19613  0.0  0.0  44836   764 ? Ssl  20:03   0:00 memcached -m 32 -l 0.0.0.0 -p 11215 -d -u nobody
nobody 19620  0.0  0.0  44836   768 ? Ssl  20:03   0:00 memcached -m 32 -l 0.0.0.0 -p 11216 -d -u nobody
nobody 19625  0.0  0.0  43812   768 ? Ssl  20:03   0:00 memcached -m 32 -l 0.0.0.0 -p 11217 -d -u nobody
nobody 19634  0.0  0.0  44696   768 ? Ssl  20:03   0:00 memcached -m 128 -l 0.0.0.0 -p 11218 -d -u nobody
nobody 19641  0.0  0.0  44836   768 ? Ssl  20:03   0:00 memcached -m 1 -l 0.0.0.0 -p 11219 -d -u nobody
nobody 19647  0.0  0.0  44696   772 ? Ssl  20:03   0:00 memcached -m 32 -l 0.0.0.0 -p 11220 -d -u nobody

Leave a Reply

Your email address will not be published. Required fields are marked *