Monthly Archives: July 2009

Fly me to the moon!

40 años se cumplen hoy del primer paso que un hombre dio en la Luna. Un 16 de Julio de 1.969 despegó el Apolo 11, cuatro días más tarde  alunizaría sobre el mar de la tranquilidad y tres hombres: Neil Amstrong, Michael Collins y Edwin “Buzz” Aldrin, Jr. Como anécdota, este último sería el primero en pisar el satélite (no de forma oficial) para hacer la foto al comandante de la misión: Neil Amstrong, quien realmente se llevaría ese honor a los anales de la historia. Pero el viaje  no hubiera sido posible sin la ambición y los sueños de muchas personas, entre ellas: John F. Kennedy quien realmente empujó el programa espacial para conquistar la Luna, y de dos Ingenieros: Sergéi KoroliovWernher von Braun. El primero, el hombre que hizo posible que Yuli Gagarin fuera el primer hombre en salir al espacio. El segundo, el hombre que diseño las bombas voladoras de Hitler y que al finalizar la Segunda Guerra Mundial fue capturado por los norte-americanos, y considerado el padre de aeronáutica moderna.

Nada volvería a ser igual desde aquel paseo por nuestra Luna, miles de chicos y chicas soñábamos con ser astronautas y conquistar el espacio…

no images were found

…y mientras tanto seguiremos soñando bajo la luz de la Luna.

Un saludo a tod@s!

Google strikes back!

El pasado 7 de Junio (San Fermín) Google anunció el próximo lanzamiento de su sistema operativo Google Chrome OS para el segundo semestre de 2.010, el sistema operativo funcionará tanto en arquitectura x86 como con chips ARM. A parte comentan que están trabajando con varios OEMs para lanzar portatiles al mercado durante el próximo año.  Tambien se puede desprender que no se han roto mucho la cabeza ya que el SO tendrá un kernel Linux con un sistema nuevo de ventanas — “Google Chrome running within a new windowing system on top of a Linux kernel” — Habrá que esperar al próximo año para ver ofrece de nuevo, pero de momento podemos intuir que han seguido la norma de muchos fabricantes: copiar. Ya lo hizo Steve Jobs con la gente del PARC y Bill Gates con Steve Jobs…

Para troncharse de risa!

Lo se… me he encendido, se me han acelerado las neuronas y al agitarse mis pensamientos esto es lo que han emitido… Leo en la edición electrónica del diario Expansión una noticia titulada: “Sólo la mitad de los despachos tiene jornada intensiva en verano” y me ha entrado un ataque de risa… encima que los grandes despachos explotan a la gente con jornadas que sobrepasan las 14 horas/día, tienen los bemoles de publicar este tipo de propaganda más cercana a lo deseable que no a la realidad. Desde aquí hago un llamamiento para que los medios de comunicación no dejen en manos de sus publicistas (ups, perdón periodistas) algo tan peligroso como una estadística… es casi tan irresponsable como dejar a un pirómano con una caja de cerillas en un bosque de pinos durante el mes de Agosto. La diferencia estriba en que normalmente las consecuencias de la irresponsabilidad del periodista (ups, perdón otra vez, el publicista) no se ven y se creen!

Alta disponibilidad (HA) con MySql

Uno de los problemas más comunes al desarrollar un sistema es el diseño y la elección de la infraestructura que deberá soportar la gestión y acceso a los datos. Como ocurre en muchos otros campos, la infraestructura de datos se diseña acorde a unas expectativas menores que las finales y en consecuencia los equipos de desarrollo deben trabajar en varios frentes: optimización en el “uso” de los recursos de datos (optimización de sentencias SQL, implementación de pools de conexiones, etc.) y escalado de los sistemas de soporte a las bases de datos. Hoy comentaré una de las posibles soluciones que abarca principalmente la optimización y de paso aumentar la escalabilidad de la infraestructura. Un este caso práctico la infraestructura de soporte a datos está bajo MySql con un única instancia sobre un servidor (infradb01.mydomain.org). Debido al éxito de la aplicación, han aumentado considerablemente las inserciones de datos así como las consultas de datos sobre la instancia de MySql. Para resolver el problema se recurrirá a la aplicación de una configuración maestro-esclavo (master/slave | publisher/subscriber) en la infraestructura de soporte a datos. Para empezar es necesario dar de alta una nueva instancia MySql (infradb02.mydomain.org) que trabajará como esclavo, o suscriptor, de la instancia principal. Para evitar problemas de rendimiento es mejor separa ambas instancias en máquinas diferentes. El disponer de dos servidores en configuración maestro-esclavo, significa que el servidor maestro compartirá, publicará, el registro de transacciones con el esclavo; por lo que cualquier modificación el el maestro se verá reflejada en el esclavo casi de forma instantánea. Trabajando en esta configuración es beneficioso si el código de la aplicación realiza las inserciones, modificaciones y eliminaciones en el servidor maestro y TODAS las consultas sobre el servidor esclavo. El resultado es la reducción del tiempo de bloqueos entre lecturas/escrituras y el aumento del rendimiento del sistema. Como añadido también se benefician las copias de seguridad (backups), que siempre se realizaran sobre el servidor esclavo y como guinda se dispone en el sistema de un servidor completamente actualizado y en funcionamiento por si el servidor maestro no está disponible.

Una vez contada la “vida y milagros” de la alta disponibilidad con MySql en un entorno maestro/esclavo, es hora de pasar a la práctica y configurar dicho entorno. Primero de todo hay que modificar el fichero de configuración (my.cng) de la instancia que hará el papel de maestro, en este caso: infradb01.mydomain.org:

Todos los cambios en el fichero de configuración hay que hacerlos bajo la directiva:

[mysqld]

Es necesario habilitar el log binario para poder realizar la replicación:

48
49
50
# Replication Master Server (default)
# binary logging is required for replication
log-bin         = /var/log/mysql/mysql-bin.log

Si únicamente hay que hacer replicación de un esquema, hay que añadir:

51
binlog-do-db   = myschema

El servidor maestro SIEMPRE tiene en id = 1 puede tener un id entero mayor o igual que 1 y SIEMPRE diferente al servidor esclavo:

53
54
55
56
# required unique id between 1 and 2^32 - 1
# defaults to 1 if master-host is not set
# but will not function as a master if omitted
server-id       = 1

Una vez están hechos los cambios en el fichero de configuración y se ha reiniciado el servidor, para que acepte los cambios, hay que crear un usuario con permisos de replicación (desde la línea de comandos de MySql, o desde el MySql Query Browser o el Administrator):

1
2
3
grant replication slave on *.*
to replicUser@'*.mydomain.org'
identified by 'passwd';

Y como último paso hay que volcar los datos del servidor maestro en el esclavo:

mysqldump -u root --all-databases --single-transaction --master-data=1 > mydatadump.sql

En el servidor esclavo lo primero a realizar es el volcado de los datos del servidor maestro, de esta forma ambos servidores contendrán los mismos datos:

mysql < mydatadump.sql

Al servidor esclavo hay que decirle quien es el servidor maestro e indicarle con que usuario se realizara la replicación (un usuario con permisos para ello, claro!):

1
2
3
change master to master_host = 'infradb01.mydomain.org',
master_user ='replicUser',
master_password = 'passwd';

Y finalmente hay que indicarle al servidor esclavo que empiece a replicar:

1
start slave;

Para verificar el status del servidor simplemente hay que invocar el comando:

1
show slave statusG;

La última fila indicará el tiempo de respuesta entre ambos servidores, que normalmente debería ser 0 o un valor próximo a cero y por otro lado si el valor es nulo (NULL) querrá decir que la replicación no está funcionando (comprobar Last_errno).

En este punto únicamente queda modificar el código de las aplicaciones para que admitan dos grupos de conexiones; uno para modificar tablas (inserciones, modificaciones y eliminaciones) y otro para consultar tablas, pero este ya será otro tema!!!