Publicaciones de farias

Actualización de tzdata en MySQL

Publicado por el 8 de marzo, 2013 en MySQL | 0 comentarios

Un problema que se nos ha vuelto común en esta época es la actualización de las Zonas Horarias de servidores, entre ellos servicios como MySQL.

Debido a que MySQL utiliza por omisión como time_zone a SYSTEM, es decir la zona horaria del sistema operativo, solo lo lee en el inicio de mysqld, lo que requiere reiniciar el servicio. Reiniciar un servidor de MySQL que se encuentra en producción está fuera de toda discusión, por lo que debemos hacerlo con el servidor en caliente. No todo está perdido, ya que existe una forma de hacerlo.

Para ello se debe activar una cualidad de MySQL que poco se usa que es la de utilizar las Zonas Horarias por su nombre en MySQL, lo que requiere cargar las tablas de time_zone en la base de datos “mysql” de MySQL.

Una vez que ya se tiene actualizada la tzdata del servidor, y por ende sus correspondientes archivos en /usr/share/zoneinfo en un Linux estándar, se deben transformar a SQL e insertarlos en las tablas correspondientes.

mysql_tzinfo_to_sql /usr/share/zoneinfo/ | mysql -p -uroot mysql

Con esto ya se tendrá actualizadas las tablas de time_zone en MySQL y se podrán utilizar directamente los nombres de las zonas horarias en el sistema. Y como extra, la actualización de las fechas de cambios horarios que como por estos días tenemos en Chile respecto a la DST.

Como ejemplo, acá tenemos un servidor que se le insertó la zoneinfo atrasada, sin las modificaciones realizadas al DST en Chile para esta semana:

mysql> SELECT CONVERT_TZ('2013-03-10 02:59:59','UTC', 'America/Santiago');
+-------------------------------------------------------------+
| CONVERT_TZ('2013-03-10 02:59:59','UTC', 'America/Santiago') |
+-------------------------------------------------------------+
| 2013-03-09 23:59:59 |
+-------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT CONVERT_TZ('2013-03-10 03:00:00','UTC', 'America/Santiago');
+-------------------------------------------------------------+
| CONVERT_TZ('2013-03-10 03:00:00','UTC', 'America/Santiago') |
+-------------------------------------------------------------+
| 2013-03-09 23:00:00 |
+-------------------------------------------------------------+
1 row in set (0.00 sec)

mysql>

Podemos ver que en el cambio de horario que se debía realizar el 9 de Marzo hacia el 10 de Marzo, existe el cambio horario respecto de UTC, lo que es incorrecto.

En cambio, acá tenemos un servidor que ha sido actualizado respecto de la nueva data de zoneinfo con la corrección DST para el 28 de Abril:

mysql> SELECT CONVERT_TZ('2013-03-10 02:59:59','UTC', 'America/Santiago');
+-------------------------------------------------------------+
| CONVERT_TZ('2013-03-10 02:59:59','UTC', 'America/Santiago') |
+-------------------------------------------------------------+
| 2013-03-09 23:59:59 |
+-------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT CONVERT_TZ('2013-03-10 03:00:00','UTC', 'America/Santiago');
+-------------------------------------------------------------+
| CONVERT_TZ('2013-03-10 03:00:00','UTC', 'America/Santiago') |
+-------------------------------------------------------------+
| 2013-03-10 00:00:00 |
+-------------------------------------------------------------+
1 row in set (0.00 sec)

mysql>

En este caso, no se cambia la hora el 9 de Marzo hacia el 10 de Marzo, sino cuando corresponde, que es el 28 de Abril.

mysql> SELECT CONVERT_TZ('2013-04-28 02:59:59','UTC', 'America/Santiago');
+-------------------------------------------------------------+
| CONVERT_TZ('2013-04-28 02:59:59','UTC', 'America/Santiago') |
+-------------------------------------------------------------+
| 2013-04-27 23:59:59                                         |
+-------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT CONVERT_TZ('2013-04-28 03:00:00','UTC', 'America/Santiago');
+-------------------------------------------------------------+
| CONVERT_TZ('2013-04-28 03:00:00','UTC', 'America/Santiago') |
+-------------------------------------------------------------+
| 2013-04-27 23:00:00                                         |
+-------------------------------------------------------------+
1 row in set (0.00 sec)

mysql>

Finalmente solo nos falta configurar la variable global “time_zone” a “America/Santiago”.

mysql> SET GLOBAL time_zone="America/Santiago";
Query OK, 0 rows affected (0.00 sec)

mysql>

Con esto, estamos con un servidor correcto, en producción.

Leer más

Encuentro Linux 2012

Publicado por el 13 de noviembre, 2012 en Eventos | 0 comentarios

Han pasado ya los días y los buenos recuerdos quedan de la experiencia.

Finales de  Octubre. Nos subimos a un auto y viajamos a Curicó, el lugar que nos hospedaría desde el 25 al 27. Nos quedamos en una simpática residencial, con buenos vecinos que nos acompañarían las tardes (y buena parte de las noches) en extensas conversaciones y asados. Este es el resumen de nuestras experiencias.

Día 0

Nuestro amigo Sergio Infante venía llegando desde Perú y pese a que fue una estadía muy corta en Santiago, pudimos ponernos al día con las noticias anuales antes de enviarlo a continuación en su viaje a Copiapó Curicó.

Día 1

Llegamos a la oficina en Providencia más temprano de lo habitual, revisando todos los detalles pendientes, correos y tickets por responder y todo cuanto hiciera mas relajada nuestra estadía fuera de la oficina. Tras más de una vuelta extra (hey!, el auto tenía que lavarse!) partimos finalizando la mañana con rumbo a Curicó.

Cuando finalmente llegamos, nos estaban esperando ya apostados en la universidad el grupo de amigos de GNOME y Ubuntu.

Durante la presentación inaugural dimos a conocer nuestros planes de dominación mundial en base a regalos. Durante nuestras presentaciones entregaríamos más de 20 poleras y finalizando el encuentro, el premio mayor: Un Samsung Galaxy Tab II.

Juan Pablo y Jonathan en momentos previos

Aunque el primer día partió lento con el público, la cosa fue mejorando con el paso de las horas. Fue el momento de una seguidilla de presentaciones de Openstack. Maximiliano Osorio del Labcomp USM iniciaría presentando sus experiencias y luego como plato fuerte y con mayor detalle Jonathan presentaría Nova, seguido de otra extensa presentación de Juan Pablo sobre Swift.

Lomo Italiano con Queso

Acto seguido y con el hambre de dos días, nos dejamos acariciar por las delicias de Cecinas Soler, particularmente del Lomo Italiano con Queso, a sugerencia de Juan Pablo (el cual con suerte alcancé a devorar la mitad, antes que mis arterias se negaran a permitir circular más sangre). Para finalizar el día con una extensa conversación con los amigos de siempre de GNOME y Ubuntu rodeando la mesa.

Día 2

Era mi turno. Y doble. Y con cambio de hora. Y en subida. Y con nieve. Con Rik Van Riel en la competencia comencé la mañana revisando las mil y una magias que se pueden realizar con Varnish Cache. Buena asistencia de público e interesantes preguntas que se llevaron de regalo poleras de Varnish y Linets.

Fabián en MySQL Cluster

Hasta que llegó nuevamente la hora de comer. Y nuevamente a Cecinas Soler, esta vez con la tremenda comitiva de todo GNOME, Ubuntu y amigos. Cuatro mesas juntas para acarrear más de una docena de Lomos Italianos con Queso (menos yo, ya mi corazón aprendió la lección) antes de volver a la Universidad nuevamente a la segunda ronda de presentaciones del día, donde tendría que partir con MySQL Galera con Percona XtraDB Cluster.

Mejor atención de público que la anterior, incluso, y con más preguntas, poleras y códigos para ganarse el Galaxy Tab II. Y aunque no logré mostrar todo lo que habría querido en solo 35 minutos, tal como destruir el cluster y recoger sus pedazos, nos fuimos felices.

Y como ya estaba a punto de finalizar el Encuentro y antes que comenzara la ley seca debido a las Elecciones Municipales, era el momento de una reunión más masiva, primero en la punta de un cerro en el centro de la ciudad con cuanto ser humano quisiera aparecer, y luego en nuestra casa con la parrilla encendida. Fue el momento de compartir con gente que no veíamos hace mucho tiempo, varios encuentros atrás de seguro, conocer gente nueva de la zona y darle una justa bienvenida a los expositores extranjeros, Sergio Infante, Rik Van Riel y Youness Alaoui. Aunque “some unlucky pieces” en la carne no nos dejaron tan bien parados como quisiéramos, fue una gran noche.

Día 3

El remate del Encuentro. El Día GNOME, con más amigos que viajaron exclusivamente para el evento, con más presentaciones del equipo de GNOME y más regalos en las Olimpiadas GNOME, una tradición.

 

Y durante la Ceremonia de Clausura, la guinda de la torta. Una vez más a tomar la palabra para regalar unas cuantas poleras que no habían sido depredadas durante las presentaciones y reuniones fuera de horario junto a la guinda de la torta, el sorteo final del Samsung Galaxy Tab II mediante un ad-hoc script Open Source que mostramos en la misma ceremonia en que se encontraría al afortunado ganador Maurcio Roco (sí, está bien escrito).

Equipo Linets con el Premio del Samsung Galaxy Tab II

Una entretenida aventura de tres días, que finalizaría una vez más con el pedido mensual de rotisería por parte de todo el equipo en Cecinas Soler antes de volver a casa. Cansados, pero felices, de haber participado en este evento anual que reúne a grandes amigos y donde se comparten grandes experiencias que nos ayudan a crecer.

Ceremonia de Clausura Encuentro Linux 2012

El próximo año estaremos allí nuevamente, con más sorpresas.

Leer más

MySQL Galera Cluster: Parte I

Publicado por el 11 de octubre, 2012 en Clusters | 0 comentarios

Durante nuestra experiencia desarrollando proyectos de plataformas de servicios con alta disponibilidad hemos experimentado una piedra de tope en el crecimiento de plataformas de bases de datos utilizando MySQL: la imposibilidad de utilizar sistemas de rápida implementación de clusters SQL sin tener que alterar los sistemas de storage o modificar los sistemas separando escritura y lectura con maestros-esclavos.

Hasta ahora, de querer utilizar sistemas distribuidos o de alta performance utilizando MySQL se debió acudir a MySQL cluster. De otra forma se debía proceder a inseguras y engorrosas configuraciones de maestros y esclavos con separacion de lectura y escritura entre ellos.

En vista de esta problemática, en situaciones donde es imposible por diseño el utilizar un sistema de storage diferente al elegido o con el fin de evitar las engorrosas configuraciones maestro-esclavo es que surge Galera, un sistema de replicación multi-maestro síncrono que permite subsanar dichas problemáticas.

El caso de uso más común, al utilizar MySQL como motor de base de datos para aplicaciones web, se siguen varios pasos.

La instalación básica consiste en un solo servidor que brinde tanto el contenido de aplicación web, y a su vez albergue el motor de bases de datos. Con esto tenemos un servidor sin especialización.

Segundo paso consistiría en especializar la plataforma separando el motor de bases de datos del servidor de aplicaciones. Con esto tenemos dos servidores especializados.

Tercer paso en la escalabilidad de la aplicación web consiste en incluír un nuevo servidor de aplicaciones a la plataforma e incluso incluír un balanceador de carga frontal entre ellos. Con esto tenemos tres, o cuatro, servidores especializados, dos de aplicaciones y un motor de bases de datos, más el balanceador de carga.

Siguiente paso sería implementar clusterizar la anterior plataforma agregando un proceso de failover para el servidor frontal. Con esto aun seguiríamos utilizando solo un servidor para motor de bases de datos.

¿Qué sigue? Segmentación de bases de datos con sistemas de replicación, que permitan separar la carga en el motor de base de datos entre las lecturas y las escrituras solicitadas por la aplicación web.

Finalmente ¿qué nos resta? Si podemos clusterizar con mediana facilidad la plataforma de servicio de aplicaciones, aun nos resta cómo realizar algo similar con la plataforma de motor de bases de datos. Requerimos una plataforma multimaster robusta, que permita control de salud y exclusión de nodos con fallos. Nace entonces MySQL Galera.

La fotografía es © Strt’s Photos.

Leer más