martes, 31 de mayo de 2011

Instalación de Sun JDK en Linux para "torpes"

Sencillo ¿¿no...??

Java Coffee House, Thamel, Kathmandu, NepalEs una tarea que seguramente todos hemos realizado: aplicaciones de escritorio, plug-in para el navegador, servidores J2EE...

Este último caso es al que me he enfrentado recientemente: Instalación de JDK 1.6 Update 18 para montar un Weblogic Server 10.3.2 para Grid Control 11g. Y me he encontrado con una situación, infinidad de manuales y ninguno que me guste.

Aunque es una tarea relativamente sencilla creo que se merece unas lineas.

Introducción
Cualquier aplicación escrita en Java debería poder ejecutarse si tenemos instalado el Runtime adecuado, que no es más que un entorno de ejecución Java donde nuestra aplicación encontrará todo lo que necesita para funcionar.

Eso implica instalar la versión correcta a nuestro sistema, ya que para que las aplicaciones sean "portables" es necesario una gran cantidad de versiones del Runtime de Java que se adapten perfectamente a nuestro sistema.

Ésto supone un primer problema:

¿Qué versión de Java descargo?
Varias aclaraciones, aunque las versiones de Java se nombran con números: 4, 5 y 6; el paquete que descarguemos añade un 1 delante: 1.4, 1.5 y 1.6. No he perdido mucho tiempo en buscar información sobres esto, pero si alguien conoce la explicación... encantado de añadirlo.

Hay multitud de ediciones diferentes, me voy a centrar en el JDK de la Java Platform Standard Edition (Java SE): Java SE Downloads

Pero como quizás no sea la adecuada para ti, puedes descargar cualquier versión desde el "archivo" de Oracle: Archive: Java[tm] Technology Products Download

A donde os redireccionará el antiguo enlace de Sun: http://java.sun.com/products/archive/ y donde se puede encontrar cualquier versión que necesites. En mi caso la recomendada para Grid Control es la JDK 1.6 Update 18.

coffee klatschInstalación
Hay dos opciones de instalación: RPM o auto-instalable. Si vuestro sistema utiliza packetes RPM, creo que no hay duda, y sobre la instalación tampoco creo que las tengamos:
  1. Una vez descargado el archivo jdk-6u18-linux-x64-rpm.bin lo convertimos en ejecutable con: $ chmod u+x jdk-6u18-linux-x64-rpm.bin
  2. Ejecutamos $ ./jdk-6u18-linux-x64-rpm.bin y seguimos las pocas indicaciones.
  3. Borramos los RPMs si queremos ahorrar espacio.
No dudo que esta parte la habréis hecho infinidad de veces, justo después ¿os encontráis con ésto?

# java -version
java version "1.5.0"
gij (GNU libgcj) version 4.4.5 20101112 (Red Hat 4.4.5-2)

Configuración
A partir del 2006 Sun liberaliza Java, por lo que nos encontramos varias alternativas lo suficientemente válidas para la mayoría de casos. En el ejemplo anterior GNU Compiler for Java pero también se puede optar por OpenJDK.

Para el caso que describo, Weblogic Server necesita el Development Kit de Sun, sin opciones, si configuramos el JAVA_HOME y el PATH con la nueva instalación, ya podríamos acabar, pero...

Gracias al comando "alternatives" podremos gestionar tanto los "runtimes" que tenga nuestro sistema como el nuevo que acabamos de instalar, evitando muchas de las confusiones que puede ocasionar la configuración "manual".

La instalación que hemos realizado la tenemos en /usr/java, además de dos enlaces latest y default que nos servirían en el caso utilizar solo el JDK de Sun. Los "runtimes" que vengan en el sistema seguramente estarán en /usr/lib/jvm, por lo que hacemos un enlace a la nueva instalación:

# ln -s /usr/java/jdk1.6.0_18 /usr/lib/jvm/java-1.6.0-sun

Averiguamos la prioridad de las instalaciones:

# alternatives --display java | grep priori

Lo siguiente será instalar nuestra nueva "alternativa" java con un nivel de prioridad superior al de las ya instaladas:

# alternatives --install /usr/bin/java java /usr/lib/jvm/java-1.6.0-sun/bin/java 16050 \
--slave /usr/bin/rmiregistry rmiregistry /usr/lib/jvm/java-1.6.0-sun/bin/rmiregistry \
--slave /usr/lib/jvm/jre jre /usr/lib/jvm/java-1.6.0-sun/jre/ \
--slave /usr/lib/jvm/jdk jdk /usr/lib/jvm/java-1.6.0-sun

Si nos interesa, podemos hacer lo mismo con el kit de desarrollo completo:

# alternatives --install /usr/bin/javac javac /usr/lib/jvm/java-1.6.0-sun/bin/javac 16050 \
--slave /usr/lib/jvm/java java_sdk /usr/lib/jvm/java-1.6.0-sun \
--slave /usr/bin/javadoc javadoc /usr/lib/jvm/java-1.6.0-sun/bin/javadoc \
--slave /usr/bin/javah javah /usr/lib/jvm/java-1.6.0-sun/bin/javah \
--slave /usr/bin/jar jar /usr/lib/jvm/java-1.6.0-sun/bin/jar \
--slave /usr/bin/rmic rmic /usr/lib/jvm/java-1.6.0-sun/bin/rmic \

Por último, volvemos a configurar la alternativa basándonos en la prioridad:

# alternatives --auto java
# alternatives --auto javac

Y por último, la configuración del man obtenida del siguiente blog:

# (cd /usr/lib/jvm/java-1.6.0-sun; txt="alternatives --install /usr/share/man/man1/java.1 \
man-java.1 /usr/lib/jvm/java/man/man1/java.1 1421 "; \
for f in man/man1/*; do f=`basename $f`; if [ "x$f" != "xjava.1"]; \
then txt="$txt --slave /usr/share/man/man1/$f man-$f /usr/lib/jvm/java/man/man1/$f"; fi; done; `$txt`);

El resultado debería ser parecido a:

# java -version
java version "1.6.0_18"
Java(TM) SE Runtime Environment
Java HotSpot(TM) Server VM

Coffee #2
Entorno
No, no podemos obviar las variables de entorno. Para ello crearemos un archivo en /etc/profiles.d llamado java.sh con el siguiente contenido:

#!/bin/sh
export JAVA_HOME=/usr/lib/jvm/jdk
export JRE_HOME=$JAVA_HOME/jre
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

Oracle
Solo a modo anecdótico, os dejo las recomendaciones de Oracle para el JDK de una instalación de Weblogic Server, digo anecdótico porque creo que para temas no "estrictamente" relaciondos con sus productos no siempre es la mejor fuente de información:
  • No se debe actualizar el JDK, es importante seguir la matriz de versiones certificadas.
  • Instalar en un lugar seguro (¿WTF?), Oracle recomienda ubicarlo bajo el
    directorio $ORACLE_HOME/Middleware, incluso a costa de recibir mensaje de error durante la instalación de WLS (totalmente en desacuerdo, si somos capaces de instalar un Grid Control, deberíamos serlo de mantener el JDK "a salvo"!!)
  • Recomendable jdk 1.6.0_18,  parecen haberse "estancado" en la versión 10.3.2 de WLS, por lo que la versión de JDK queda también condicionada.
Referencias

Imagen: Java Coffee House, Thamel, Kathmandu, Nepal
Imagen: coffee klatsch
Imagen: Coffee #2

domingo, 22 de mayo de 2011

Un Fantasma en el Cascarón

La #SpanishRevolution bien se merece un #offtopic ... y de los grandes:

Hace 16 años Mamoru Oshii, director japones, se inspiró en un manga para crear Ghost in the Shell.

A Fuchikoma, a Tachikoma Type 1 and a Tachikoma Type 2¿Sorprendidos? si, estoy hablando de anime, animación Japonesa y para colmo con ambientación Cyberpunk!! Y... ¿Qué pinta esto aquí? Dejarme cuatro lineas para explicarlo:

Los personajes del manga y la trama de un thriller político, sirven al director como excusa para plantear una pregunta: ¿Cómo definimos la vida?

No, no voy a ponerme a filosofar, pero aunque la he visto varias veces (y la recomiendo), había un punto que nunca acababa de entender.

Por fin lo he logrado, y ha sido durante esta semana, ha sido durante la #spanishrevolution.

Como toda película futurista plantea dos avances tecnológicos, y os puedo asegurar que nunca habría acertado el orden en el que llegarían:
  • La población modifica sus cuerpos convirtiendose en cyborgs, "cascarones", por lo que es necesario un escáner para diferenciar a las personas "vivas" de simples IA's.
  • Se muestra el futuro de Internet, cerebros conectados a la red 24h al día...

Y entonces empieza lo difícil, el punto que me costaba más de lo normal: de semejante Red nace una "consciencia", un fantasma imposible de distinguir con el resto de personas.

El concepto Inteligencia Colectiva ha evolucionado.

A los que se dedican al Social Media y al Marketing les encanta esto... ¿cómo puedo Ghost in the Shell: Laughing Manutilizar la opinión de la opinión en Internet, la Inteligencia Colectiva para mejorar mi producto? ¿puede la la IC contarme que nuevos servicios necesita? ¿puedo preguntarle si tiene buena opinión sobre mi empresa? ¿y cambiar su opinión? ¿puedo manipularla para que compre mi producto?

Evidentemente muchas empresas y "gurus" han salido escaldados... y es que, para mi, el tema es mucho más complejo que la visión simplista del párrafo anterior. La IC se auto-regula, corrige fallos evolucionando y por fin, ha tomado consciencia de ella misma, ha nacido el "fantasma"...

Ha nacido un fantasma en la red y se ha instalado en los cascarones de muchos de nosotros...

(y yo que pensaba que la cibernética evolucionaría más rápido =D)


Imagen: A Fuchikoma, a Tachikoma Type 1 and a Tachikoma Type 2
Imagen: Ghost in the Shell: Laughing Man

domingo, 15 de mayo de 2011

#Virtathon

Hoy toca hablar de: Conferencias.

Conferencias, Seminarios, ferias... cuando empiezas a especializarte, descubres que no todo es estar detrás de la pantalla, también puedes asistir a una serie de eventos que organizan las marcas, empresas o incluso organizaciones de usuarios.

En España tenemos a CUORE que celebró en Marzo su XX Congreso, y al que por desgracia no pude asistir. Y esa es una gran constante, no se a vosotros, pero ir a los congresos es COMPLICADO.

Fechas, precio, viaje, hotel... es muy posible que la empresa cubra los gastos de alguno de los que lea estas lineas, pero otros no tendrás esa suerte. Y es por eso que me ha gustado tanto la iniciativa que pretendo presentar (como siempre - Aviso: no gano nada con ésto).


Virtathon organizada por BrainSurface, para que os hagáis una idea pretender concentrar en una web a usuarios de Oracle, Java y MySQL ofreciendo herramientas de colaboración: chat, vídeo, documentos, foros... hasta gestión de proyectos. Y ahora, lo último, una Conferencia Virtual.


Del 16 al 21 de Julio, bajo un precio reducido, sin viajes, hoteles... se puede asistir a decenas de sesiones, de varios niveles y de multitud de temas. Pero la parte innovadora no queda ahí, las sesiones puedes darlas tu o proponer que se hagan o incluso recomendar a alguien, los conferenciantes pagan una suma de dinero y después reciben otra en función de como ha ido su sesión.


A mi la idea me ha sorprendido, diría que es la primera vez que se organiza y aunque estas cosas pueden salir no tan "bien" como uno espera, yo ya me he apuntado.

Dejo también el enlace de uno de los "conferenciantes" explicando la experiencia en su blog, Arup Nanda: Speaking at a Virtual Conference #VirtaThon

domingo, 8 de mayo de 2011

En el Nombre de la Interfaz (VLAN NAME TYPE)

Durante mucho tiempo las única razón para configurar 802.1Q en las interfaces de un equipo fueron:
  • No tenemos dinero para un Cisco y estamos montando un router en un equipo viejo
  • El Administrador de la Red nos cae mal y vamos a montar un equipo con una IP de cada segmento...
Ahora con los Blades compartiendo infraestructuras y con la virtualización, quizás nos vemos obligados a marcar nuestros paquetes con el 'sello' correcto.

802.1Q es el estándar de la IEEE para etiquetado de paquetes, que permite que, aunque compartamos infraestructuras, no existan interferencias entre las diferentes redes. Básicamente lo que llamamos: trunking.

Pero, pasemos a la práctica. Para configurar una interfaz dot1Q, lo más sencillo es:
  • copiar el script de inicio de nuestra interfaz, por ejemplo /etc/sysconfig/network-scripts/ifcfg-eth0 a /etc/sysconfig/network-scripts/ifcfg-eth0.105
  • cambiar el parámetro "VLAN DEVICE" para reflejar el cambio de nombre eth0.105
  • añadir VLAN=yes al final
¿Demasiado fácil? vamos a complicarlo un poco más...

Y si resulta que estamos montando un sistema de alta disponibilidad, (por ejemplo Oracle RAC) que utiliza IP's virtuales (vip's). En Linux al añadir otra ip a la interfaz se añaden dos puntos y un identificador numérico. El resultado final será algo parecido a ésto:

eth0.105:1

¿Alguién ha visto alguna vez una interfaz así? ¿Os imagináis el quebradero de cabeza para los scripts en bash?

Rack @ WorkPor suerte en Linux tenemos dos formatos para las interfaces con vlan's:
  • DEV_PLUS
  • VLAN_PLUS
El método más habitual es DEV_PLUS, pero si utilizamos VLAN_PLUS obtendremos interfaces del estilo vlan105, vlan609 y si añadimos IP's secundarias vlan105:1 o vlan609:1. Otra ventaja se que independizamos el nombre de la interfaz física, que en algunos casos puede sernos de utilidad.











Para configurar este método de nombrar interfaces utilizaremos los parámetros:
  • DEVICE, con el nombre en formato vlan###
  • VLAN_NAME_TYPE, con el valor VLAN_PLUS_VID_NO_PAD para indicar que utilizaremos interafaces del tipo 'vlan###'
  • PHYSDEV, para indicarle al sistema la interfaz física asociada, ya que no podrá deducirla del nombre de la interfaz
  • VLAN, con el valor 'yes' como antes

El resultado es un archivo como éste "ifcfg-vlan240":

DEVICE=vlan240
VLAN_NAME_TYPE=VLAN_PLUS_VID_NO_PAD
PHYSDEV=eth0
BOOTPROTO=static
BROADCAST=10.0.0.255
HWADDR=00:01:02:03:04:05
IPADDR=10.0.0.33
NETMASK=255.255.255.0
NETWORK=10.0.0.0
ONBOOT=yes
GATEWAY=10.0.0.1
VLAN=yes

También se puede configurar "online" con el comando vconfig, pero los cambios no son persistentes y a menos que ocurra algo raro (no tenemos claras las vlan's de nuestra red, o nuestro networker particular está jugando con ellas) no creo que sea necesario conocer demasiado ese comando.

Imagen: Rack @ Work

martes, 3 de mayo de 2011

Una Mano Ganadora (EMC vs HP vs NetApp)

Me ha tocado estudiar tres de los mejores productos del mercado en lo que a SAN/NAS se refiere: HP EVA 8400, EMC VNX 5700 y NetApp V3200. Yo creía que hacían lo mismo, servir almacenamiento, me equivoqué...



Lo primero: no he evaluado todas las características ni servicios, solo aquellos puntos que me han parecido convenientes. No tengo ninguna vinculación directa con ninguna de las marcas, ni obtengo beneficio alguno al escribir ésto.

Intenté averiguar cuales era los puntos más importantes cuando analizas una cabina de discos, sobretodo con bases de datos Oracle por medio.



No los encontré

Así fue como tuve que empezar de cero, y escogí estos cuatro:
  • Arquitectura
  • Rendimiento
  • Gestión del Espacio
  • Integración
Una vez escogidos los criterios, es sencillo valorar los más importantes para cada situación y tras puntuar cada solución... tendremos nuestra decisión!

Pero antes de puntuar, aclaremos cada punto:

Arquitectura
El almacenamiento supone grandes retos, y cada fabricante los ha abordado a su manera. Y ésto se nota en la arquitectura, punto que te ofrece los problemas o las soluciones para el día a día.

Me centro en dos puntos, con cierta analogía al antiguo Modelo TCP/IP:
  • Presentación, no es lo mismo presentar una LUN de un RAID 5 tradicional (aunque esté contenido en una cabina), que un disco virtual distribuido entre los N discos de una estructura propietaria.
  • Acceso, existe quien necesita o prefiere saber donde esta "ubicada" la información. Tener la certeza de que si mueve esos discos a otro equipo podrá recuperar su información. Pero también estamos los que, confiando en la solución, preferimos las ventajas de una capa de abstracción que modifique el acceso a los discos a cambio de funcionalidades extra y más rendimiento, los cuales no serían posibles de otra forma.
Esto nos lleva a la primera pregunta que debemos hacernos:

¿Me fío de una capa de abstracción propietaria a cambio de grandes promesas de gestión de espacio y rendimiento?

Promise?La critica habitual a los discos virtuales es el rendimiento (y por eso será el siguiente punto a analizar). Luego tocará deslumbrarse por todas las características avanzadas de gestión de espacio que nos ofrecen. Os comento lo que he visto:
  • HP, virtualiza si o si. Una vez agrupados los discos por capacidad y velocidad, presentaremos VDisks a nuestros equipos, discos virtuales enfocados a proporcionar un máximo rendimiento. Balanceo entre todos los discos del grupo (más cabezales = más velocidad), hardware dedicado a operaciones de redundancia.. Incluso parece gestionar los "bloques calientes" (con excesivo I/O).
  • NetApp y EMC utilizan hardware más generalista en las controladoras, gestionadas a su vez por un S.O. optimizado. Disponer de un S.O. permite mucha flexibilidad, no solo dispondremos de funcionalidades extra, sino que en el futuro seguramente podremos actualizarlas y disponer de funcionalidades futuras sin depender del hardware.
  • NetApp además de permitir virtualizar, ofrece una capa de abstracción del almacenamiento físico: WAFL, que decide cuando, como y donde se guardan los bloques de datos. Todas las teorías sobre como se almacena la información o estadísticas de rendimiento no sirven con su solución.
Sobre los discos virtuales comentar que será muy importante la previsión de crecimiento, los límites de los discos virtuales pueden marcar un diseño u otro. Limites en la cantidad de discos en un grupo, límites de tamaño por disco virtual. El que ofrecía menos límites era HP, pero en los nuevos modelos de NetApp parece que han ampliado fronteras a algo bastante competitivo.

Asociado a este problema es conveniente no cambiar de tamaño los discos de un grupo, cuantos más cabezales tenga un grupo mejor, pero si cambiamos el tamaño podemos descompensar la carga. Tenemos que planear las futuras adquisiciones, para formar grupos nuevos de tamaños mayores o acomodarse a un tamaño durante toda la vida de la cabina de discos.

Sobre las controladoras de EMC y NetApp, comentar que me faltó estudiar como afectaba la cantidad de memoria a las soluciones, pero se hace bastante palpable que "el tamaño importa".

Una vez analizado este punto, el resto es pan comido.

Rendimiento
Comparar arquitecturas tan complejas y diferentes no está a mi alcance, es por eso que estudié las opciones de cada fabricante, aunque requerían licencias o hardware adicional.
  • EMC dispone de "tiering" en caliente entre discos SAS, NL-SAS y Flash. Lo llaman FAST, y permite ubicar los bloques "calientes" en los discos más rápidos, mientras los datos "de archivo" se almacenarán en discos más económicos (NL-SAS). Ya he comentado lo mucho que me gusta esta idea, aunque como no me la ofertaron no profundicé.
  • NetApp dispone de una tarjeta aceleradora llamada PAM, actúa como cache de toda la cabina, acelerando toda la actividad, integrándose con su sistema de prioridades (FlexShare) y consiguiendo un pico de rendimiento si utilizamos deduplicación. Tampoco se ofertó.
  • HP no dispone de opciones, aprovecha al máximo su arquitectura de virtualización, dando como única alternativa para obtener más rendimiento adquirir más discos.

Gestión del Espacio
El único punto donde las tecnologías son las mismas entre fabricantes (o casi), contemplé cuatro: virtualización, thin provisioning, deduplicación y compresión.
  • HP implementa por encima de su sistema de virtualización un sistema de seguridad, logrando fallos de hasta dos discos sin impacto. Además de no existir fragmentación por su implementación.
  • EMC engloba virtualización y "thin provisioning" en el producto "Virtual Provisioning". Dispone de herramientas de de-fragmentación y una interfaz completa entre opciones avanzadas y asistentes para ajustar al máximo los discos presentados. También incluye compresión por bloque como un proceso programable.
  • NetApp permite: virtualización, "thin provisioning", compresión y deduplicación. Tanta flexibilidad la permite su arquitectura basada en WAFL. Tanto la compresión como la deduplicación son programables y el problema de la fragmentación "dicen" tenerlo solucionado.

Integración
Todos los sistemas se integran con multitud de productos de terceros, incluido Oracle.
  • NetApp era el fabricante de las cabinas de Oracle (ahora evidentemente es Sun) y no podía quedar sin recompensa. Llegan al extremo de entender las cabeceras de ASM, permitiendo presentar los snapshots/mirrors de discos ASM al mismo equipo donde reside el original.
  • HP tiene una filosofía donde ser sirven LUNs lo mejor posible, por lo que las integraciones son secundarias. Hay muchas criticas a este punto, incluso rumores en los que no entraré. Bajo mi punto de vista, es claramente su punto débil.
  • EMC tiene una gran apuesta con VMware permitiendo el mismo nivel de gestión desde el Navispher de EMC que con el VirtualCenter de VMware, y la flexibilidad que ello conlleva.
Winning Hand
Conclusión
Es evidente que hay otros puntos a tener en cuenta, como el precio ;) también la facilidad de gestión, los conocimientos previos de los técnicos que gestionarán la solución, garantías, soporte, servicios de migración, documentación... Pero son más subjetivos y en el apartado más técnico hay menos dudas.

Pero las tuve, y muchas... y me decidí por la apuesta innovadora de NetApp.

Ganó NetApp, que me prometía una gestión de entornos de desarrollo inmejorable (integración con ASM) consumiendo el mínimo espacio (deduplicación). Todo ello prometiendo el rendimiento de los mejores para mi entorno de producción al que le haría copias de seguridad en cabina olvidándome de RMAN (que conste que no pensaba hacerlo).

Una lástima que en el concurso no solo se valoraba la cabina de discos, Oracle no es el único producto y, evidentemente, yo no era el único que valoraba. Finalmente disfrutaré de una EVA de HP un mínimo de 4 años más...

He de reconocer que tuve ayuda, tanto de los interesados, donde me gustaría destacar a EMC con @jpijuan que colaboró con @avanttic para la integración con Oracle. Y de otros no tan interesados, de los que destaco a @alexis_gil y el ya sabe la razón... sabía incluso por quien me decantaría!

Imagen: storage unit
Imagen: Promise?
Imagen: Wining Hand