Entrada

Como instalar memcached. Guía de instalación y uso de memcached

Memcached es un sistema de cache que almacena datos, arrays u objetos memoria RAM, reduciendo por ejemplo peticiones a bases de datos. Al cachear un site conseguimos que se cargue mucho más rápido, mejorando la experiencia del usuario, haciendo nuestro sitio más rápido, y que sea mejor valorado por Google, en consecuencia mejoramos nuestro posicionamiento en Google.

Sites tan conocimos como YouTube, Facebook o Twitter usan memcache.

Ya he instalado 3 veces memcache y siempre encuentro los mismos artículos, copiados unos de otros, algunos copian sin tener ni idea lo que están copiando (simplemente spammers), otros copian comandos o ejecuciones que no son necesarios pero como los han visto pues los copian también, pero lo mejor de todo es que siempre explican la misma versión, nadie se ha puesto a compilar e instalar la ultima versión estable de memcache, porque claro todo es una copia de algún artículo que lo contaba cuando fue la última versión estable.

Yo lo voy a hacer desde 0, compilando e instalando la última versión de memcache y sus dependencias. En próximos artículos explicaré como crear un paquete .rpm a partir de todo lo que se vaya a compilar e instalar de memcache, así la próxima vez tan solo tendremos que instalar el .rpm y listo.

De momento esta es una guía para la instalación de la última versión estable de memcache hasta la fecha.

Antes de comenzar, a la hora de compilar e instalar el software uno de los directorios por defecto y el más común es /usr/local/src. Pero como siempre todos los artículos o foros que he leído instalan todo en este directorio sin orden alguno, ya sea por desconocimiento (copiar lo que han leído en otro sitio) o por otra razón que no consigo entender, pero así queda muy “sucio” y no hay control de que archivos se han instalado en cada compilación. Yo voy a realizar toda la instalación en la carpeta /opt, especificando subdirectorios para cada compilación. /opt es un directorio reservado para librerías estáticas y la instalación de software y aplicaciones que no pertenecen directamente a la versión del sistema que tenemos instalado o a la instalación de software de terceros (third party applications), lo ideal para instalar memcache y sus dependencias.

Lo primero instalaremos una dependencia de memcache, se trata de la librería libevent. Libevent proporciona un mecanismo basado en una API para ejecutar una función de callback cuando ocurre un evento específico en un descriptor de archivo o después de haber alcanzado un tiempo de espera. En definitiva que manipula bucles de eventos en servidores o la maquina que se instale. Memcache necesitará de esta librería para su gestión.

El site oficial es el siguiente: http://monkey.org/~provos/libevent/

Todo lo podemos descargar dentro de nuestra carpeta home, por ejemplo yo descargaré y descomprimiré todo dentro de /home/pedro, pero la instalación se hará en /opt

creo la carpeta en /opt para libevent donde se instalará

1
# mkdir /opt/libevent

Situado en /home/pedro (cada uno en su carpeta de usuario o donde quiera) Nos descargamos la última versión estable de libevent

1
# wget http://monkey.org/~provos/libevent-2.0.10-stable.tar.gz
1
2
3
4
5
6
7
8
9
10
11
--2011-03-15 10:43:31--  http://monkey.org/~provos/libevent-2.0.10-stable.tar.gz
Resolviendo monkey.org... 75.102.5.19
Connecting to monkey.org|75.102.5.19|:80... conectado.
Petición HTTP enviada, esperando respuesta... 200 OK
Longitud: 793010 (774K) [application/x-gzip]
Saving to: `libevent-2.0.10-stable.tar.gz'

100%[==============================>] 793.010      406K/s   in 1,9s

2011-03-15 10:43:34 (406 KB/s) - `libevent-2.0.10-stable.tar.gz' saved [793010/793010]

Compilamos y especificamos que la instalación se haga en /opt/libevent

1
# ./configure -prefix /opt/libevent/

Me ha dado error el parámetro -prefix, en la documentación viene como –prefix o –prefix=/DIRECTORIO, pero estaba dando error. La opcion correcta es -prefix /DIRECTORIO

Si todo ha ido ok, ejecutamos el make para generar los archivos de instalación:

1
# make

Si todo va ok, instalamos.

1
# make install

Si por cualquier caso, quisierais cambiar el path de instalación después de hacer el make, habría que ejecutar make clean para borrar los archivos de compilación generados.

Ahora tenemos que usar el comando ldconfig para bindear la ruta de la librería que se acaba de instalar.

1
# cd /etc/ld.so.conf.d/

Tendrá que existir un archivo llamado libevent.conf o similar. Sino existe lo creamos. Lo abrimos con un editor.

1
# vi libevent.conf 

y añadimos la ruta de la carpeta de librerias de libevent que acabmos de instalar

1
/opt/libevent/lib/

Después lanzamos el comando ldconfig para que finalmente realice el bindeo.

1
# /sbin/ldconfig

Bien, pues hasta aquí ya tenemos la dependencia de memcache. Ahora pasamos a instalar memcache.

Descargamos la última versión de memcache y la descomprimimos

1
2
3
# wget http://memcached.googlecode.com/files/memcached-1.4.5.tar.gz
# tar xvzf memcached-1.4.5.tar.gz
# cd memcached-1.4.5

Creamos la carpeta donde vamos a instalar memcache:

1
# mkdir /opt/memcached

Realizamos la compilación de memcache especificando la ruta de instalación y la ruta donde se encuentra instalado la dependencia de libevent

1
# ./configure --with-libevent=/opt/libevent/ --prefix=/opt/memcached

Si todo ha ido ok, realizamos el make y el make install

1
2
# make
# make install

Tendremos que crear un usuario que será el que correrá el demonio de memcached. Podemos crear el usuario memcache. Primero comprobamos que no lo tengamos creado. Este paso se puede saltar si es la primera vez que se instala porque es una simple comprobación.

1
# cat /etc/passwd | grep memcache

Creamos el usuario

1
# /usr/sbin/useradd memcached

Ahora al hacer la comprobación vemos que ya existe

1
2
# cat /etc/passwd | grep memcached
memcached:x:505:505::/home/memcached:/bin/bash

Lanzamos el demonio de memcached

1
# /opt/memcached/bin/memcached -d -m 512 -u memcached -p 11211 -l localhost
  • -m 512. Indica la memoria en MBytes que vamos a usar de la memoria RAM
  • -u memcached: el usuario con el que lanzamos el demonio
  • -p 11211. Es el puerto de escucha, donde a través de la API en php, y demás lenguajes realizaremos la gestión de elementos cacheados
  • -l localhost: la IP en que se escuchará el servicio

Comprobamos que esta ejecutado el servicio

1
2
3
# ps -ef | grep memcached
505      25097     1  0 11:18 ?        00:00:00 /opt/memcached/bin/memcached -d -m 512 -u memcached -p 11211 -l localhost
root     25104   685  0 11:18 pts/1    00:00:00 grep memcached

Y comprobamos los puertos, los protocolos de red e ips que se están usando

1
2
3
# /usr/sbin/lsof -i -P -n | grep 11211
memcached 25097 memcached   36u  IPv4 627100       TCP 127.0.0.1:11211 (LISTEN)
memcached 25097 memcached   37u  IPv4 627101       UDP 127.0.0.1:11211

En este punto, ya tenemos instalado memcache en nuestro servidor. Podemos usar alguna herramienta para visualizar el uso de la cache en ram con memcached, esta herramienta es un script en perl con el que tambien podemos probar que memcache se ha instalado bien y esta funcionando.

Para poder utilizarlo en una aplicación web en php, necesitamos añadir el módulo de php.

Creamos una nueva carpeta en el directio /opt para instalar la última versión del módulo pecl de memcache para php

1
# mkdir /opt/pecl_memcache 

Descargamos el modulo de memcache para php y descomprimimos

1
2
3
# wget http://pecl.php.net/get/memcache-3.0.5.tgz
# tar xvzf memcache-3.0.5.tgz
# cd memcache-3.0.5

Lanzamos la compilación especificando la nueva ruta y habilitando memcache

1
# ./configure --enable-memcache --prefix=/opt/pecl_memcache/

Durante el proceso de compilación me ha dado un warning pidiéndome una versión más actualizada del paquete re2c

checking for re2c... no configure: WARNING: You will need re2c 0.13.4 or later if you want to regenerate PHP parsers.

En caso de que no este instalado se puede instalar muy facilmente con:

1
# yum install re2c

o si esta instalado pero necesita una actualización, hacer lo siguiente:

1
# yum update re2c

En caso de que no se actualice, habrá que añadir un repositorio adicional. Yo he añadido el repositorio para RedHat 5 de dag wieers http://dag.wieers.com/rpm/FAQ.php#B2

Ahora al actualizar la versión de re2c, ya no aparece el warning.

checking for re2c... re2c checking for re2c version... 0.13.5 (ok)

Ahora que la compilación de devuelve ningún warning seguimos con la instalación.

1
2
3
# make
# make test
# make install

Installing shared extensions: /usr/lib64/php/modules/

En este punto ya tendremos el módulo de memcache para php creado.

1
2
# cd /usr/lib64/php/modules/
# ll

total 3600 -rwxr-xr-x 1 root root 33728 nov 13 2009 dbase.so -rwxr-xr-x 1 root root 180080 nov 13 2009 dom.so -rwxr-xr-x 1 root root 370240 nov 13 2009 gd.so -rwxr-xr-x 1 root root 28848 nov 13 2009 json.so -rwxr-xr-x 1 root root 2028272 nov 13 2009 mbstring.so -rwxr-xr-x 1 root root 37424 sep 10 2009 mcrypt.so -rwxr-xr-x 1 root root 408037 mar 15 12:05 memcache.so -rwxr-xr-x 1 root root 116432 nov 13 2009 mysqli.so -rwxr-xr-x 1 root root 50448 nov 13 2009 mysql.so -rwxr-xr-x 1 root root 28296 nov 13 2009 pdo_mysql.so -rwxr-xr-x 1 root root 102448 nov 13 2009 pdo.so -rwxr-xr-x 1 root root 24200 nov 13 2009 pdo_sqlite.so -rwxr-xr-x 1 root root 15416 oct 29 11:57 phpcups.so -rwxr-xr-x 1 root root 28624 nov 13 2009 snmp.so -rwxr-xr-x 1 root root 31728 nov 13 2009 xmlreader.so -rwxr-xr-x 1 root root 32272 nov 13 2009 xmlwriter.so -rwxr-xr-x 1 root root 29792 nov 13 2009 xsl.so -rwxr-xr-x 1 root root 73472 nov 13 2009 zip.so

Ya estamos cerca, tan sólo queda añadirlo al php.ini

1
# vi /etc/php.ini

Dentro del archivo colocar al inicio de la carga de las extensiones la siguiente linea:

1
extension=memcache.so

Por último reiniciamos apache

1
# /etc/init.d/httpd restart

La forma mas rápida de comprobar que el módulo está cargado es crear un fichero php con la funcion phpinfo();

Esta entrada está licenciada bajo CC BY 4.0 por el autor.