viernes, 23 de diciembre de 2011

Cuento de Navidad (proyectos del pasado, presente y futuro)

Pensando en mis planes para el 2012, se me ocurrió que lo mejor era revisar el 2011... de repente me dí cuenta que uno de esos propósitos que cada año se repetía ya no estaba allí... quería instruirme sobre:

Gestión de Proyectos


LascauxSiempre intento tener presente que me dedico a los servicios, mi trabajo no es un fin en si mismo sino una ayuda para conseguir el verdadero objetivo. Esto me ha llevado a hacer cosas como formarme en diseño CAD o a informarme sobre la vida de las urgencias hospitalarias...

En los últimos años la mayor parte de mi trabajo ha estado relacionado con proyectos, como parte, como el todo, dando soporte, reaccionando a... por lo que se me pasó por la cabeza que formarme en algo como PMBOK sería interesante. A principios de año lo logré.

PMBOK es algo así como la biblia del Project Management Institute y que luego a derivado en alguna ISO (10006 o 21500) o ITIL de forma específica para servicios TIC.

Creo que al principio pensaba mejorar mi día a día intentando gestionar como un proyecto ciertos encargos que me caían, pero...


Cuanto más conocía sobre PMBOK más me hacía a la idea de que no podría aplicar sus técnicas. Y es que tengo algunos indicios de que no estoy en el entorno más propicio para este tipo de cosas. Por ejemplo: observar de como un proyecto acumula 3 años de retraso... cuando solo duraba 2!!

Si mi objetivo era adaptarme mejor mi entorno, había fracasado estrepitosamente... #fail

Pero no podía quedarme así... ¿y si en lugar de un metodología para que todo sea perfecto, aplico una para cuando todo es "imperfecto"?


Artesanía de Sistemas

Supongo que cuando te mueves en profesiones con más historia, definir un proyecto, aunque no sea la panacea, será mucho más ágil. En informática los límites son difusos, las herramientas no suelen estar maduras, etc, etc... En definitiva, poner orden se me intuye complicado.

Slightly altered home working environment - P1050526

ITIL lo pretende, sobretodo agilizando la resolución de incidencias y creando la figura de los "problemas", a los que dedicaremos más tiempo. Pero, sinceramente, no he visto a ningún sysadmin tan "ilusionado" con ITIL como veo a algunos desarrolladores con SCRUM.

Quizás por eso pueda llegar a tener sentido trabajar con otra mentalidad, no una que logre que todo sea perfecto, sino la que nos prepare para cuando las cosas sean "imperfectas".

Últimamente podemos leer artículos sobre el trabajador del mañana, uno que ya no trabajará toda su vida en la misma empresa, se especializará, algo parecido a autónomos pero generalizado. Se acabó lo de tener un tiempo de aclimatación, conocer a los compañeros, aprender las formas, y todo a velocidad de vértigo...

Ahí entiendes que los proyectos, cada vez tendrán más papeletas para ser "imperfectos".

No pretendo reinventar la rueda, estoy seguro que si consigues llegar al nirvana del ITIL el mundo puede ser un lugar mejor. Puede que parezca algo pesimista o conformista (cuando dices que las cosas no serán perfectas, la gente se asusta), pero creo que intentar que algo mejore, no puede ser ni uno ni lo otro.

Lo dejaremos en que necesitaba una excusa para volver a escribir en el blog =)

Tengo escritos tres puntos, para empezar el 2012, por lo que solo falta desear Buenas Fiestas, y animaros a reflexionar sobre vuestros propósitos... para el que los tenga...


Imagen: Lascaux
Imagen: Slightly altered home working environment


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

lunes, 25 de abril de 2011

Bad Types (confusión con TO_CHAR, TO_DATE y tipos de dato)

Siempre he pensado que éste tema merece un póster...

Bad TypePor alguna razón, que debería ser motivo de reflexión, los formatos de fecha y especialmente el uso de las funciones TO_CHAR y TO_DATE suelen ser motivo de confusión...

Aunque lo he explicado ya unas pocas veces en persona, una consulta en la Comunidad de Oracle Hispana ha propiciado que escriba unas lineas sobre el tema...

No es el único caso, pero por lo que he visto el problema viene cuando se quieren comparar uno o varios campos y hay fechas por medio. Para empezar hay que dejar algo claro, cuando comparamos dos elementos deberían ser del mismo tipo, nada de peras con manzanas.

Es por eso que lo primero es revisar los Tipos de Dato en Oracle.

Pero no siempre lo tenemos todo fácil, o simplemente no le podemos pedir a un usuario que escriba día, mes, año, minuto, segundo (que es lo que incluye el tipo DATE en Oracle) en el formulario de nuestra aplicación, para buscar las facturas del mes pasado. Es por es eso que existen las funciones TO_CHAR y TO_DATE; pero vayamos al grano:

Si el campo es fecha y queremos los resultados anteriores al día 3 de enero de 2011, bastará con convertir la cadena '03/01/2011' a formato fecha de Oracle, el se encarga de completar hora, minutos y segundos con ceros:

WHERE campo_fecha < to_date('03/01/2011','DD/MM/YYYY')

Si el campo es una cadena de carácteres:

WHERE to_date(campo_cadena,'DD/MM/YYYY') < to_date('03/01/2011','DD/MM/YYYY')

Pero Oracle en contadas ocasiones realiza conversiones implícitas, por lo que es posible utilizar:

WHERE campo_fecha < '03/01/2011'

Pero lo recomendable es que controlemos nosotros las conversiones.

En otras ocasiones si queremos los resultados anteriores a un año y el campo es fecha, se puede utilizar:

WHERE to_char(campo_fecha,'YYYY')< '2011'

Extraemos del tipo DATE unicamente la información del año, y la comparamos con una cadena entrecomillada.

Es un tema sencillo, pero espero que le sirva a alguien. Para más detalles os dejo un enlace que comentaba Diego en la @cohispana : Funciones integradas de PL/SQL

Imagen: Bad Type

lunes, 18 de abril de 2011

Oracle Critical Patch Update - Abril 2011

Mañana día 19, Oracle publicará el CPU de Abril.

El tema de las actualizaciones es complicado, pero es interesante analizar de vez en cuando los Critical Patch Update de Oracle. Aunque actualizan cualquier producto de la marca, me centraré, como siempre, en la base de datos.

Como ya sabréis, Oracle publica parches en Enero, Abril, Julio y Octubre, avisando el jueves previo a su publicación. En esta ocasión hay 6 parches para la base de datos y 2 para Grid Control.

Oracle utiliza un sistema de puntuaciones para valorar la criticidad de los parches, el CVSS. Las puntuaciones van de 1 a 10 y en este caso para la base de datos llegan al 6,5 y para Grid Control al 5,5. Aunque cada unos puede valorar según su entorno, dos de las vulnerabilidades de la base de datos se pueden explotar remotamente, sin usuario ni clave de acceso.

Lo que dicten vuestras consciencias... =D

Para completar la información, versiones afectadas:
  • Oracle Database 11g Release 2, versiones 11.2.0.1, 11.2.0.2
  • Oracle Database 11g Release 1, versión 11.1.0.7
  • Oracle Database 10g Release 2, versiones 10.2.0.3, 10.2.0.4, 10.2.0.5
  • Oracle Database 10g Release 1, versión 10.1.0.5
Productos afectados:
Es evidente que el impacto en nuestros sistemas dependerá de los productos que tengamos instalados y donde "recaen" los dos bugs peligrosos, pero esa información todavía no la he encontrado.

Otras puntos a destacar, no afectan al cliente (vuelvo a comentar que solo me centro en la base de datos y grid control) y es el primer CPU que afecta a la versión 11.2.0.2 de Oracle.

Si os interesa, en Integrigy tienen un webinar preparado para el 5 de Mayo de 20.00h a 21.00h.

jueves, 14 de abril de 2011

Configurar el Entorno de Oracle [MICRO]

Para seros sinceros, soy de los que va re-configurando el entorno a mano, una, y otra vez... Pero no nos engañemos, no es la mejor forma.

Lo primero de todo, las variables del entorno son básicas cuando hablamos de trabajar con bases de datos Oracle. Son vitales durante la instalación, la administración y para los clientes. Es por ello que les dedico un poco de atención.

Empecemos con las variables básicas de Sistema:
  • TEMP, TMP y TMPDIR, configura el directorio temporal, básicos durante la instalación.
  • LANG, para definir el idioma con el que trabajamos.
Hasta aquí fácil, ahora toca las variables de Oracle. Basta con lanzar el siguiente script:

$ . /usr/local/bin/oraenv

Nos preguntará el SID (Sytem IDentifier) de la instancia con la que queremos trabajar y voilá! nuestro entorno configurado como por arte de magia...

Durante la instalación Oracle nos pide cambiar al usuario root y ejecutar un script que, entre otras cosas, instala estos scripts: oraenv, dbhome y coraenv (no me digáis que no os suenan).

El script oraenv, con ayuda de dbhome, configura la siguientes variables:
  • ORACLE_SID, con el SID que hayamos indicado
  • ORACLE_BASE, directorio base de instalación del sotware de Oracle
  • ORACLE_HOME, directorio del producto con el que queremos trabajar: database, grid, agent,
  • LD_LIBRARY_PATH, interesante sobretodo si tenemos librarías de 32 y 64 bits
  • PATH, se añade $ORACLE_HOME/bin al final del PATH
Todos estaremos pensando lo mismo ¿hay que poner el SID, cada vez? Bastará con configurar en el ~/.bash_profile:

ORACLE_SID=
ORAENV_ASK=NO
. /usr/local/oraenv


Listo, entorno configurado, sin preguntas y basado en la instalación (/etc/oratab). Como anécdota comentar que podemos utilizar otra variable: ORACLE_TRACE=T que nos permite debugar la ejecución de los scripts (opción -x de bash).

Otras variables interesantes:
  • TNS_NAMES, directorio donde ubicaremos el archivo tnsnames.ora con nuestras conexiones
  • NLS_LANG, idioma, región y mapa de caracteres que utilizaremos como clientes
  • CLASSPATH, por si tenemos problemas con Java (la mayoría de entornos gráficos son Java)
  • DISPLAY, para la instalación "old style"
Para los que quieran profundizar: TWO_TASK, ORA_NLS10, ORA_TZFILE.


También lo puedes leer en prinsepac.

domingo, 10 de abril de 2011

Bienvenido a La Nube

Quizás para muchos ya llegó hace tiempo, pero puedo he de decir que para mi ha sido todo un placer probar la nube de Amazon. Lo segundo es aclarar que no tengo ningún tipo de relación con la gente de Amazon y seguiré criticándolos por no abrir una tienda en España (por mucho buy·v!p que hayan comprado).

Primero hace falta una definición, y es que el tema puede llevar a más discusiones de las que parece, en este caso la he robado de los mejores:


"Cloud Computing es el término paraguas bajo el que se encuentras un conjunto de métodos para ofrecer recursos informáticos a través de la red."



Sin profundizar demasiado, encontramos tres tipos:
  • Software as a Service (SAAS), no confundir con el Shave as a Service =) , el más simple... pensemos en el correo web, pues simplemente eso, usar una aplicación de un tercero, que está en la red.
  • Platform as a Service (PAAS), si lo complicamos un poco más, la aplicación en este caso es nuestra, pero necesitamos añadir funciones a nuestra plataforma: autenticación, una base de datos relacional, un servicio de intercambio de archivos.
  • Infrastructure as a Service (IAAS), el hosting/housing de toda la vida, si... pero con las soluciones de virtualización la flexibilidad es mayor, disponemos de equipos a demanda y con los recursos ajustados. Si queremos crecer: click!

Nubes en TaburienteLas nubes nos invaden, pero yo me he concentrado en Amazon por una razón muy simple, y es que parece que Oracle le da soporte. Los "Amazon Web Services" AWS están soportados por Oracle del mismo modo que Oracle soporta cualquier otra plataforma de virtualización: para temas especificos del equipo virtual... llamar a Amazon. Tampoco me voy a concentrar en los usos que podamos dar a la "nube", pero si volviera a ser profesor, creo que las practicas las haría... allí arriba.


El servicio de Amazon que permite la provisión de equipos virtuales se llama "Elastic Compute Cloud" (EC2), donde contratamos cierta CPU con cierta capacidad de I/O, en una arquitectura de 32 o 64 bits y el almacenamiento que necesitemos. Un poco de teoría:

  • Amazon Machine Image (AMI), Amazon dispone una gran cantidad de "imagenes" preparadas con una gran variedad de S.O. y Software, entre ellas OEL con una base de datos Oracle pre-instalada.
  • Región AWS, podemos elegir entre varias ubicaciones geográficas. En función de a quien le demos servicio nos puede ir bien una u otra, o incluso un cluster que atraviese medio mundo. Hay que tener en cuenta que no todas las imágenes están disponibles en todas las regiones.
  • Grupos de Seguridad, aquí es donde empecé a sorprenderme: un firewall para nuestro equipo completamente configurable.
  • Claves de Seguridad, acceso con certificados, parece evidente, pero encima lo han hecho sencillo.
  • Tipo de Instancia, ya he comentado que para nuevos clientes hay un tipo "micro" de oferta... luego dependerá de la capacidad que queramos.
goingDejémonos de cháchara:
  • Si todavía no tienes cuenta, date de alta en el AWS. Necesitarás una tarjeta de crédito y un teléfono (llamada automática para confirmar tu identidad).
  • Luego entramos en la Management Console for EC2. Existe incluso un plugin para firefox llamado Elasticfox, pero el entorno web hay que verlo.
  • Buscar el botón de "Lounch Instance"
  • Podéis buscar la imagen de "oraclexe"
  • Elegir el tipo, esta vez "Micro"
  • Crear las claves privada y pública.
  • Definir los puertos abierto en "nuestro" firewall (22 y 1521 mínimo)
  • Darle al Start
  • Darle al Connect, una de las opciones es el commando ssh preparado con la clave privada que ya hemos creado.


La dirección IP cambia cada vez que levantemos el equipo (lo del DNS dinámico os lo dejo a vosotros. El espacio es volátil si "terminamos" con la instancia, debemos pararla para que se mantenga... aunque ahora solo estamos jugando, para cosas serias tocará pagar.

Podemos crear nuestro propio segmento privado de equipos, gestionar el almacenamiento con snapshots, ... para mi es como un CPD en la nube... ¿ésto no estaba en la lista de arriba, no?

Para más detalles:

PD: yo no he dejado de preguntarme ¿qué utilizarán para la virtualización? la respuesta: Xen

Imagen: going, Nubes en Taburiente

domingo, 3 de abril de 2011

Oracle Database 11.2 Express Edition Beta

Este fin de semana aparece la primera beta de Oracle XE 11.2.

Para quien no lo conozca, Oracle Express Edition es una versión gratuita de la base de datos Oracle con ciertas limitaciones, ideal para:
  • Instalarte en tu PC si eres Desarrollador o DBA
  • Montar embebido en tus productos, por reducción de costes, y mientras no crecas demasiado...
  • Dar formación

Las limitaciones son:
  • 1 Instancia
  • 1 Procesador
  • 1 GBytes de RAM
  • 11 GBytes de datos

Lo primero que necesita un "early adopter" (y esta versión solo es para ellos) es localizar las principales fuentes de información (la poca que exista).

Fuentes oficiales:

No habrá versiónes para Linux x86 y MacOS. Que hayan lanzado la versión de Windows para 32 bits y la de Linux para 64 intuyo que es parte de la estrategia de Oracle para competir contra SQL Server con MySQL y no con su producto estrella. ¿Demasiado sutil? cosas de un kinestésico...

Comentar que en esta versión funcionan cosas como el modo ARCHIVELOG, o el Edition-Based Redefinition. Éste último me ha sorprendido bastante y habrá que probarlo. Una buena excusa para instalarlo aunque haya tenido que tirar de una máquina virtual Windows (tengo linux de 32 bits).



Para acabar, algunos enlaces: las entradas en los blogs de los mejores:

Y una "inestimable" guía de "¿y como lo hago en Ubuntu?":

Si has llegado hasta aquí, no hay duda, eres un "early adopter". En ese caso, dejes de atender la llamada del blog de OTN y difundida por @fcomunoz en busca de feedback.

PD: Un cotilleo... parece que hay algún problema en la instalación de Windows si tenemos un antivirus instalado (algo impensable!).

miércoles, 30 de marzo de 2011

Tiering en la Nube

Almacenamiento en Tiempos de Crisis
Disponer de una infraestructura homogénea es casi un sueño en época de crisis, y el almacenamiento no es una excepción. Es por eso que he acabado dando un repaso a los sistemas de archivos distribuidos y concretamente a Gluster.

Touring OSCONLos sistemas de archivos distribuidos permiten acceder a almacenamiento externo como si estuviera conectado a nuestro equipo de forma local. Esto supone un ahorro ya que aunque nuestros sistemas pueden crecer mas allá de sus posibilidades con una mínima inversión.

Además, sobre el almacenamiento podemos añadir funcionalidades como:
  • Mirroring
  • Tolerancia a fallos
  • Striping
  • Balanceo de carga
Y ésto es lo que nos permite GlusterFS, el sistema de archivos distribuido base de la plataforma Gluster de gestión de almacenamiento, con una interfaz que tiene muy buena pinta. Además de  la posibilidad de contratarlo como servicio en el EC2 de Amazon.

Lustre
Lustre que adquirió Oracle al comprar Sun, que a su vez hizo suyo al comprar Cluster File Systems, Inc.

Parece que fue el que marcó la tendencia con su arquitectura (se puede ver algo parecido en MooseFS), pero Oracle dejó de lado el proyecto. Y aunque habría estado bien ver la funcionalidades de Lustre en el ZFS de Sun (muy de moda), ha propiciado varios forks como Whamcloud o OpenSFS.

Ventajas del software libre... =)

Tiering en la Nube
Pero si hay algo que me ha gustado es una funcionalidad de Ceph y es la de añadir como parte de nuestro almacenamiento espacio en el S3 de Amazon.

EMC, entre otros, vende una tecnología de tiering automático de almacenamiento (FAST), donde la información más accedida se moverá automáticamente a los discos más rápidos (SSD) y el histórico a los discos más baratos (SATA). El resto estarían en discos SAS.

Y si juntamos las dos cosas, añadimos una capa de almacenamiento en la nube, transparente a nuestros sistemas y ampliable a golpe de click... A mi me parece muy interesante, casi "innovador" =) además de útil tanto para pequeños y como grandes sistemas; tanto por ahorro de costes como por flexibilidad de gestión...

¿Y a vosotros?

Imagen: Touring OSCON

lunes, 28 de marzo de 2011

El Día en el que Sobraba Memoria (Hugepages)

Disponer de equipos con mucha memoria es una ventaja, pero solo si la sabemos gestionar. Pero antes, un poco de teoría (en caso de error se agradecerán aportaciones):

Entropy ≥ Memory . Creativity ²Los procesos no trabajan directamente con la memoria física, sino que lo hacen con la memoria virtual. Esto supone muchas ventajas (no entraré en detalles) pero también un coste extra de conversión, entre la memoria física y la virtual.

Para la conversión cada proceso dispone de una tabla de conversión, y como lo que contiene son direcciones de pagina, se llama tabla de paginación. En aplicaciones con mucho consumo de memoria, donde además la información cambia constantemente (por ejemplo, una base de datos), el acceso a la tabla de paginación es constante.




Por suerte existe la "Translation Lookaside Buffer", una pequeña cache con parte de la tabla de paginación. El problema es que la TLB es de tamaño fijo, y como normalmente guardamos direcciones de páginas de 4 KBytes; el total de memoria al que nos da acceso la TLB no es muy grande.

¿Qué supone ésto?

Tal y como se puede leer en el blog de Pythian con:
  • "Utilización intermitente y muy alta de la CPU en modo kernel"
  • "Durante los parones, todas las CPUs usaban el modo kernel dejando la base de datos inutilizable. Incluso entrar y lanzar una simple consulta SELECT * from DUAL; se tomaba su tiempo."
¿Cuál es la solución?

Utilizar tamaños mayores de página o Hugepages (el caso más habitual 2 MBytes). Esto supone acceder a una mayor cantidad de memoria con las mismas entradas (PTE) en la tabla de paginación. Reduciendo así el consumo de CPU.

Los pasos a seguir son:
  1. Definir el límite memlock para el usuario del servicio que estamos configurando, con un valor algo menor de la memoria disponible (/etc/sysctl.conf).
  2. Iniciar el servicio que consume la memoria.
  3. Calcular el número de hugepages que queremos utilizar en función de la memoria consumida por nuestro proceso (en el caso de Oracle hay un script en la Nota 401749.1)
  4. Definir el parámetro del kernel vm.nr_hugepages= en el archivo /etc/security/limits.conf
  5. Reiniciar el servidor.
  6. Revisar el valor: $ grep Huge /proc/meminfo
Detalles sobre su uso, especialmente con Oracle:
  • Si las páginas totales son iguales a las libres, nuestro servicio no aprovecha las Hugepages por lo que estamos desperdiciando memoria, mejor desconfigurarlas.
  • No son compatibles con la AMM (Automatic Memory Management) en 11g
  • Hay un bug con Grid Infraestructure 11g, donde no se utiliza el límite memlock tal y como hemos definido: Bug 9251136 "INSTANCE WILL NOT USE HUGEPAGE IF STARTED BY SRVCTL"
También lo puedes leer en prinsepac.

Imagen: Entropy ≥ Memory . Creativity ²