Archive of November 2009
Arquitectura Maestro / Maestro en Mysql
La arquitectura Maestro/Maestro es muy sencilla tanto de entender como implementar. Cuando vimos anteriormente Maestro/Esclavo, vimos que el Maestro se utilizaba para escrituras, mientras que en lecturas teníamos N servidores. En ese caso la lectura no es problema, hay suficiente hardware procesando peticiones, pero ¿qué pasa con la escritura?. Según el número de usuarios aumente y la carga de escrituras sea mayor, dicho servidor terminará por no dar a basto ralentizando el buen funcionamiento de nuestras aplicaciones. Maestro/Maestro viene a solucionarnos este problema.

En este caso, H1 y H2 reciben las peticiones de escritura. Los dos deben tener los datos sincronizados, para ello se sigue el siguiente esquema:
- H1 es maestro de H2 (por lo tanto H2 esclavo de H1)
- H2 es maestro de H1 (por lo tanto H1 es esclavo de H2)
De esta forma, todo lo escrito en H1 se replicará a H2 y viceversa.
La configuración es parecida a la del esquema Maestro/Esclavo, solo que tenemos que hacerlo dos veces :)
1- Dumpeamos la BD del H1 con los datos del binary log actual y la posición:
#H1> mysqldump BD --master-data=2 > dump_file
2- La importamos en H2:
#H2> mysql BD < dump_file
3- Configuramos my.cnf de H1 (10.10.10.1) y creamos el usuario de replicación:
log-bin=mysql-bin
binlog-do-db=BD
binlog-ignore-db=mysql
binlog-ignore-db=test
server-id=1
mysql> grant replication slave on *.* to 'replication'@10.10.10.2 identified by 'slave';
4- Configuramos my.cnf de H2 (10.10.10.2):
log-bin=mysql-bin
binlog-do-db=BD
binlog-ignore-db=mysql
binlog-ignore-db=test
server-id=2
mysql> grant replication slave on *.* to 'replication'@10.10.10.1 identified by 'slave';
5- Configuramos H2 como esclavo de H1:
mysql> CHANGE MASTER TO MASTER_HOST = ‘10.10.10.1’, MASTER_USER = ‘replication’, MASTER_PASSWORD = ‘slave’, MASTER_LOG_FILE = ‘master_log_file’, MASTER_LOG_POS = master_log_pos;
El master_log_file y master_log_pos los sacamos del fichero dump_file.
También es posible sacarlo de otras formas, por ejemplo el comando "show master status" nos muestra en que fichero y posición se encuentra el log binario.
6- Configuramos H1 como esclavo de H2:
mysql> CHANGE MASTER TO MASTER_HOST = ‘10.10.10.2’, MASTER_USER = ‘replication’, MASTER_PASSWORD = ‘slave’, MASTER_LOG_FILE = ‘master_log_file’, MASTER_LOG_POS = master_log_pos;
Listo, ya está montada la replicación. Como se ve, tantos pasos se pueden resumir en:
A es esclavo de B, B es esclavo de A. Listo ^_^
Ahora si ponemos un balanceador delante que reparta las escrituras (round-robin) ya tendremos el problema de carga solucionado. Es importante que esta parte no es mucho más escalable de esta forma, debido a que como ya se comentó, un server solo puede ser esclavo de un único maestro. Por lo que una arquitectura maestro/maestro tendrá como máximo dos hosts implicados.
Ahora imaginemos que nuestra base de datos tiene un campo ID autoincremental, que identifica un artículo. ¿Qué pasa si se escribe al mismo tiempo en las dos bases de datos? Que H1 enviará una modificación al H2 con el ID p.ej. 3000, y el H2 al H1 otro artículo completamente distinto con ID 3000. Ya la hemos liado, duplicados de IDs.
Para evitar esto se suele configurar cada uno de los servidores para que use auto incrementales salteados. De esta forma, si H1 usase solo autoincrementales pares y H2 impares, nunca se daría ese problema. Para hacer eso se indica en my.cnf lo siguiente:
H1:
auto_increment_increment = 2
auto_increment_offset = 1
H2:
auto_increment_increment = 2
auto_increment_offset = 2
Y listo, problema solucionado! Eso si, esto no es a prueba de manazas. Si alguien (o alguna aplicación) mete el autoincremental a mano saltándose estas normas, el lío estará garantizado igualmente.
Y eso es todo :)
La comisión Europea pone objeciones a la fusión de Oracle con Sun
La cosa se pone interesante :P
The regulators see a major conflict of interest in the world's largest commercial database company owning its largest open source competitor.
A lo que Oracle responde:
It is well understood by those knowledgeable about open source software that because MySQL is open source, it cannot be controlled by anyone.
MySQL se esta convirtiendo en un problema para Oracle, retrasando infinitamente la fusión que Sun parece necesitar a gritos.
Lo que no deben saber, es que estas cosas se solucionan con un duelo de bailes.
Fuente con más información (que yo estoy vago)
(Ya no)Tengo invitaciones de Google Wave
¡Se acabaron las invitaciones!
Es gracioso que justo al día siguiente de escribir el post de "desintoxicándose de Google" me lleguen invitaciones al Wave :)
Desintoxicándose de Google con Software Libre
Poco a poco todos vamos utilizando todas y cada una de las aplicaciones de Google y entregando todos nuestros datos, fotos, gustos, necesidades, etc. Yo me di cuenta cuando noté, que aún teniendo un VPS, leía los RSS en Google Reader, veía mis fotos en Picasa Web Album, leía mi correo en Gmail, subía mis ficheros a Google Docs, apuntaba mis tareas en iGoogle. Entonces, ¿para que cojones tengo un servidor dedicado?
Me propuse como tarea principal migrar todos esos servicios a algo que YO pueda controlar, así que me pasé una tarde bastante aburrida navegando por Freshmeat. Y encontré soluciones (todas ellas Php+Mysql) más que válidas:
PHPfileNavigator: interfaz web para la administración de ficheros. Se puede subir cualquier tipo de ficheros, comprimirlos, subdividirlos en carpetas, buscador, múltiples usuarios, soporte para miniaturas, etc. Al contrario que con Google Docs, se puede subir cualquier tipo de fichero, no solamente documentos, pero no existe un visor integrado en la propia web.
SamTODO: aplicación simple y sencilla para una función también simple y sencilla. Apuntar tareas pendientes. Permite categorías, severidad, visualizar histórico, etc. Lo único y necesario.
Album: se trata de un generador de álbumes en perl. Lo ejecutas en la carpeta donde tengas tus fotos y te genera un álbum. Simple y funcional. Ni tags, ni función de compartir, ni nada por el estilo. Un álbum es para guardar recuerdos y ver las fotos, nada más.
Tiny Tiny RSS: visor de RSS con una interfaz muy parecida a Google Reader y muy personalizable. Te permite añadir todos los RSS que te interesen, el envío de un resumen de las nuevas entradas por correo, marcar como favorito, etc.
Con esas aplicaciones libres he conseguido quitarme una gran parte de la dependencia de Google que empezaba a sufrir.
Y os preguntareís, ¿con que has sustituido Gmail? Pues sintiéndolo mucho, aún con nada. Gmail de momento me parece insustituible y durante unos años seguirá recogiendo el correo por pop3 de mi Dovecot.
Paginado de Mysql
Muchas veces ejecutamos queries cuyas salidas no entran en la pantalla, obligando a desplazarnos de arriba abajo una y otra vez para encontrar el contenido que nos interesa. En una shell la solución es sencilla, utilizar un pipe para a continuación enviar la salida a un comando de paginado como more o less. Bien, esto también es posible en MySQL.
mysql> pager more
Y listo. Ahora cada vez que hagas una querie, esta será enviada a more, mostrandote el resultado pantalla a pantalla. Pero si nos paramos a pensar podemos encontrar muchas mas utilidades a este comando. Por ejemplo:
mysql> pager md5sum
Con este tenemos un resumen md5 de la salida del comando, util para saber rápidamente si algún dato ha sido modificado.
mysql> pager mail -s "salida de mysql" direccion@dominio.com
Y con este la salida de un comando se enviará directamente por correo a la dirección indicada.
mysql> grep valor
Nos mostrará la línea que contiene la palabra "valor". Si no sabes hacer queries complejas, esta es la forma más sencilla de encontrar aquello que buscas :)
Para finalizar, si no quieres un paginador:
mysql> nopager







