<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Blog de Laura Berdasco &#187; cluster</title>
	<atom:link href="http://www.lauraberdasco.com/tag/cluster/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.lauraberdasco.com</link>
	<description>Guías, trucos, procesos y modelos tecnológicos</description>
	<lastBuildDate>Thu, 20 Oct 2011 06:30:01 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>Limitaciones de MySQL Cluster, decisión final</title>
		<link>http://www.lauraberdasco.com/2009/03/limitaciones-de-mysql-cluster-decision-final/</link>
		<comments>http://www.lauraberdasco.com/2009/03/limitaciones-de-mysql-cluster-decision-final/#comments</comments>
		<pubDate>Mon, 09 Mar 2009 10:52:09 +0000</pubDate>
		<dc:creator>laura</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[cluster]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://www.lauraberdasco.com/?p=261</guid>
		<description><![CDATA[En el proyecto que estamos desarrollando necesitamos, antes que nada, una alta y fácil escalabilidad del sistema de datos y por eso, en el momento de escoger el tipo de sistema de bases de datos que íbamos a utilizar pensamos como primera opción en el cluster de MySQL. MySQL Cluster nos permitía tener esa flexibilidad,… <a href="http://www.lauraberdasco.com/2009/03/limitaciones-de-mysql-cluster-decision-final/" rel="bookmark">leer más</a>]]></description>
			<content:encoded><![CDATA[<p>En el proyecto que estamos desarrollando necesitamos, antes que nada, una alta y fácil escalabilidad del sistema de datos y por eso, en el momento de escoger el tipo de sistema de bases de datos que íbamos a utilizar pensamos como primera opción en el cluster de MySQL. MySQL Cluster nos permitía tener esa flexibilidad, además de una simple replicación y transmisión de los datos&#8230; en un principio, creímos que la elección era acertada. Aún así, nos quedaban cosas por descubrir.</p>
<p>Intentamos trasladar la idea del Cluster y su montaje a un entorno EC2 de Amazon con su almacenamiento en nube (Elastic Compute Cloud) -<em>más información sobre EC2 en los blogs de <a title="Santi's Blog" href="http://nowaynoback.com" target="_blank">Santi</a> y <a title="Xavi's blog" href="http://ixavi.com" target="_blank">Xavi</a>, o en la página oficial de <a title="Amazon EC2" href="http://aws.amazon.com/ec2/" target="_blank">Amazon EC2</a></em>- y algo empezó a no cuadrar. Nos dimos cuenta, primeramente, que MySQL Cluster es un sistema cuyo <strong>uso es recomendado en redes locales</strong> que permitan una rápida velocidad y no es un sistema orientado a sistemas web; aún así, decidimos seguir adelante.</p>
<p>Otra piedra en el camino la encontramos unas horas más tarde, cuando leímos (<em>en algún apartado de la documentación de <a title="MySQL Cluster" href="http://dev.mysql.com/doc/refman/5.0/es/ndbcluster.html" target="_blank">MySQL Cluster</a></em>) que la<strong> seguridad entre la comunicación de los nodos de datos dejaba bastante que desear</strong> ya que ésta no estaba encriptada y corrías el peligro de que pudieran interceptar informaciones del sistema. Es por eso que se recomendaba la proximidad entre nodos; nuestra idea era crear diferentes instancias en EC2 que sirvieran como nodos de datos independientes y Amazon no te garantiza ningún tipo de &#8220;proximidad&#8221; entre instancias (<em>si es que puede hablarse de proximidad como una propiedad realmente física</em>). Aún así, decidimos arriesgarnos a continuar con nuestra primera solución.</p>
<p>Algunos dicen que nuestro sistema, en papel, está muy bien organizado y una vez implementado la mitad de los elementos que aparecen en el modelo de datos desaparecen. Otros dicen que no es necesario el uso de Foreign Keys (claves foráneas) en el momento real de la implementación. Aún así, nosotros estamos en la convicción de que si que lo son y por eso queríamos que nuestro sistema de base de datos las tuviera en cuenta; no importa que digáis que esta es una reflexión demasiado metódica, somos estudiantes en su último año de carrera y apostamos por un sistema bien hecho desde el principio. Por esto, cuando vimos que el motor del Cluster (ndbcluster) <strong>no soportaba claves foráneas</strong> decidimos no jugar más con dicha estructura.</p>
<p>Nos estuvimos peleando durante varias horas barajando diferentes motores e información diversa de sistemas de bases de datos y finalmente nos dimos cuenta que el propio MySQL tiene un sistema de replicación <em>master-slave</em> que permite el uso de diferentes motores para el <em>master</em> y para el <em>slave</em>. Concretamente, podíamos tener en el <em>master</em> el motor de MySQL <strong>InnoDb</strong> que si que soporta el uso de claves foráneas (tan importantes en nuestro sistema) y utilizar el motor <strong>MyIsam</strong> para los <em>slaves</em>. Este sistema se puede montar fácilmente en un entorno EC2, guardando todos los datos en un volumen <strong>EBS</strong> y utilizando las instancias para montar el <em>master-slave</em> sin contener datos propios. Esta es la última deducción, ya veremos si finalmente es la acertada.</p>
<p>En los próximos días publicaremos las pruebas que vayamos haciendo en su construcción en EC2.</p>
<p>Esto es todo por hoy desde el zulo, pingüinos y manzanitas world! (hoy sin jefe&#8230;)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lauraberdasco.com/2009/03/limitaciones-de-mysql-cluster-decision-final/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Primeros pasos con MySQL Cluster: instalación, configuración y arrancada</title>
		<link>http://www.lauraberdasco.com/2009/02/primeros-pasos-con-mysql-cluster-instalacion-configuracion-y-arrancada/</link>
		<comments>http://www.lauraberdasco.com/2009/02/primeros-pasos-con-mysql-cluster-instalacion-configuracion-y-arrancada/#comments</comments>
		<pubDate>Fri, 20 Feb 2009 14:57:47 +0000</pubDate>
		<dc:creator>laura</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[cluster]]></category>
		<category><![CDATA[configuracion]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[trucos]]></category>

		<guid isPermaLink="false">http://www.lauraberdasco.com/?p=70</guid>
		<description><![CDATA[Como hemos comentado en el post anterior, vamos a explicar paso a paso la instalación, la configuración y el arranque de un cluster de prueba de MySQL Cluster sobre la versión 8.10 de Ubuntu. Instalación Primero, y fundamental, es tener instalados los paquetes de mysql en el sistema. Para saber si los tenemos o no,… <a href="http://www.lauraberdasco.com/2009/02/primeros-pasos-con-mysql-cluster-instalacion-configuracion-y-arrancada/" rel="bookmark">leer más</a>]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;">Como hemos comentado en el post anterior, vamos a explicar paso a paso la instalación, la configuración y el arranque de un cluster de prueba de MySQL Cluster sobre la versión 8.10 de Ubuntu. <strong><br />
</strong></p>
<p style="text-align: left;"><strong>Instalación</strong></p>
<p style="text-align: left;">Primero, y fundamental, es tener instalados los paquetes de mysql en el sistema. Para saber si los tenemos o no, podemos ir al Gestor de Paquetes Synaptic de Ubuntu (<strong>System&gt;Administration&gt;Synaptic Package Manager</strong>) y se nos abrirá una pantalla como esta después de haber introducido la contraseña de <em>root. </em>Introduciremos la palabra &#8220;mysql&#8221; en el buscador para que nos muestre todos los paquetes relacionados.</p>
<p style="text-align: left;"><a rel="attachment wp-att-92" href="http://www.lauraberdasco.com/2009/02/primeros-pasos-con-mysql-cluster-instalacion-configuracion-y-arrancada/spm-ubuntu1/"><img class="aligncenter size-full wp-image-92" title="spm-ubuntu1" src="http://www.ixavi.com/lauraberdasco.com/wp-content/uploads/2009/02/spm-ubuntu11.gif" alt="spm-ubuntu1" width="495" height="309" /></a></p>
<p style="text-align: left;">Aquellos paquetes que se acompañen con un recuadro verde son los que están instalados en el sistema. Dicho paquete <em>mysql</em> contiene, al menos en sus versiones para Ubuntu 8.10, soporte para MySQL Cluster por lo que no hemos de descargar ningún otro archivo para poder utilizarlo.</p>
<p style="text-align: left;"><strong>Creación y modificación de archivos de configuración</strong></p>
<p style="text-align: left;">Hemos de tener en cuenta que Ubuntu utiliza unos directorios concretos cuando se le delega la instalación de dichos paquetes, por defecto. Consultando la documentación oficial de <a title="Documentación en castellano de MySQL Cluster" href="http://dev.mysql.com/doc/refman/5.0/es/ndbcluster.html" target="_blank">MySQL Cluster</a> nos hemos dado cuenta de que la localización de los archivos de configuración que se expresa son diferentes a la de nuestro sistema. La siguientes línias determinarán nuestro propio proceso de configuración y arranque del sistema de cluster y no el que se indica en dicha documentación (un tanto diferente).</p>
<p>Dicho todo esto, vamos a por el primer paso. La instalación de MySQL en Ubuntu repercute en una serie de carpetas del sistema:</p>
<ul>
<li> <strong>/etc/</strong> donde el sistema añade un directorio <em>mysql</em> que, podríamos decir, guarda la información relacionada con su motor y arranque. Aquí es donde encontraremos el archivo que necesitaremos más adelante, <strong>my.cnf</strong>.</li>
<li><strong>/var/lib/</strong> donde el sistema añade tantas carpetas como sean necesarias para describir su &#8220;contenido&#8221;. Aquí encontraremos un directorio llamado mysql-cluster que es donde crearemos su archivo de configuración, <strong>config.ini</strong>.</li>
</ul>
<p>Pero, vayamos por partes.</p>
<ol>
<li><strong>Archivo de configuración config.ini</strong> para la configuración de MySQL-Cluster.<br />
Abrimos la consola (<strong>Applications&gt;Accessories&gt;Terminal</strong>), e insertamos la siguiente línia:<br />
<code><br />
cd /var/lib/mysql-cluster<br />
</code> Una vez en el directorio tendremos que crear el archivo de configuración. Como root escribiremos la siguiente línia:<br />
<code><br />
sudo gedit config.ini<br />
</code>E introduciremos la contraseña de root que tengamos. Nos abrirá el <em>gedit</em> es un programa de edición de texto muy sencillo. Al detectar que dicho archivo no existe en el directorio escogido, lo crea automáticamente. Una vez abierto, copiaremos las siguientes línias :<br />
<code><br />
# file "config.ini" - showing minimal setup consisting of 1 data node,<br />
# 1 management server, and 3 MySQL servers.<br />
# The empty default sections are not required, and are shown only for<br />
# the sake of completeness.<br />
# Data nodes must provide a hostname but MySQL Servers are not required<br />
# to do so.<br />
# If you don't know the hostname for your machine, use localhost.<br />
# The DataDir parameter also has a default value, but it is recommended to<br />
# set it explicitly.<br />
# Note: DB, API, and MGM are aliases for NDBD, MYSQLD, and NDB_MGMD<br />
# respectively. DB and API are deprecated and should not be used in new<br />
# installations.<br />
[NDBD DEFAULT]<br />
NoOfReplicas= 1<br />
[MYSQLD DEFAULT]<br />
[NDB_MGMD DEFAULT]<br />
[TCP DEFAULT]<br />
[NDB_MGMD]<br />
HostName= localhost<br />
[NDBD]<br />
HostName= localhost<br />
DataDir= /var/lib/mysql-cluster<br />
[MYSQLD]<br />
[MYSQLD]<br />
[MYSQLD]<br />
</code><br />
<strong>Nota</strong>: HostName de NDB_MGM (nodo administración) y NDBD (nodo datos) y DataDir dependerán de cada proyecto, pero el ejemplo que se muestra funciona para la prueba rápida en un mismo ordenador. No olvidemos, que en un sistema corriendo de forma real tendríamos diferentes máquinas para los diferentes procesos de administración y almacenamiento de datos, y por tanto sus HostsName serán unos en concreto para cada máquina.</li>
<li><strong>Activar motor de almacenamiento ndbcluster</strong>.<br />
Accedemos, mediante consola, al siguiente directorio:<br />
<code><br />
cd /etc/mysql/<br />
</code><br />
Y abriremos el archivo <strong>my.cnf</strong> para poder activar el motor de almacenamiento. Ésto no es más que añadir la siguiente línea al código:<br />
<code><br />
[mysqld]<br />
ndbcluster<br />
</code><br />
Y más o menos, tendremos una parte del documento que será de la siguiente manera;<br />
<code><br />
...<br />
[mysqld]<br />
#<br />
# * Basic Settings<br />
#<br />
ndbcluster<br />
#<br />
# * IMPORTANT<br />
#   If you make changes to these settings and your system uses apparmor, you may<br />
#   also need to also adjust /etc/apparmor.d/usr.sbin.mysqld.<br />
#<br />
...<br />
</code><br />
Una vez hecho esto podremos crear los nuevos nodos.
</li>
<li><strong>Arrancamos el nodo de administración y el nodo de datos</strong><br />
Volvemos a colocarnos en el directorio /var/lib/mysql-cluster :<br />
<code><br />
cd /var/lib/mysql-cluster<br />
</code><br />
Con privilegios de root, arrancamos el nodo administrador:<br />
<code><br />
sudo ndb_mgmd<br />
</code><br />
Y a continuación, arrancamos un nodo de datos:<br />
<code><br />
sudo ndbd --initial<br />
</code>
</li>
<li><strong>Reiniciar el servidor MySQL y comprovar que funciona el NDBCLUSTER</strong><br />
Una vez llegado este punto, es hora de reiniciar el servidor mysql que tengamos. Para ello es necesario que lo hagamos con permisos de root:<br />
<code><br />
sudo /etc/init.d/mysql stop<br />
sudo /etc/init.d/mysql start<br />
</code><br />
o<br />
<code><br />
sudo /etc/init.d/mysql restart<br />
</code><br />
Si no ha aparecido ningún error, ya estamos preparados para arrancar el cluster.
</li>
<li><strong>Arrancar mysql con el cluster</strong><br />
Inicializaremos mysql desde la consola:<br />
<code><br />
mysql -u root -p<br />
</code><br />
Y nos pedirá la contraseña que hayamos definido para el sistema mysql. La introducimos y nos aparecerá algo parecido a ésto:<br />
<code><br />
Welcome to the MySQL monitor.  Commands end with ; or g.<br />
Your MySQL connection id is 64<br />
Server version: 5.0.67-0ubuntu6 (Ubuntu)</p>
<p>Type 'help;' or 'h' for help. Type 'c' to clear the buffer.</p>
<p>mysql><br />
</code><br />
Introducimos una sentencia que nos permita ver de qué se compone nuestro sistema mysql<br />
<code><br />
mysql> show engines;<br />
</code><br />
y nos debería aparecer una tabla que contenga varías filas. Entre ellas, debería aparecer una como esta:<br />
<code><br />
| ndbcluster | YES      | Clustered, fault-tolerant, memory-based tables<br />
</code><br />
A veces es posible que aparezca DEFAULT en vez de YES. Si no aparece ninguna de estas dos es que algo no ha salido bien. Intenta revisar todos los pasos anteriores aquí descritos.</p>
<p>Ahora jugaremos con alguna base de datos que tengamos en el sistema. Si no tienes ninguna, puedes crearla facilmente con Navicat o cualquier otra aplicación gestora de mysql. Pensemos en que la tenemos.<br />
<code><br />
mysql> use db_usuaris;<br />
</code><br />
y una vez en la base de datos que hemos escogido, vamos a crear una table que utilice el engine del cluster:<br />
<code><br />
mysql> create table ctest (i INT) engine=ndbcluster;<br />
</code><br />
Una vez la hemos creado, vamos a ver sus propiedades<br />
<code><br />
mysql> show create table ctest G;<br />
</code><br />
y debería salir algo, tal que así:<br />
<code><br />
*************************** 1. row ***************************<br />
       Table: ctest<br />
Create Table: CREATE TABLE `ctest` (<br />
  `i` int(11) default NULL<br />
) ENGINE=ndbcluster DEFAULT CHARSET=latin1<br />
1 row in set (0.00 sec)<br />
</code><br />
Finalizamos sesión en mysql escribiendo:<br />
<code><br />
mysql> exit;<br />
</code>
</li>
<li><strong>Para finalizar, ver si los nodos se han inicializado correctamente</strong><br />
Para ello vamos a arrancar el nodo administración de la siguiente manera:<br />
<code><br />
sudo ndb_mgm<br />
</code><br />
Ya simplemente nos queda mirar un reporte de los nodos que se han creado, y ya habremos terminado con este proceso:<br />
<code><br />
ndb>show;<br />
</code><br />
y si todo ha ido bien, aparecerá algo tal que así:<br />
<code>Cluster Configuration<br />
---------------------<br />
[ndbd(NDB)]     1 node(s)<br />
id=2    @127.0.0.1  (Version: 3.5.3, Nodegroup: 0, Master)</p>
<p>[ndb_mgmd(MGM)] 1 node(s)<br />
id=1    @127.0.0.1  (Version: 3.5.3)</p>
<p>[mysqld(API)]   3 node(s)<br />
id=3    @127.0.0.1  (Version: 3.5.3)<br />
id=4 (not connected, accepting connect from any host)<br />
id=5 (not connected, accepting connect from any host)<br />
</code>
</li>
</ol>
<p>Llegados a este punto, ya podemos dar por finalizada la tarea de este post. Hemos conseguido inicializar correctamente un cluster MySQL y ya podemos guardar información en las tablas creadas con esta tecnología.<br />
Otro día, más.</p>
<p>Saludos desde el zulo, pingüinos y manzanitas world!</p>
<p style="text-align: left;">
<p style="text-align: left;">
<p style="text-align: left;">
<p style="text-align: left;">
<p style="text-align: left;">
<p style="text-align: left;">
<p style="text-align: left;">
<p style="text-align: left;">
<p style="text-align: center;">
<p style="text-align: center;">
<p style="text-align: left;">
]]></content:encoded>
			<wfw:commentRss>http://www.lauraberdasco.com/2009/02/primeros-pasos-con-mysql-cluster-instalacion-configuracion-y-arrancada/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Conceptos sobre MySQL Cluster</title>
		<link>http://www.lauraberdasco.com/2009/02/conceptos-de-mysql-cluster/</link>
		<comments>http://www.lauraberdasco.com/2009/02/conceptos-de-mysql-cluster/#comments</comments>
		<pubDate>Fri, 20 Feb 2009 11:30:45 +0000</pubDate>
		<dc:creator>laura</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[cluster]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://www.lauraberdasco.com/?p=23</guid>
		<description><![CDATA[El proyecto que estamos desarrollando nos obliga a explorar nuevos conceptos y nueva tecnologías. En este blog, y en los afines a éste (ixavi.com y nowaynoback.com), iremos publicando regularmente estos pequeños estudios que llevamos a cabo cada día. Hoy es el turno de MySQL Cluster, y voy a hacer un primer post introductorio a algunos… <a href="http://www.lauraberdasco.com/2009/02/conceptos-de-mysql-cluster/" rel="bookmark">leer más</a>]]></description>
			<content:encoded><![CDATA[<p>El proyecto que estamos desarrollando nos obliga a explorar nuevos conceptos y nueva tecnologías. En este blog, y en los afines a éste (<a title="Xavier Sardà" href="http://ixavi.com" target="_blank">ixavi.com</a> y <a title="Santi Mundi" href="http://nowaynoback.com" target="_blank">nowaynoback.com</a>), iremos publicando regularmente estos pequeños estudios que llevamos a cabo cada día.</p>
<p>Hoy es el turno de MySQL Cluster, y voy a hacer un primer post introductorio a algunos puntos importantes sobre esta tecnología.</p>
<p><a rel="attachment wp-att-48" href="http://www.lauraberdasco.com/2009/02/conceptos-de-mysql-cluster/logo_mysql_sun_a/"><img class="size-full wp-image-48 alignleft" title="mysql" src="http://www.ixavi.com/lauraberdasco.com/wp-content/uploads/2009/02/logo_mysql_sun_a1.gif" alt="Logo mySQL" width="114" height="68" /></a></p>
<p><strong>¿Por qué MySQL Cluster y no una base de datos normal y corriente?</strong> Podemos decir que nuestro proyecto mantiene unas necesidades que no se cubren con un sistema de bases de datos corriente. Nuestro principal problema reside en la respuesta a un gran nombre de consultas al sistema que estamos desarrollando; para que ésto sea eficiente necesitamos una tecnología que nos permita la distribución de estas peticiones para tener un tiempo de respuesta menor. Por esta razón pensamos en MySQL Cluster como una buena y fácil solución.</p>
<p><strong>Características generales de MySQL Cluster</strong></p>
<p>MySQL Cluster está formado por un motor NDB, que es un motor de almacenamiento en memoria caracterizado por la persistencia de los datos. Cada parte del cluster se denomina nodo y podemos encontrar de diferentes tipos:</p>
<p>- El <strong>nodo administrador</strong> tiene la función principal de administrar otros nodos dentro del cluster. Además, ofrece datos sobre la configuración de cada uno, inicializa o detiene su funcionamiento o permite ejecutar copias de seguridad. Es muy importante, por contener la configuración de los otros nodos, que sea el primero en ser arrancado.</p>
<p>- El <strong>nodo de datos</strong> es el nodo que almacena los datos del cluster. Tendremos tantos nodos de este estilo como réplicas de la información que necesitemos para el sistema.</p>
<p>- El <strong>nodo SQL</strong> es el nodo que accede a los datos del cluster. En un MySQL Cluster, el nodo cliente es un servidor MySQL tradicional con motor NDB Cluster.</p>
<p>Con esta estructura obtenemos que la configuración del sistema de cluster reside en la configuración de sus nodos y en la comunicación que establecemos entre ellos. Debemos tener en cuenta que se trata de un proceso centralizado en el nodo de administración por lo que es necesario tenerlo arrancado antes de empezar la creación de los nodos de datos.</p>
<p style="text-align: center;">
<div id="attachment_24" class="wp-caption aligncenter" style="width: 467px"><a rel="attachment wp-att-24" href="http://www.lauraberdasco.com/2009/02/conceptos-de-mysql-cluster/cluster-esquemabasic/"><img class="size-full wp-image-24" title="Esquema básico cluster" src="http://www.ixavi.com/lauraberdasco.com/wp-content/uploads/2009/02/cluster-esquemabasic1.png" alt="Esquema básico cluster" width="459" height="565" /></a><p class="wp-caption-text">Esquema básico cluster</p></div>
<p>En el próximo post explicaré como realizar un montaje rápido de este sistema sobre la distribución Ubuntu que utilizo normalmente, la 8.10.</p>
<p>Saludos desde el zulo, pingüinos y manzanitas world!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lauraberdasco.com/2009/02/conceptos-de-mysql-cluster/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

