CLUSTER Flashcards

El objetivo de este Deck de Mysql es tener un dominio avanzado de conocimientos acerca de la herramienta

1
Q

¿que es mysql?

A

MySQL es un sistema de gestión de bases de datos relacional, multihilo y multiusuario

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

¿sentencia para crear un usuario llamado jmedina con privilegios de consulta, borrado y actualización de registros en la base de datos sakila y solo para las tabla actor con la clave mysqlp@ssw0rd?

A

grant select,delete,update on sakila.actor to javier identified by ‘mysqlp@ssw0rd’

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

indique como desde terminal de linux nos conectamos a mysql teniendo el usuario jmedina y el password p@ssw0rd

A

$ mysql -ujmedina -pp@ssw0rd

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

¿En Linux las opciones de arranque de Mysql se encuentran en:?

A

/etc/mycnf con propósito global /etc/mysql/mycnf propósito global SYSCONFDIR/my.cnf propósito global $MYSQL_HOME/my.cnf opciones específicas del servidor defaults-extra-file este se especifica con –defaults-extra-file=path ~/.my.cnf opciones específicas de usuario.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

¿Para que sirve la sentencia show grants for <nombre_del_usuario>?</nombre_del_usuario>

A

Esta sentencia sirve para desplegar todos los privilegios que tiene el usuario <nombre></nombre>

por ejemplo nos mostraría algo así:

mysql> show grants for javier;
+————————————————–+
| Grants for javier@% |
+————————————————–+
| GRANT USAGE ON *.* TO ‘javier’@’%’ |
| GRANT SELECT ON sakila.actor TO ‘javier’@’%’ |
+————————————————–+
2 rows in set (0.00 sec)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Describa la forma en que usted podria empezar a conecer el entorno cuando ya se encuentra en el prompt de mysql(mysql>)

A

show databases; : me indica las bases de datos con las que contamos

use <nombre> ; </nombre> con use nos conectamos a la BD seleccionada

show tables;: nos muestra las tablas con las que cuenta la BD

desc<nombre>; </nombre>nos describe la tabla( es decir nos muestra el nombre del campo y su tipo de datos

show create table <nombre>;</nombre> nos muestra el script con el que fue creado la tabla

ejemplo

mysql> show databases;
+——————–+
| Database |
+——————–+
| information_schema |
| mysql |
| pedidos |
| performance_schema |
| sakila |
| test |
+——————–+
6 rows in set (0.06 sec)

mysql> use sakila;
Database changed
mysql> show tables;
+—————————-+
| Tables_in_sakila |
+—————————-+
| actor |
| actor_info |
| address |
| category |
| city |
| country |
| customer |
| customer_list |
| film |
| film_actor |
| film_category |
| film_list |
| film_text |
| inventory |
| language |
| nicer_but_slower_film_list |
| payment |
| rental |
| sales_by_film_category |
| sales_by_store |
| staff |
| staff_list |
| store |
+—————————-+
23 rows in set (0.00 sec)

mysql> desc actor;
+————-+———————-+——+—–+——————-+—————————–+
| Field | Type | Null | Key | Default | Extra |
+————-+———————-+——+—–+——————-+—————————–+
| actor_id | smallint(5) unsigned | NO | PRI | NULL | auto_increment |
| first_name | varchar(45) | NO | | NULL | |
| last_name | varchar(45) | NO | MUL | NULL | |
| last_update | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+————-+———————-+——+—–+——————-+—————————–+
4 rows in set (0.02 sec)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

¿cuantas formas existen para crear un usuario en mysql, mencionelas?

A

En mysql se pueden crear usuarios de dos formas:

  • Se pueden crear mediante la sentencia create user <nombre>;</nombre>

de esta forma solo se crea el usuario , este usuario no tiene permisos ni contraseña

create user <nombre> identified by '<password>';</password></nombre>

crea usuario y contraseña , sin embardo no tiene privilegios de nada

  • Se pueden crear usuarios y asignarles contraseñas y privilegios de una vez con la sentencia grant select, update, delete,drop on <bd>.<tbl> to <nombre> identified by '<contrase>' ejemplo: grant select, update on sakila.actor to jmedina identified by 's3rv3r'</contrase></nombre></tbl></bd>
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Procedimiento correcto para borrar un usuario

A

quitar los privilegios con revoke, si no estamos seguros de que privilegios tiene ese usuario lo averiguamos con la sentencia show grants<nombre>:</nombre>

                                 Consultamos que privilegios tiene el usuario jmedina

        mysql\> show grants for jmedina;

Luego revocamos los privilegios:

                                                mysql\> revoke select,update,delete,drop from jmedina;

Por último borramos el usuario

mysql>drop user jmedina

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

¿como veo la lista de procesos y usuarios en mysql, ademas indique como eliminar un proceso?

A

se puede ver la lista de procesos activos con:

mysql> show processlist;
+—-+——+———–+——–+———+——+——-+——————+
| Id | User | Host | db | Command | Time | State | Info |
+—-+——+———–+——–+———+——+——-+——————+
| 1 | root | localhost | sakila | Query | 0 | NULL | show processlist |
+—-+——+———–+——–+———+——+——-+——————+
1 row in set (0.00 sec)

mysql> kill 1;
ERROR 1317 (70100): Query execution was interrupted
mysql>

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

¿cual parametro hay que cambiar para el auto incremento y el parametro de inicio del auto incremento?

por ejemplo setee los parametros para que inicie en 100 y vaya de 10 en 10

A

el parametro para aumentar el auto incremento es auto_increment_increment, por default esta en 1

el parametro para fijar el número en que inicia el autoincremento es el auto_increment_offset por default esta en 1

mysql> SHOW VARIABLES LIKE ‘auto_inc%’;
+————————–+——-+
| Variable_name | Value |
+————————–+——-+
| auto_increment_increment | 1 |
| auto_increment_offset | 1 |
+————————–+——-+
2 rows in set (0.01 sec)

mysql> SET @@auto_increment_increment=10;
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW VARIABLES LIKE ‘auto_inc%’;
+————————–+——-+
| Variable_name | Value |
+————————–+——-+
| auto_increment_increment | 10 |
| auto_increment_offset | 1 |
+————————–+——-+

mysql> SET @@auto_increment_offset=100;
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW VARIABLES LIKE ‘auto_inc%’;
+————————–+——-+
| Variable_name | Value |
+————————–+——-+
| auto_increment_increment | 10 |
| auto_increment_offset | 100 |
+————————–+——-+

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

¿Qué es mysql Cluster?

A

MySQL Cluster
MySQL Cluster, como lo comentamos al principio de ésta entrada, es otro producto para administración de bases de datos, el cual puede proveer arquitecturas con 99.999% de alta disponibilidad, esto es alrededor de solo 5 minutos de tiempo NO operable al año.
MySQL Cluster, a diferencia de MySQL Server configura su servicio a través de 3 tipos de nodos:
- SQL / Application Nodes: Nodos transaccionales, los cuales reciben las peticiones de los clientes y transfieren éstas al grupo de Data Nodes, para proveer un cluster de HA, se necesitan al menos 2 instancias de SQL / Application Nodes.
- Data Nodes: Nodos de datos, lo cuales se encargan de la persistencia y sincronización de datos entre los nodos, para proveer un cluster de HA, se necesitan al menos 2 instancias de Data Nodes.
- Management Node: Nodo para administración de los servicios de MySQL Cluster, su función principal es iniciar servicios, y administrar el cluster a través de comandos CLI.
En este caso de MySQL Cluster es: Shared Nothing Architecture, a diferencia de MySQL Server (el cual puede trabajar con SAN); MySQL Cluster opera con su propia infraestructura en disco, pudiendo ser éstos discos attachados al server. MySQL Cluster, se encargará de replicar los datos y sincronizar la información entre todos los data nodes.
En materia de costos, MySQL Cluster se licencia por CPU, y adicionalmente se paga un monto anual por mantenimiento, en tanto que MySQL Server, se subscribe por un monto anual, el cual te da derecho de uso del software y servicios de mantenimiento soporte anual.
En próximas entradas escribiremos más detalles sobre MySQL Cluster, así como un ejemplos de como habilitar arquitecturas de HA con MySQL Server, o MySQL Cluster.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

¿Cuántas máquinas necesito para ejecutar un cluster mysql, y porqué?

A

omo mínimo se necesitan tres máquinas. Sin embargo, el número mínimo recomendado en MySQL Cluster es cuatro: una para el nodo de administración y otra para el de SQL, y dos para servir como nodos de almacenamiento. El propósito de los dos nodos de datos es proporcionar redundancia; el nodo de administración debe ejecutarse en una máquina separada para garantizar servicio de arbitración contínuo en caso que un nodo de datos falle.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

¿Qué hacen las distintas máquinas en un cluster?

A

Un MySQL Cluster tiene organización física y lógica, con máquinas 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. Son:

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.

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

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

¿Qué sistemas operativos pueden usar Cluster?

A

En MySQL 5.0, MySQL Cluster se soporta oficialmente en Linux, Mac OS X, y Solaris. Estamos trabajando para añadir soporte a cluster para otras plataformas, incluyendo Windows, y nuestra finalidad es eventualmente ofrecer MySQL Cluster en todas las plataformas en que se soporta MySQL .

Puede ser posible ejecutar procesos Cluster en otros sistemas operativos. Hemos tenido reportes de usuarios que dicen que han ejecutado Cluster en FreeBSD. Sin embargo, Cluster en cualquier plataforma que no sen las 3 mencionadas aquí se considera software alfa (como mucho), no puede garantizarse el buen funcionamiento en un entorno de producción, y no lo soporta MySQL AB.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

¿Cuáles son los requerimientos de hardware para ejecutar MySQL Cluster?

A

luster debe ejecutarse en cualquier plataforma en que los binarios de NDB estén disponibles. Naturalmente, una CPU más rápida y más memoria mejora el rendimiento, y CPUs de 64 bits serán mejores que los procesadores de 32. Debe haber suficiente memoria en las máquinas usadas por los nodos de datos para tratar cada parte de la base de datos (consulte ¿Cuánta RAM necesito? para más información). Los nodos pueden comunicarse via TCP/IP estándar y su hardware. Para soporte SCI, se necesita hardware especial de red.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

¿Necesito hacer alguna configuración especial de red para el Cluster? (¿Cómo se comunican las máquinas en un cluster?)

A

MySQL Cluster está pensado para usarse en un entorno de gran ancho de banda, con máquinas conectadas via TCP/IP. 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.

También se soporta el protocolo SCI (más rápido), pero necesita hardware especial. Consulte Sección 16.7, “Usar interconexiones de alta velocidad con MySQL Cluster” para más información acerca de SCI.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

Como MySQL Cluster usa TCP/IP, ¿significa que puedo usarlo en Internet, con uno o más nodos en una localización remota?

A

Es importante tener presente que la comunicación entre nodos en MySQL Cluster no es segura ; no está cifrada ni protegida por ningún otro mecanismo. La configuración más segura para un cluster es en una red privada detrás de un firewall, sin acceso directo a ningún nodo de datos ni de administración desde fuera.

Es muy dudoso que un cluster se muestre fiable bajo tales condiciones, ya que se diseñó e implementó con la suposición que se ejecutaría bajo condiciones que garantizaran conectividad dedicada de alta velocidad como las encontradas en configuraciones en una LAN con 100 Mbps o gigabit Ethernet (mejor la última). No testeamos ni garantizamos el rendimiento usando algo más lento que esto.

18
Q

¿Debo usar nuevos lenguajes de programación o de consulta para usar Cluster?

A

No. Aunque se usan algunos comandos especializados para administrar y configurar el cluster, solo comandos estándar (My)SQL se necesitan para:

Crear, alterar y borrar tablas

Insertar, actualizar y borrar datos de tabla

Crear, cambiar y borrar índices únicos y primarios

Configurar y administrar nodos SQL (servidores MySQL)

19
Q

Cómo puedo saber qué significan los mensajes de error o advertencias al usar Cluster?

A

Se puede hacer de dos modos:

Desde el MySQL Monitor, use SHOW ERRORS o SHOW WARNINGS inmediatamente al recibir la notificación del error o advertencia. También se pueden mostrar en MySQL Query Browser.

De un shell de sistema, use perror –ndb error_code.

20
Q

¿Es MySQL Cluster transaccional? ¿Qué tipo de tablas se soportan en Cluster ?

A

Sí. MySQL Cluster utiliza tablas creadas con el motor NDB , que soporta transacciones. NDB es el único motor que soporta cluster.

21
Q

¿Qué significa “NDB”?

A

Significa “Network Database”.

22
Q

Qué versiones de MySQL software soportan Cluster? ¿Debo compilarlo de las fuentes?

A

Cluster se soporta en todos los binarios MySQL-max en la serie 5.0, excepto lo que se explica en el siguiente parágrafo. Puede determinar si su servidor soporta o no NDB usando los comandos SHOW VARIABLES LIKE ‘have_%’; o SHOW ENGINES;. (Consulte Sección 5.1.2, “El servidor extendido de MySQL mysqld-max” para más información.)

Usuarios de Linux , tengan en cuenta que NDB no se incluye en los RPM estándar de MySQL server. Desde MySQL 5.0.4, hay paquetes RPM separados para el motor NDB junto con herramientas de administración; consulte la sección de descargas NDB RPM de MySQL 5.0 Downloads . (Antes de 5.0.4, debe usar los binarios -max proporcionados como .tar.gz . Todavía es posible, pero no es un requerimiento, así que puede usar su administración de RPMs de Linux si lo prefiere.) Puede obtener soporte NDB compilando los binarios -max de las fuentes, pero no es necesario hacerlo para usar MySQL Cluster. Para descargar los últimos binarios, RMP o distribución fuente en la serie MySQL 5.0

23
Q

¿Cuánta RAM necesito? ¿Es posible usar memoria de disco?

A

Actualmente, Cluster sólo funciona en memoria. Esto significa que todos los datos de tabla (incluyendo índices) se almacena en RAM. Por lo tanto, si sus datos ocupan 1 GB de espacio y quiere replicarlo en el cluster, necesitará 2 GB de memoria para ello. Esto es a parte de la memoria necesaria para el sistema operativo y cualquier aplicación ejecutándose en las máquinas del cluster.

Puede usar la siguiente fórmula para obtener una estimación aproximada de cuánta RAM necesita para cada nodo de datos en el cluster:

(SizeofDatabase * NumberOfReplicas * 1.1 ) / NumberOfDataNodes
Para calcular los requerimientos de memoria con más exactitud debe determinar, para cada tabla en la base de datos del cluster, el espacio de almacenamiento requerido por registro (consulte Sección 11.5, “Requisitos de almacenamiento según el tipo de columna” para más detalles), y multiplicarlo por el número de registros. Debe recordar tener en cuenta cualquier índice de columna como sigue:

Cada clave primaria o índice hash creado para una tabla NDBCluster necesita 21-25 bytes por registro. Estos índices usan IndexMemory.

Cada índice ordenado necesita 10 bytes de almacenamiento por registro, usando DataMemory.

Crear una clave primaria o índice único también crea un índice ordenado, a no ser que este índice se cree con USING HASH. En otras palabras, si se crea sin USING HASH, una clave primaria o índice único en una tabla Cluster ocupará hasta 31-35 bytes por registro en MySQL 5.0.

Tenga en cuenta que crear tablas MySQL Cluster con USING HASH para todas las claves primarias e índices únicos generalmente causará que las actualizaciones de tablas sean más rápidas. Esto es debido al hecho que se necesita menos memoria (ya que no se crean índices únicos), y que debe usarse menos CPU (ya que se deben leer y actualizar menos índices).

Es especialmente importante tener en mente que cada tabla en MySQL Cluster debe tener clave primaria, que el motor NDB creará una clave primaria automáticamente si no se define y que esta clave primaria se crea sin USING HASH.

No hay una forma sencilla en MySQL 5.0 para determinar exactamente cuánta memoria se está usando para almacenar índices Cluster en un momento dado; sin embargo, las advertencias se escriben en el log del cluster cuando el 80% de memoria DataMemory y/o IndexMemory está en uso, y de nuevo al 85%, 90% etc.

A menudo vemos preguntas de usuarios que reportan que, cuando intentan rellenar una base de datos cluster, el proceso de carga termina prematuramente y aparece un mensaje de error como este:

ERROR 1114: The table ‘my_cluster_table’ is full
Cuando esto ocurre, la causa es que su configuración no proporciona suficiente RAM para todos los datos de tablas e índice , incluyendo la clave primaria requerida por el motor NDB y creada automáticamente en el caso que la definición de tabla no incluya la definición de la clave primaria.

Vale la pena tener en cuenta que todos los nodos de datos deben tener la misma cantidad de RAM, ya que ningún nodo de datos en el cluster puede usar más memoria que la mínima cantidad disponible para cualquier nodo de datos individual. En otras palabras, si hay tres máquinas con nodos de datos y dos tienen 3 GB RAM disponibles y otro sólo 1 GB de RAM, entonces cada nodo sólo puede usar 1 GB para el cluster.

24
Q

En caso de un fallo catastrófico — por ejemplo, que la ciudad entera se queda sin electricidad y mi UPS falla — ¿perdería todos mis datos?

A

Todas las transacciones con commit se loguean. Por lo tanto, aunque es posible perder algunos datos en caso de catástrofe, debería ser algo limitado. La pérdida de datos puede reducirse minimizando el número de operaciones por transacción. (No es buena idea realizar un gran número de operaciones por transacción en cualquier caso.)

http://dev.mysql.com/doc/refman/5.0/es/mysql-cluster-faq.html

25
Q

¿indique cual es la instrucción para cargar datos a una tabla desde un archivo csv?

A

**************Metodo 1*****************

LOAD DATA LOCAL INFILE ‘<path></path>

<p>
INTO TABLE <nombre_de_la_tabla></nombre_de_la_tabla></p>

<p>
*****************metodo 2*******************</p>

<p>
LOAD DATA LOCAL INFILE '<path>
<p>
INTO TABLE <nombre_de_la_tabla></nombre_de_la_tabla></p>
<p>
LINES TERMINATED BY 'R\,N\,(ENTER)</p>
</path></p>

</path>

26
Q

¿uso del modo batch file ?

A

mysql> source filename;

27
Q

¿Es posile usar índices FULLTEXT con Cluster?

A

La indexación FULLTEXT no se soporta en el motor NDB , o por cualquier motor que no sea MyISAM. Estamos trabajando para añadir esta funcionalidad en nuevas versiones.

28
Q

¿Puedo ejecutar múltiples nodos en una sola máquina?

A

Es posible pero no recomendable. Una de las razones principales para ejecutar un cluster es proporcionar redundancia; para tener todos los beneficios de esta redundancia, cada nodo debe residir en máquinas separadas. Si tiene múltiples nodos en una misma máquina y esta falla, pierde todos estos nodos. Dado que MySQL Cluster puede ejecutarse en hardware dedicado cargado con sistemas operativos de bajo o ningún coste, vale la pena el gasto en una o dos máquina extra para guardar datos críticos. También vale la pena tener en cuenta que los requerimientos para una máquina cluster ejecutando un nodo de administración son mínimos; esta tarea puede realizarse con una CPU 200 MHz Pentium y suficiente RAM para el sistema operativo más una mínima cantidad de sobrecarga para los procesos ndb_mgmd y ndb_mgm .

29
Q

¿Puedo añadir nodos en un cluster sin reiniciarlo?

A

No. Un reinicio es necesario para añadir nuevos nodos MGM o SQL. Al añadir nodos de datos el proceso es más complejo, y necesita los siguientes pasos:

Hacer una copia de seguridad completa de todos los datos del cluster.

Parar todo el cluster y procesos de los nodos.

Reiniciar el cluster, usando la opción –initial

Restaurar todos los datos desde la copia de seguridad

En el futuro, esperamos implementar capacidad de reconfiguración “hot” para MySQL Cluster para minimizar (o eliminar) los requerimientos para reiniciar el cluster al añadir nuevos nodos.

30
Q

¿Hay alguna limitación que deba tener en cuenta al usar Cluster?

A

Las tablas NDB tienen las siguientes limitaciones:

No se soportan todos los conjuntos de caracteres y colaciones.

Índices FULLTEXT y prefijo no están soportados. Sólo pueden indexarse columnas completas.

Capítulo 18, Extensiones espaciales de MySQL no se soportan.

Sólo se soporta rollback completo para transacciones. Los rollback parciales y rollbacks en checkpoints no se soportan.

El máximo número de atributos permitidos por tabla es 128, y los nombres de atributo no pueden tener más de 31 caracteres. Para cada tabla, la longitud máxima combinada del nombre de tabla y de base de datos es 122 caracteres.

El tamaño máximo para un registro de tabla es de 8 kilobytes, sin contar BLOBs. No hay límite para el número de registros por tabla; los límites de tamaño de tabla dependen en un número de factores, en particular la cantidad de RAM disponible para cada nodo de datos.

El motor NDB no soporta claves foráneas. Como con tablas MyISAM, se ignoran.

No se soporta el caché de consulta.

Para información adicional de limitaciones de cluster, consulte Sección 16.8, “Limitaciones conocidas de MySQL Cluster”.

¿Cómo importo una base de datos existente en un cluster?

Puede importar bases de datos en MySQL Cluster como con cualquier otra versión de MySQL. A parte de las limitaciones mencionadas anteriormente, el único requerimiento especial es que cualquier tabla que se incluya en el cluster debe usar el motor NDB. Esto significa que las tablas deben crearse con la opción ENGINE=NDB o ENGINE=NDBCLUSTER.

31
Q

¿Cómo se comunican los nodos del cluster entre ellos?

A

Los nodos del Cluster pueden comunicarse mediante tres protocolos: TCP/IP, SHM (memoria compartida), y SCI (Scalable Coherent Interface). Donde está disponible, SHM se usa por defecto entre nodos residentes en el mismo equipo de cluster. SCI es un protocolo de alta velocidad (1 gigabit por segundo o más), alta disponibilidad usado en construir sistemas escalables de multi procesador; requiere hardware especial y drivers. Consulte Sección 16.7, “Usar interconexiones de alta velocidad con MySQL Cluster” para más información usando SCI como mecanismo de transporte en MySQL Cluster.

32
Q

¿Qué es un “árbitro”?

A

Si uno o más nodos en un cluster fallan, es posible que no todos los nodos del cluster será capaz de “verse” entre ellos. De hecho, es posible que dos conjuntos de nodos puedan a estar aislados de los otros en una partición de red, también conocido como un escenario “split brain”. Este tipo de situación no es deseable ya que cada conjunto de nodos trata de comportarse como si fuera el cluster entero.

Cuando caen los nodos del cluster, hay dos posibilidades. Si más del 50% de los nodos restantes pueden comunicarse entre ellos, entonces tenemos lo que a veces se llama “reglas de mayoría” , y este conjunto de nodos se consideran como el cluster. El árbitro entra en juego cuando hay un número impar de nodos: en tales casos, el conjunto de nodos al que pertenece el árbitro se considera el cluster, y los nodos que no pertenecen a este grupo se paran.

La información anterior está simplificada; a continuación hay una explicación más completa:

Cuando todos los nodos en al menos un grupo de nodos está vivo, la partición de la red no es un problema, porque ninguna porción del cluster puede formar un cluster funcional. El problema real es cuando un grupo no tiene todos sus nodos vivos, en tal caso la partición de red (el escenario “split-brain” mencionado anteriormente) es posible. Cuando se necesita un árbitro, que normalmente es el servidor de administración; sin embargo, es posible configurar cualquier MySQL Server en el cluster para que actúe como el árbitro. El árbitro acepta el primer conjunto de nodos del cluster que contacten con el, y le dice al resto que mueran. La selección del árbitro se controla mediante el parámetro de configuración ArbitrationRank para los nodos MySQL Server y de administración. (Consulte Sección 16.4.4.4, “Definición del servidor de administración de MySQL Cluster” para más detalles.) Debe tener en cuenta que el rol de administrador no impone ninguna demanda en la máquina designada, y por lo tanto la máquina árbitro no necesita ser particularmente rápida o tener memoria extra para este propósito.

33
Q

¿Qué tipos de columna soport MySQL Cluster?

A

MySQL Cluster soporta todos los tipos de columna MySQL usuales, con la excepción de los asocidados con las extensiones espaciales. (Consulte Capítulo 18, Extensiones espaciales de MySQL.) Además, hay algunas diferencias respecto a los índices cuando se usan con tablas NDB. Nota: En MySQL 5.0, las tablas Cluster (esto es, tablas creadas con ENGINE=NDBCLUSTER) tiene sólo registros de longitud fija. Esto significa que (por ejemplo, cada registro conteniendo una columna VARCHAR(255) necesitará 256 bytes de almacenamiento para esa columna, independientemente del tamaño de los datos almacenados. Este punto se arreglará en futuras versiones.

Consulte Sección 16.8, “Limitaciones conocidas de MySQL Cluster” para más información.

34
Q

¿Cómo arranco y paro MySQL Cluster?

A

Es necesario arrancar cada nodo en el cluster por separado en el siguiente orden:

Arranque el nodo de administración con el comando ndb_mgmd .

Arranque cada nodo de datos con el comando ndbd.

Arranque cada servidor MySQL (nodo SQL) usando mysqld_safe –user=mysql &.

Cada uno de estos comandos debe ejecutarse en una shell de sistema en la máquina que contenga el nodo afectado. Puede verificar que el cluster está en ejecución arrancando el cliente de administración MGM . ndb_mgm en la máquina con el nodo MGM.

35
Q

¿Qué ocurre a los datos del cluster cuando el cluster se para?

A

Los datos en memoria de los nodos de datos se escriben en disco, y se recargan en memoria la siguiente vez que se inicia el cluster.

Para parar el cluster, introduzca lo siguiente en una shell en la máquina del nodo MGM:

shell> ndb_mgm -e shutdown
Esto hace que ndb_mgm, ndb_mgm, y cualquier proceso ndbd termina correctamente. MySQL servers corriendo como nodos Cluster SQL pueden pararse usando mysqladmin shutdown.

Para más información, consulte Sección 16.6.1, “Comandos del cliente de administración” y Sección 16.3.6, “Apagado y encendido seguros”.

36
Q

¿Es útil tener más de un nodo de administración para el cluster?

A

Puede ser útil para ser más seguro. Sólo un nodo MGM controla el cluster en un momento dado, pero es posible configurar un MGM como primario, y otro o más nodos adicionales para tomar el control en caso de fallo del nodo MGM primario.

37
Q

¿Puedo mezclar hardware y sistemas operativos distintos en un Cluster?

A

Sí, mientras todas las máquinas y sistemas operativos tengan la misma endian. Es posible usar distintas versiones de MySQL Cluster en nodos distintos; sin embargo, recomendamos que esto se haga sólo como parte del procedimiento de actualización.

38
Q

¿Puedo ejecutar dos nodos de datos en una misma máquina? ¿Dos nodos SQL?

A

Sí. En el caso de múltiples nodos de datos, cada nodo debe usar un directorio de datos distinto. Si quiere ejecutar múltiples nodos SQL en una máquina, entonces cada instancia de mysqld debe usar un puerto TCP/IP distinto.

39
Q

¿Puedo usar nombres de equipo con MySQL Cluster?

A

Sí, es posible usar DNS y DHCP para equipos del cluster. Sin embargo, si su aplicación necesita disponibilidad de “cinco nueves”, recomendamos usar direcciones IP fijas. Esto es porque hacer la comunicación entre equipos del cluster dependiente de estos servicios introduce puntos de fallo adicionales, y mientras menos haya, mejor.

40
Q

16.11. Glosario de MySQL Cluster
Los siguientes términos son útiles para enteneder MySQL Cluster o tienen significado eespecial cuando se usan referidos a ellos.

Cluster:

En sentido genérico, un cluster es un conjunto de máquinas funcionando como unidad y trabajando juntas para tratar una única tarea.

NDB Cluster:

Este es el motor de almacenamiento usado en MySQL para implementar almacenamiento de datos, recuperación y administración distribuída entre varias máquinas.

MySQL Cluster:

Se refiere a un grupo de máquinas trabajando juntas usando el motor NDB para soportar una base de datos MySQL distribuída en una arquitectura de compartición nula usando almacenamiento en memoria.

Ficheros de configuración:

Ficheros de texto conteniendo directivas e información respecto al cluster, sus máquinas y sus nodos. Son leídos por los nodos de administración de cluster y cuando arranca el cluster. Consulte Sección 16.4.4, “Fichero de configuración” para detalles.

Copia de seguridad:

Una copia completa de todos los datos de cluster, transacciones y logs, guardados en disco y otro medio de almacenamiento.

Restauración:

Retornar el cluster a un prévio estado, como se almacenó en la copia de seguridad.

Checkpoint:

Generalmente hablando, cuando los datos se guardan en disco, se dice que se llega a un checkpoint. Más específicamente para el cluster, es un punto en tiempo donde todas las transacciones que han hecho un commit se guardan en disco. Respecto al motor NDB, hay dos clases de checkpoints que trabajan juntas para asegurar que se mantiene una vista consistente del cluster:

Local Checkpoint (LCP):

Este es un checkpoint específico a un nodo; sin embargo LCP se realizan para todos los nodos de forma más o menos concurrentes en todo el cluster. Un LCP inplica guardar todos los datos de los nodos en disco, y esto ocurre normalmente cada pocos minutos. El intervalo preciso varía, y depende de la cantidad de datos almacenada por el nodo, el nivel de la actividad del cluster y otros factores.

Global Checkpoint (GCP):

Un GCP se realiza cada pocos segundos, cuando las transacciones para todos los nodos se sincronizan y el log de redo se vuelca en disco.

Equipo Cluster:

Una máquina que forma parte del MySQL Cluster. Un cluster tiene una estructura física y una lógica . Físicamente, el cluster consiste en un número de máquinas , conocidas como equipos del cluster (o más símplemente equipos . Consulte Nodo y Grupo de Nodos a continuación.

Nodo:

Se refiere a un unidad lógica o funcional de MySQL Cluster, y a veces se denomina como nodo de cluster . En el contexto de MySQl Cluster, usamos el término “nodo” para indicar un proceso en lugar de un componente físico del cluster. Hay tres tipos de nodo requeridos para implementar un MySQL Cluster. Son:

Nodos de administración (MGM):

Administra los otros nodos dentro del MySQL Cluster. Proporciona datos de configuración de los otros nodos; arranca y para nodos; trata partición de red; crea copias de seguridad y restaura desde las mismas, y así.

Nodos SQL (MySQL server):

Instancias de MySQL Server que sirve como front end para cuardar datos en los nodos de datos del cluster. Clientes que quieran almacenan, recuperar o actualizar datos pueden acceder a un nodo SQL sólo como si fuera cualquier otro MySQL Server, empleando los métodos de autenticación usual y API; la distribución subyacente de datos entre grupos de nodos es transparente a los usuarios y aplicaciones. Los nodos SQL acceden a las bases de datos del cluster como un total sin tener en cuenta la distribución de datos entre distintos nodos de datos o máquinas del cluster.

Nodos de datos:

Estos nodos almacenan los datos. Los fragmentos de datos se almacenan en un conjunto de grupos de nodos. Cada uno de los nodos creando un grupo de nodos almacena una réplica del fragmento para el que ese grupo de nodos es responsable. Actualmente un único cluster puede soportar hasta 48 nodos de datos en total.

Es posible que más de un nodo coexista en una única máquina. (De hecho, es posible tener un cluster completo en una única máquina, aunque no es recomendable hacerlo en un entorno de producción.) Puede ser útil recordar que, cuando se trabaja con MySQL Cluster, el término máquina se refiere a un componente físico del cluster mientras que nodo es un componente lógico o funcional. (un proceso).

Nota respecto a términos obsoletos: En versiones más antiguas de la documentación de MySQL Cluster , los nodos de datos se llaman a veces “nodos de bases de datos” o “nodos DB”. Además, los nodos SQL a veces se conocen como “nodos cliente” o “nodos API”. Esta terminología antigua ha quedado obsoleta para minimizar confusión, y por estas razones debería evitarse.

Grupo de nodos:

Conjunto de nodos de datos. Todos los nodos de datos en un grupo de nodos contienen los mismos datos (fragmentos), y todos los nodos en un mismo grupo deben estar en distintas máquinas. Es posible controlar qué nodos pertenecen a qué grupos de nodos.

Fallo de nodo:

MySQL Cluster no sólo depende de la funcionalidad de un único nodo en el cluster; el cluster puede continuar funcionando si uno o más nodos fallan. El número preciso de fallos de nodo que puede tolerar un único cluster depende en el número de nodos de la configuración del cluster.

Reinicio de nodo:

El proceso de restaurar un nodo de cluster fallido.

Reinicio de nodo inicial:

El proceso de arrancar un nodo de cluster con su sistema de fichero eliminado. Esto a veces se usa en actualizaciones de software y en otras circunstancias especiales.

Fallo de sistema:

Puede ocurrir cuando han fallado tantos nodos que el estado del cluster no puede garantizarse.

Reinicio de sistema:

El proceso de reiniciar el cluster y reinicializar su estado de logs de disco y checkpoints. Se requiere tras una parada planficada o no del cluster.

Fragmento:

Una porción de una tabla; en el motor NDB una tabla se divide y almacena como un número de fragmentos. Un fragmento es a veces llamado “partición”; sin embargo, “fragmento” es la denominación preferida.Las tablas fragmentadas en MySQL Cluster se usan para facilitar balanceo de carga entre máquinas y nodos.

Réplica:

Bajo el motor NDB , cada fragmento de tabla tiene un número de réplicas almacenadas en otros nodos de datos para proporcionar redundancia. Hay actualmente 4 réplicas por fragmento.

Transporter:

Protocolo que proporciona transferencia de datos entre nodos. MySQL Cluster soporta 4 tipos distintos de conexiones de transporters:

TCP/IP (local)

Protocolo de red habitual que existe bajo HTTP, FTP (y así ) en Internet.

TCP/IP (remoto)

Lo mismo que el anterior, excepto que se usa para comunicación remota.

SCI

Scalable Coherent Interface es un protocolo de alta velocidad usado para montar sistemas multiprocesador y aplicaciones paralelas. El uso de SCI con MySQL Cluster requiere hardware especializado y se discute en Sección 16.7.1, “Configurar MySQL Cluster para que utilice Sockets SCI”. Para una introducción básica a SCI, consulte este ensayo de dolphinics.com.

SHM

shared memory segments (segmentos de memoria compartida). Donde se soporta, SHM se usa automáticamente para conectar nodos en la misma máquina. La página de man Unix para shmop(2) es un buen sitio para obtener información adicional acerca de este tema.

Nota: El transporter del cluster es interno. Las aplicaciones que usan MySQL Cluster se comunican con nodos SQL como se hace con cualquier otra versión de MySQL Server (via TCP/IP, o a través del uso de sockets Unix o Windows named pipes). Las consultas pueden enviarse y recibirse los resultados usando la API estándar MySQL .

NDB:

Significa Network Database, y se refiere al motor de almacenamiento usando para permitir MySQL Cluster. El motor NDB soporta todos los tipos de columna MySQL habituales y comandos SQL , y cumple las reglas ACID. Este motor proporciona soporte para transacciones (commits y rollbacks).

Arquitectura de compartición cero:

Arquitectura ideal para MySQL Cluster. En un entorno sin compartición, cada nodo se ejecuta en máquinas separadas. La ventaja de este entorno es que ninguna máquina puede ser un punto de fallida único o como cuello de botella del sistema.

Almacenamiento en memoria:

Todos los datos almacenados en cada nodo de datos se mantiene en memoria en la máquina del nodo. Para cada nodo de datos en el cluster, debe tener disponible una cantidad de RAM igual al tamaño de la base de datos multiplicado por el número de réplicas, dividido por el número de nodos de datos. Por lo tanto, si la base de datos ocupa 1 GB de memoria, y quiere tener 4 réplicas en el cluster, necesita para cada nodo un mínimo de 500 . Tenga en cuenta que esto es además de cualquier requerimiento para el sistema operativo u otra aplicación que puede ejecutarse en el equipo.

Tabla:

Como es normal en el contexto de bases de datos relacionales, el término “tabla” denota un conjunto ordenado de requistros de idéntica estructura. En MySQL Cluster, una tabla de base de datos se almacena en un nodo de datos como un conjunto de fragmentos, cada uno de ellos se replica en nodos de datos adicionales. El conjunto de nodos de datos replicando el mismo fragmento o conjunto de fragmentos se conoce como grupo de nodos.

Programas del Cluster:

Son programas de línea de comandos usados para ejecutar, configurar y administrar MySQL Cluster. Incluyen demonios:

ndbd:

Demonio de nodo de datos (ejecuta un proceso de nodo de datos)

ndb_mgmd:

Demonio de servidor de administración (ejecuta un proceso de servidor de administración)

y programas cliente:

ndb_mgm:

El cliente de administración (proporciona una interfaz para ejecutar comandos de administración)

ndb_waiter:

Usado para verificar el estado de todos los nodos del cluster

ndb_restore:

Restaura datos del cluster de una copia de seguridad

Para más información de estos programas, consulte Sección 16.5, “Gestión de procesos en MySQL Cluster”.

Log de eventos:

MySQL Cluster registra eventos por categoría (arranque, parada, errores,checkpoints, y así), prioridad, y severidad. Un listado completo de todos los eventos reportables pueden encontrarse en Sección 16.6.2, “Informes de eventos generados por MySQL Cluster”. Los logs de eventos son de dos tipos:

Log de Cluster:

Mantiene un registro de todos los eventos reportables deseados para el cluster entero.

Log de Node:

Un log separado que se mantiene para cada nodo individual.

Bajo circunstancias normales, es necesario y suficiente mantener y examinar sólo el log del cluster. Los logs de nodo tienen que ser consultados sólo para desarrollo de aplicaciones y depuración.

A