lunes, 24 de enero de 2011

MySQL Cluster + Linux

Este tutorial muestra cómo configurar un cluster con MySQL y Linux. Antes, debemos tener claro algunos conceptos.


¿QUÉ ES MYSQL CLUSTER?

MySQL Cluster es una tecnología que permite clustering de bases de datos en memoria en un entorno de no compartición. La arquitectura de no compartición permite que el sistema funcione con hardware barato, y sin ningún requerimiento especial de hardware o software. Tampoco tienen ningún punto único de fallo porque cada componente tiene su propia memoria y disco. MySQL Cluster integra el servidor MySQL estándar con un motor de almacenamiento clusterizado en memoria llamado NDB...
Este tutorial muestra cómo configurar un cluster con MySQL y Linux. Antes, debemos tener claro algunos conceptos.


¿QUÉ ES MYSQL CLUSTER?

MySQL Cluster es una tecnología que permite clustering de bases de datos en memoria en un entorno de no compartición. La arquitectura de no compartición permite que el sistema funcione con hardware barato, y sin ningún requerimiento especial de hardware o software. Tampoco tienen ningún punto único de fallo porque cada componente tiene su propia memoria y disco. MySQL Cluster integra el servidor MySQL estándar con un motor de almacenamiento clusterizado en memoria llamado NDB.





Un MySQL Cluster tiene organización física y lógica, con máqu
inas como elementos físicos. Los elementos lógicos son los nodos, y una máquina hospedando un nodo es un huésped cluster. Idealmente, habrá un nodo por huésped cluster, aunque es posible ejecutar más de un nodo en una máquina. Hay tres tipos de nodos, cada uno correspondiente a un rol específico en el cluster:
a) nodo de administración (nodo MGM) : Proporciona servicios de administración para todo el cluster, incluyendo arranque, parada, copias de seguridad, y datos de configuración en otros nodos. El nodo de administración se implementa como la aplicación ndb_mgmd; el cliente de administración usado para controlar MySQL Cluster via nodo MGM es ndb_mgm.

b) nodo de datos: Almacena y replica datos. La funcionalidad de los nodos de datos la trata una instancia del proceso NDB ndbd.

c) nodo SQL: Símplemente es una instancia de MySQL Server (mysqld) arrancado con la opción --ndb-cluster.

CONSIDERACIONES SOBRE EL CLUSTER EN MYSQL
1. Se debe instalar la versión 5.0 de MySQL ya que esta incluye el motor NDB y las herramientas para gestionar cada nodo dentro del cluster.

2. Su rendimiento depende directamente en la velocidad de conexión entre las máquinas del cluster. Los requerimientos de conectividad mínimo para cluster incluyen una red típica 100-megabit Ethernet o equivalente. Recomendamos usar Ethernet cuando sea posible.

3. Tenga en cuenta que MySQL Cluster no está diseñado para una conectividad de red menor a 100 Mbps. Por esta razón (entre otras), intentar ejecutar un MySQL Cluster en una red pública como Internet no funcionará y no está recomendado.


NUESTRO EJEMPLO

Para nuestro caso, vamos a partir de que ya se cuenta con los siguientes requisitos:

REQUERIMIENTOS DE SOFTWARE
• Administrador: XUbuntu 10.04 (MySQL 5.0)
• Nodo 1: Ubuntu 10.04 (MySQL 5.0)
• Nodo 2: Ubuntu 10.04 (MySQL 5.0)


Escenario:


Tenemos 3 equipos con las siguientes IPs:
• Administrador: 192.168.2.3
• Nodo 1: 192.168.2.2
• Nodo 2: 192.168.2.4


Instalación

Importante es tener instalados los paquetes de mysql en el sistema. Para saber si los tenemos o no, podemos ir al Gestor de Paquetes Synaptic y se nos abrirá una pantalla como la siguiente después de haber introducido la contraseña de root. Introduciremos la palabra “mysql” en el buscador para que nos muestre todos los paquetes relacionados.


Aquellos paquetes que se acompañen con un recuadro verde son los que están instalados en el sistema. Dicho paquete mysql contiene, para Ubuntu 10.04, soporte para MySQL Cluster por lo que no hemos de descargar ningún otro archivo para poder utilizarlo.
Existen dos archivos que se deben modificar para configurar el cluster, estos se encuentran en los directorios descritos a continuación:

? /etc/ donde el sistema añade un directorio mysql 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, my.cnf (Nodos de datos y MySQL).

? /var/lib/ donde el sistema añade tantas carpetas como sean necesarias para describir su “contenido”. Aquí encontraremos un directorio llamado mysql-cluster que es donde crearemos su archivo de configuración, config.ini (Nodo de administración).

1. NODO DE ADMINISTRACIÓN

Archivo de configuración config.ini para la configuración de MySQL-Cluster.
Abrimos la consola e insertamos la siguiente línea:

cd /var/lib/mysql-cluster
Una vez en el directorio tendremos que crear el archivo de configuración. Como root escribiremos la siguiente línea:

sudo gedit config.ini e introduciremos la contraseña de root que tengamos. Nos abrirá el gedit 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íneas:

# file "config.ini" - showing minimal setup consisting of 1 data node,
# 1 management server, and 3 MySQL servers.
# The empty default sections are not required, and are shown only for
# the sake of completeness.
# Data nodes must provide a hostname but MySQL Servers are not required
# to do so.
# If you don't know the hostname for your machine, use localhost.
# The DataDir parameter also has a default value, but it is recommended to
# set it explicitly.
# Note: DB, API, and MGM are aliases for NDBD, MYSQLD, and NDB_MGMD
# respectively. DB and API are deprecated and should not be used in new
# installations.
[NDBD DEFAULT]
NoOfReplicas= 1
[MYSQLD DEFAULT]
[NDB_MGMD DEFAULT]
[TCP DEFAULT]

[NDB_MGMD]
HostName= 192.168.2.3

[NDBD]
HostName= 192.168.2.2
DataDir= /var/lib/mysql-cluster
[NDBD]
Hostname=192.168.2.4
DataDir= /var/lib/mysql-cluster

[MYSQLD]
[MYSQLD]
[MYSQLD]

Nota: HostName de NDB_MGM (nodo administración) y NDBD (nodo datos)

Iniciar nodo:
/etc/init.d/mysql-ndb-mgm start

2. NODOS DE DATOS

La configuración de cada uno de estos nodos debe hacerse en el archivo my.cnf que se encuentra en el directorio /etc/. Si no existe debe crearse y debe contener las siguientes líneas. Esto en cada nodo de datos y cada nodo SQL:
[mysqld]
ndbcluster
ndb-connectstring=192.168.2.3



#y al final del archivo
[mysql_cluster]
ndb-connectstring=192.168.2.3


Inicio de los nodos de datos
Los nodos de datos se inician y mysql se reinicia:
/etc/init.d/mysql restart
/etc/init.d/mysql-ndb start



3. Luego regresamos al nodo de administración y verificamos si los nodos son reconocidos:
ndb_mgm> show;
Cluster Configuration
———————
[ndbd(NDB)] 2 node(s)
id=2 @192.168.2.2 (Version: 5.0.51, Nodegroup: 0)
id=3 @192.168.2.4 (Version: 5.0.51, Nodegroup: 0, Master)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.2.3 (Version: 5.0.51)
[mysqld(API)] 2 node(s)
id=4 @192.168.2.2 (Version: 5.0.51)
id=5 @192.168.2.4 (Version: 5.0.51)

4. Probando el Cluster
Entramos a mysql
$> mysql -u root -p
Enter password:


Creamos una base de datos de prueba
mysql> create database clustertest;
Query OK, 1 row affected (0.00 sec)

Creamos una base de datos:
mysql> use clustertest;
Database changed
mysql> create table test (i int) engine=ndbcluster;
Query OK, 0 rows affected (0.71 sec)

mysql> insert into test values (1);
Query OK, 1 row affected (0.05 sec)

mysql> select * from test;
+------+
| i |
+------+
| 1 |
+------+
1 row in set (0.03 sec)

Verificar después si estas han sido creadas:
mysql> show tables;


Para mayor informacion puedes revisar los siguientes enlaces:

AUTORES ??
talvez algunos preguntaran quienes son los autores intelectuales de todo esto, pues somos estudiantes cursando la materia Bases de Datos en Quinto Año de Ingenieria de Sistemas Informaticos de la Facultad Multidisciplinaria de Occidente de la Universidad El Salvador

Todo esto lo hicimos con el fin de aprender nuevas herramientas que nos pueden ser muy utiles ya estando en la area laboral.

integrantes:
  • Flores Flores, Melvin Joel
  • Linares Herrera, Gustavo Ernesto
  • Zarceño Ruano, Mauricio Ernesto
  • Marroquin Argueta, Hector Oswaldo
  • Martinez Monterroza, Ricardo Enrique...

1 comentario:

Alexander Calderón dijo...

Deberian de colocar un acerca de de este articulo, pongan los integrantes del grupo de trabajo, asi como una fotografia de ustedes.