En esta secció mostraremos cómo se puede adaptar un cluster configurado para comunicación TCP/IP normal para que use SCI Sockets. Esta documentación se basa en SCI Sockets versión 2.3.0 de 01 Octubre 2004.
Prerequisitos
Cualquier máquina que quiera que use SCI Sockets necesita disponer de tarjetas SCI .
Es posible usar SCI Sockets con cualquier versión de MySQL Cluster. No se necesita ninguna compilación especial ya que usa llamadas de socket normales que están disponibles en MySQL Cluster. Sin embargo, SCI Sockets se soportan sólo en los kernels Linux 2.4 y 2.6 . SCI Transporters se ha probado con éxito en sistemas operativos adicionales aunque sólo lo hemos verificado con Linux 2.4 hasta ahora.
Esencialmente hay cuatro requerimientos para SCI Sockets:
Compilar las bibliotecas SCI Socket.
Instlara las bibliotecas del kernel SCI Socket.
Instalación de uno o dos ficheros de configuración.
La biblioteca de kernel SCI Socket debe estar activada para toda la máquina o para la shell en que se arranca el proceso MySQL Cluster.
Este proceso debe repetirse para cada máquina del cluster en que quiera usar SCI Sockets para comunicación entre nodos.
Necesita dos paquetes para que funcione SCI Sockets :
El paquete de código fuente con las bibliotecas de soporte DIS para las bibliotecas SCI Sockets .
El paquete de código fuente para las bibliotecas SCI Socket mismas.
Actualmente, estan disponible sólo en formato de código
fuente. Las últimas versiones de estos paquetes al escribir
esto están disponibles como (respectivamente)
DIS_GPL_2_5_0_SEP_10_2004.tar.gz
y
SCI_SOCKET_2_3_0_OKT_01_2004.tar.gz
.
Debería poder encontrar estas versiones (o posteriores) en
http://www.dolphinics.no/support/downloads.html.
Instalación de paquetes
Una vez que tiene los paquetes con las bibliotecas, el siguiente paso es descomprimirlas en los directorios apropiados, con la biblioteca SCI Sockets en un directorio bajo el código DIS. Luego, necesita compilar las bibliotecas. Este ejemplo muestra los comandos usados en Linux/x86 para realizar esta tarea:
shell> tar xzf DIS_GPL_2_5_0_SEP_10_2004.tar.gz shell> cd DIS_GPL_2_5_0_SEP_10_2004/src/ shell> tar xzf ../../SCI_SOCKET_2_3_0_OKT_01_2004.tar.gz shell> cd ../adm/bin/Linux_pkgs shell> ./make_PSB_66_release
Es posible compilar estas bibliotecas para algunos procesadores 64-bit. Para compilar las bibliotecas para Opteron CPUs usando la extensión 64-bit , ejecute make_PSB_66_X86_64_release en lugar a make_PSB_66_release; si la compilación se hace en una máquina Itanium, debe usar make_PSB_66_IA64_release. La variante X86-64 debe funcionar para arquitecturas Intel EM64T pero no se ha probado.
Una vez que se completa el proceso de compilación ,las
bibliotecas compiladas se encuentran en un fichero tar zipeado
con un nombre entre las líneas de
DIS-
.
Es hora de instalar el paquete en el lugar apropiado. En este
ejemplo lo guardaremos en <operating-system>
-time
-date
/opt/DIS
.
(Nota: Seguramente necesitará
ejecutar lo siguiente como root del sistema.)
shell> cp DIS_Linux_2.4.20-8_181004.tar.gz /opt/ shell> cd /opt shell> tar xzf DIS_Linux_2.4.20-8_181004.tar.gz shell> mv DIS_Linux_2.4.20-8_181004 DIS
Configuración de red
Ahora que todos los binarios y bibliotecas están en su lugar adecuado, necesitamos asegurarnos que las tarjetas SCI tiene IDs de nodo adecuados en el espacio de direcciones SCI.
Es necesario decidir la estructura de red antes de seguir. Hay tres tipo de estructura de red que pueden usarse en este contexto:
Anillo simple unidimensional
Uno o más switches con un anilo para cada puerto de switch
Un toro de dos o tres dimensiones.
Cada una de estas topologías tiene su propio método para proporcionar Ids de nodo. Discutimos cada una de las mismas brévemente.
Un anillo simple usa IDs de nodo que son múltipes de 4 distintos a cero: 4, 8, 12,...
La siguiente posibilidad usa swithces SCI. Un switch SCI tiene 8 puertos, cada uno de los cuales puede soportar un anillo. Es necesario asegurarse que distintos anillos usan distintos espacios de nombres. En una configuración típica, el primer puerto usa IDs de nodo por debajo de 64 (4 - 60), el siguiente puerto los siguientes 64 IDs (68 - 124) , y así, con IDs de nodo 452 - 508 siendo asignados al octavo puerto.
Las estructuras de red de toro bi o tri dimensional se tienen en cuenta donde cada nodo se localiza en cada dimensión, incrementando en 4 para cada nodo en la primera dimensión, en 63 cada nodo en la segunda dimensión, y (donde sea aplicable) en 1024 en la tercera dimensión. Consulte Dolphin's Web site para más documentación.
En nuestras pruebasa hemos usado switches, aunque las instalaciones de cluster más grandes usan toros bi o tri dimensionales. La ventaja proporcionada por switches es que, con tarjetas SCI duales y switches duales, es posible constuir con facilidad relativa una red redundante donde el tiempo de fallo medio en la red SCI es del orden de 100 microsegundos. Esto lo soporta el transporte SCI en MySQL Cluster y también está bajo desarrollo par la implementación SCI Socket .
Evitar fallos en el toro 2D/3D es posible pero requiere el envío de nuevos índices de enrutamiento a todos los nodos. Sin embargo, esto requiere sólo 100 milisegundos o así para completarse y debería ser aceptable para la mayoría de casos de alta disponibilidad.
Situar los nodos de datos del cluster adecuadamente en la arquitectura de switch hace que sea posible usar 2 switches para construir una arquitectura en que puedan interconectarse 16 máquinas y que un fallo único no pueda afectar a más de una. Con 32 máquinas y 2 switches se puede configurar el cluster de forma que un fallo único no pueda causar la pérdida de más de dos nodos; en este caso es posible saber qué par de nodos está afectado. Por lo tanto, poner los dos nodos en grupos de nodos separados hace que la instalación de MySQL Cluster sea “segura” .
Para poner el ID de nodo en una tarjeta SCI use el siguiente
comando en el directorio /opt/DIS/sbin
. En
este ejemplo -c 1
se refiere al número de la
tarjeta SCI (siempre será 1 si sólo hay 1 tarjeta en la
máquina) , -a 0
se refiere al adaptador 0, y
68
es el ID del nodo:
shell> ./sciconfig -c 1 -a 0 -n 68
Si tiene varias tarjetas SCI en la misma máquina, puede
determinar qué tarjeta tiene cada slot ejecutando el siguiente
comando (de nuevo asumimos que el directorio de trabajo actual
es /opt/DIS/sbin
):
shell> ./sciconfig -c 1 -gsn
Esto le retorna el número de serie de la tarjeta SCI. Luego
repita este procedimiento con -c 2
, y siga
con cada tarjeta en la máquina. Una vez que ha relacionado cada
tarjeta con cada slot, puede poner los IDs de nodo para todas
las tarjetas.
Una vez instaladas la bibliotecas y binarios necesarios, y
configurado el ID de nodo SCI, el siguiente paso es configurar
el mapeo de nombres de equipo (o direcciones IP) con el ID del
nodo SCI. Esto se realiza en el fichero de configuración de los
sockets SCI, que debería encontrarse en
/etc/sci/scisock.conf
. En este fichero,
cada nombre de máquina o dirección IP se mapea con el ID de
nodo SCI. Aquí hay un ejemplo sencillo de un fichero de
configuración:
#host #nodeId alpha 8 beta 12 192.168.10.20 16
Es posible limitar la configuración para que se aplique sólo a
un subconjunto de los puertos disponibles para estos equipos. Un
fichero de configuración adicional
/etc/sci/scisock_opt.conf
puede usarse para
esto, como se muestra aquí:
#-key -type -values EnablePortsByDefault yes EnablePort tcp 2200 DisablePort tcp 2201 EnablePortRange tcp 2202 2219 DisablePortRange tcp 2220 2231
Instalación de drivers
Con los ficheros de configuración en su lugar, se pueden instalar los drivers.
Primero los drivers de bajo nivel y luego el driver del socket SCI:
shell> cd DIS/sbin/ shell> ./drv-install add PSB66 shell> ./scisocket-install add
Si se desea, la instalación puede chequearse invocando un script que verifica que todos los nodos en el los ficheros de configuración del socket SCI son accesibles:
shell> cd /opt/DIS/sbin/ shell> ./status.sh
Si descubre un error y necesita cambiar la configuración del socket SCI, es necesario usar ksocketconfig para ello:
shell> cd /opt/DIS/util shell> ./ksocketconfig -f
Testing y Setup
Para asegurar que los sockets SCI están siendo usados, puede
emplear el programa de testeo latency_bench .
Usando este componente del servidor de utilidades, los clientes
pueden conectar con el servidor para testear la latencia de la
conexión; determinar si el SCI está activado o no debe ser muy
simple observando la latencia.
(Nota: Antes de usar
latency_bench, es necesario incializar la
variable de entorno LD_PRELOAD
como se
muestra posteriormente.)
Para inicializar un servidor, use:
shell> cd /opt/DIS/bin/socket shell> ./latency_bench -server
Para ejecutar un cliente, use latency_bench
de nuevo, excepto que esta vez con la opción
-client
:
shell> cd /opt/DIS/bin/socket
shell> ./latency_bench -client server_hostname
La configuración del socket SCI debería estar completa ahora y MySQL Cluster preparado para usar SCI Sockets y SCI transporter (consulte Sección 16.4.4.10, “Conexiones de transporte SCI en MySQL Cluster”).
Arrancar el Cluster
El siguiente paso en el proceso es arrancar MySQL Cluster. Para
permitir el uso de SCI Sockets es necesario inicializar la
variable de entorno LD_PRELOAD
antes de
arrancar ndbd, mysqld, y
ndb_mgmd. Esta variable debe apuntar a la
biblioteca kernel para SCI Sockets.
Para arrancar ndbd en un bash shell, haga:
bash-shell> export LD_PRELOAD=/opt/DIS/lib/libkscisock.so bash-shell> ndbd
En un entorno tcsh se puede hacer lo mismo con:
tcsh-shell> setenv LD_PRELOAD=/opt/DIS/lib/libkscisock.so tcsh-shell> ndbd
Nota: MySQL Cluster sólo puede usar la variante de kernel de SCI Sockets.
Ésta es una traducción del manual de referencia de MySQL, que puede encontrarse en dev.mysql.com. El manual de referencia original de MySQL está escrito en inglés, y esta traducción no necesariamente está tan actualizada como la versión original. Para cualquier sugerencia sobre la traducción y para señalar errores de cualquier tipo, no dude en dirigirse a mysql-es@vespito.com.