En esta ocasión vamos a ver cómo instalar y configurar MemCached en Solaris 10, en 32bits. En otro post vimos cómo Instalar MemCached en Solaris 10 en 64bits, debéis tener en cuenta que si lo instalamos en 32bits no podremos poner un tamaño de caché superior a 4Gb, a parte de esto, no tenemos más limitaciones.
La instalación de MemCached necesita de la biblioteca LibEvent, por lo tanto, primero deberemos descargar y compilarla. En nuestro ejemplo vamos a utilizar la siguiente estructura:
$MEMCACHED_HOME=/opt/memcached/32Y crearemos el usuario <memcached> y el project <user.memcached> para gestionar el uso de recursos dentro del sistema. Además, haremos que nuestro servidor de MemCached esté ejecutado -y controlado- mediante SMF, por lo tanto, podremos incluirlo como servicio requerido.
$LIBEVENT_HOME=/opt/memcached/libevent/32
Para aquellos que no tenéis la posibilidad de compilar los paquetes, os he dejado uno listo para instalar -en el path </opt/memcached> en Solaris 10 SPARC de MemCached 1.4.5 32bits y Solaris 10 X86 de MemCached 1.4.5 32bits
Instalación de LibEvent (32Bits)
$ wget http://www.monkey.org/%7Eprovos/libevent-1.4.13-stable.tar.gzComprobamos que todo se ha instalado correctamente y que no tenemos dependencias fallidas
$ gtar zxpf libevent-1.4.13-stable.tar.gz
$ cd libevent-1.4.13-stable
$ ./configure --enable-static --prefix=/opt/memcached/libevent/32
$ make
# make install
$ ldd /opt/memcached/libevent/32/lib/libevent.so
libnsl.so.1 => /lib/libnsl.so.1
librt.so.1 => /lib/librt.so.1
libresolv.so.2 => /lib/libresolv.so.2
libsocket.so.1 => /lib/libsocket.so.1
libc.so.1 => /lib/libc.so.1
libgcc_s.so.1 => /usr/sfw/lib/libgcc_s.so.1
libmp.so.2 => /lib/libmp.so.2
libmd.so.1 => /lib/libmd.so.1
libscf.so.1 => /lib/libscf.so.1
libaio.so.1 => /lib/libaio.so.1
libdoor.so.1 => /lib/libdoor.so.1
libuutil.so.1 => /lib/libuutil.so.1
libgen.so.1 => /lib/libgen.so.1
libm.so.2 => /lib/libm.so.2
/platform/SUNW,Sun-Fire-280R/lib/libc_psr.so.1
/platform/SUNW,Sun-Fire-280R/lib/libmd_psr.so.1
Instalación de MemCached (32bits)
En la instalación de MemCached, vamos a forzar a nuestro linker para que se asocie con la biblioteca libevent que hemos creado, es decir, vamos a utilizar el flag <:-R> y de esta forma, no será necesario exportar la variable de entorno LD_LIBRARY_PATH_32. Para ello, deberemos utilizar la variable de entorno LDFLAGS que nos permitirá incluirlo en el sistema de configuración de MemCache.
Además, existe un bug en Solaris 10 que hace que el sistema incluya la opción <-pthread> que en algunas versiones antiguas de GCC no es válida, así que nos muestra el error:
gcc: unrecognized option `-pthread'Para solucionarlo, simplemente exportaremos el valor a <-pthreads> en $CFLAGS y configuraremos. Si queréis más información aquí esta el link al bug
$ wget http://memcached.googlecode.com/files/memcached-1.4.5.tar.gzComprobamos que se ha instalado correctamente y que no tiene dependencias fallidas
$ gtar zxpf memcached-1.4.5.tar.gz
$ cd memcached-1.4.5
$ export LDFLAGS="-R/opt/memcached/libevent/32/lib -R/usr/sfw/lib"
$ export CFLAGS="-pthreads -O3"
$ ./configure --with-libevent=/opt/memcached/libevent/32 --prefix=/opt/memcached/32
$ make
# make install
$ ldd /opt/memcached/32/bin/memcachedConfiguración MemCached
libumem.so.1 => /lib/libumem.so.1
libnsl.so.1 => /lib/libnsl.so.1
libsocket.so.1 => /lib/libsocket.so.1
libevent-1.4.so.2 => /opt/memcached/libevent/32/lib/libevent-1.4.so.2
libc.so.1 => /lib/libc.so.1
libmp.so.2 => /lib/libmp.so.2
libmd.so.1 => /lib/libmd.so.1
libscf.so.1 => /lib/libscf.so.1
librt.so.1 => /lib/librt.so.1
libresolv.so.2 => /lib/libresolv.so.2
libgcc_s.so.1 => /usr/sfw/lib/libgcc_s.so.1
libdoor.so.1 => /lib/libdoor.so.1
libuutil.so.1 => /lib/libuutil.so.1
libgen.so.1 => /lib/libgen.so.1
libaio.so.1 => /lib/libaio.so.1
libm.so.2 => /lib/libm.so.2
/platform/SUNW,Sun-Fire-280R/lib/libc_psr.so.1
/platform/SUNW,Sun-Fire-280R/lib/libmd_psr.so.1
A continuación vamos a crear el usuario y grupo <memcached> y el project <user.memcached> -recordar que SMF necesita hacer un chdir al home del usuario-
# groupadd memcacheCreamos el Manifest para MemCached -en mi caso he decidido ponerlo en <application/cache> pero puedes ponerlo donde quieras-
# useradd -g memcache -s /bin/bash -d /export/home/memcache -m memcache
# projadd -G memcache -c 'MemCache Project' user.memcache
# cd /var/svc/manifest/application/cache/Y ahora, el Method para MemCached
# /usr/sfw/bin/wget http://blog.sfchildren.com/blogger/memcached/svc/memcached_1.xml
# svccfg
svc:> validate memcached_1.xml
svc:> import memcached_1.xml
svc:> quit
# cd /lib/svc/methodYa hemos instalado todos los requisitos de Solaris SMF, sin embargo, hemos declarado que guarde el <PID> en <$MEMCACHED_HOME/run>, por lo tanto, debemos crear el directorio
# /usr/sfw/bin/wget http://blog.sfchildren.com/blogger/memcached/svc/memcached_1
# chmod 555 memcached_1
# chown root:bin memcached_1
# mkdir /opt/memcached/32/runAhora ya podemos activar nuestro servicio MemCached utilizando el FRMI <memcached_1>
# chown memcache:memcache /opt/memcached/32/run
# chmod 750 /opt/memcached/32/run
# svcs memcached_1Conclusiones
STATE STIME FMRI
disabled 11:37:41 svc:/application/cache/memcached_1:memcached_default32bits
# svcadm enable memcached_1
# svcs -p memcached_1
STATE STIME FMRI
online 12:04:25 svc:/application/cache/memcached_1:memcached_default32bits
12:04:25 18580 memcached
En esta ocasión hemos visto cómo instalarlo y configurarlo, la verdad es que no requiere de mucho tiempo -ni conocimientos- y, al introducir el control dentro de Solaris SMF, podemos gestionar las dependencias, por ejemplo, si nuestro memcached se cae, el servicio de Tomcat gestionado por SMF se marque como degraded
Referencias
hola que tal ,muy interesante tu articulo
ResponderEliminaruna pregunta
como hago para levantar dos servidores memcached en una misma maquina?
hago esto para una memcached
svccfg -s memcached setprop memcached/options='("-u" "-p" "11211" "noaccess" "-m" "2048")'
svcadm refresh memcached
y luego le hago enable
pero si quiero levantar otra memcached en otro puerto como seria el procedimiento?
Muchas gracias! :)
Tal y como está "planteado" el manifest sólo puede ejecutar un servidor de memcached al mismo tiempo, sin embargo, puedes modificar el manifest para poder incluir varias "instancias".
ResponderEliminarHe creado un manifest de ejemplo con dos instancias: port_11211 y port_11214. Ambas se ejecutan con el mismo usuario/project.
Puedes descarte un Ejemplo de MemCached Múltiples para Solaris 10
Espero que te sirva de ayuda/ejemplo y muchas gracias por tu comentario.
Un Saludo,
Urko
si la verdad que me ah servido mucho, estoy haciendo un TP para mi facultad, con memcached y me piden que levante dos servidores. Y busque por toda la web y mucha informacion no hay , lo mas completito que vi es este blog!
ResponderEliminarMuchas gracias de nuevo!
Hola, estoy tratando de instalar y configurar memcached, necesito un cluster con dos servidores.
ResponderEliminarSegui los pasos que pusiste, pero los resultados que obtuve fueron un poco diferentes, y queria consultarte a ver si me esta faltando algo.
Al instalar libevent no tengo problemas, pero cuando ejecuto ldd /opt/memcached/libevent/32/lib/libevent.so, en el listado me aparece todo lo que pusiste vos menos:
/platform/SUNW,Sun-Fire-280R/lib/libc_psr.so.1
/platform/SUNW,Sun-Fire-280R/lib/libmd_psr.so.1
Despues, al instalar memcached, cuando ejecuto make me sigue apareciendo gcc: unrecognized option `-pthread', por lo que en vez de poner $ export CFLAGS="-pthreads -O3", probe con $ export CFLAGS="-pthread -O3" y con eso no volvi a tener problemas al ejecutar make.
Al poner $ ldd /opt/memcached/32/bin/memcached, tambien encontre algunas diferencias con lo que pusiste vos:
No me aparece:
libdoor.so.1 => /lib/libdoor.so.1
libaio.so.1 => /lib/libaio.so.1
/platform/SUNW,Sun-Fire-280R/lib/libc_psr.so.1
/platform/SUNW,Sun-Fire-280R/lib/libmd_psr.so.1
Y me aparece:
libpthread.so.1 => /lib/libpthread.so.1
Bueno, no se si esas diferencias hacen a una instalacion incompleta, queria saber tu opinion. Por lo pronto voy a seguir adelante con los pasos para la configuracion, a ver si llego a poder levantar los dos servidores.
Muchas gracias!!
Hola,
ResponderEliminarLa verdad es que cuando hablo de "vamos a comprobar que todo está OK", quiero referirme a que las bibliotecas de enlace dinámico <.so> las encuentra y no aparece un mensaje diciendo <referencia no encontrada>.
Sobre las <so> que muestro son para una Sun Fire 280R, por eso ves lo de:
/platform/SUNW,Sun-Fire-280R/lib/libc_psr.so.1
/platform/SUNW,Sun-Fire-280R/lib/libmd_psr.so.1
Y otras más que son necesarias en Solaris SPARC, si tu arquitectura es x86 serán otras.
Aquí te dejo el resultado de ldd con una máquina Solaris x86-64
# ldd /opt/memcached/32/bin/memcached
libumem.so.1 => /lib/libumem.so.1
libnsl.so.1 => /lib/libnsl.so.1
libsocket.so.1 => /lib/libsocket.so.1
libevent-1.4.so.2 => /opt/memcached/libevent/32/lib/libevent-1.4.so.2
libpthread.so.1 => /lib/libpthread.so.1
libc.so.1 => /lib/libc.so.1
libmp.so.2 => /lib/libmp.so.2
libmd.so.1 => /lib/libmd.so.1
libscf.so.1 => /lib/libscf.so.1
librt.so.1 => /lib/librt.so.1
libresolv.so.2 => /lib/libresolv.so.2
libgcc_s.so.1 => /usr/sfw/lib/libgcc_s.so.1
libdoor.so.1 => /lib/libdoor.so.1
libuutil.so.1 => /lib/libuutil.so.1
libgen.so.1 => /lib/libgen.so.1
libaio.so.1 => /lib/libaio.so.1
libm.so.2 => /lib/libm.so.2
# uname -p
i386
# isainfo -v
64-bit amd64 applications
mon sse3 sse2 sse fxsr mmx cmov amd_sysc cx8 tsc fpu
32-bit i386 applications
mon sse3 sse2 sse fxsr mmx cmov sep cx8 tsc fpu
También verás una "diferente" -probablemente-: libumem.so.1
Esto es porque yo tengo asignado que "precarge" esta biblioteca que proporciona mejor rendimiento en el acceso a memoria y, puedes ver los memory leaks de las aplicaciones.
Para saber qué tipo de arquitectura de Solaris es, puedes ver Cómo saber si Solaris soporta 64bis y Cómo saber si un binario es de 64bits o 32bits
Espero haberte ayudado a resolver tus dudas,
Un Saludo,
Urko
muchas gracias! entonces lo tengo bien instalado.
ResponderEliminarte molesto con una cosa mas.. justo en este momento estoy intentando "prender" los servidores, no se si eso se hace por consola o si hay algun ejecutable (como un servidor opends, que tambien tengo que usar y lo corro con un ejecutable).
Cuando quiero configurar el servidor hago:
ResponderEliminar# svccfg
svc:> select memcached
svc:/application/database/memcached> setprop memcached/options=("-u" "nobody" "-m" "2048")
svc:/application/database/memcached> quit
# svcadm refresh memcached
Pero cuando ejecuto svc:> select memcached, me dice:
Pattern 'memcached' doesn´t match any instances or services
Si sabes que puede estar pasando te agradeceria mucho, este blog es lo mas completo que encontre, como dijo Leonel (supongo que estamos con el mismo trabajo practico). Y los problemas que a veces trae la configuracion de las tecnologias que hay usar me traba un poco con el tp!
Muchas gracias por tu tiempo, saludos
Hola,
ResponderEliminarNo te preocupes, no me molesta!
Si has cargado el manifest que yo tengo en el blog, el nombre del serivio es memcached_1.
Puedes utilizar los * para comprobar los servicios declarados, por ejemplo,
# svcs *memcached*
STATE STIME FMRI
online 19:42:43 svc:/application/cache/memcached_1:memcached_default32bits
# svcs memcached_1
STATE STIME FMRI
online 19:42:43 svc:/application/cache/memcached_1:memcached_default32bits
Y ahora, puedes activarlo con
# svcadm enable memcached_1:memcached_default32bits
Y desactivarlo con
# svcadm disable memcached_1:memcached_default32bits
Si tienes que hacer "lo mismo que Leonel", entonces puedes utilizar el otro manifest que incluia dos servidores,
Por cierto, de dónde son esas prácticas? Al final, voy a tener que hacer un post con la solución, xD
Un Saludo,
Urko