Escrito por Mario Alberto Medina Nussbaum Viernes, 04 de Septiembre de 2009 17:32
Laboratorio - Instalación: ¿Imposible?
¡Saludos! En nuestro artículo anterior hablamos de cómo hacer un cluster, bueno, de la introducción al como hacerlo. Definimos que vamos a hacerlo con Ubuntu Jaunty, en dos equipos con 8GB de RAM y 4 núcleos y dos discos duros SATA.
En esta ocasión veremos como crear el almacenamiento en cluster, que será la base para todo lo demás.
Lo primero que debo decir, es que este paso es crucial y además ha sido el mas complejo con el que me he topado de todo este Laboratorio.
Mi primera idea era usar iSCSI para hacer un iRAID-1 y formatearlo con GFS/OCFS2. Esto iba funcionando muy bien, hasta el punto en que intente montar el dispositivo de iRAID en mis dos hosts al mismo tiempo. Ahí falló todo, no se podía abrir el dispositivo origen /dev/sda1 dos veces al mismo tiempo. Entonces me tuve que echar para atrás y buscar otra solución.
Esta fue DRBD. Este maravilloso desarrollo permite hacer un RAID-1 de 2 equipos (por lo pronto) en red. Se encarga de la sincronización y replicación de cambios a nivel bloques de ambos discos.
Luego, intenté compartir dentro de cada host su propio dispositivo de DRBD usando iSCSI. Otro fracaso. Dentro del mismo equipo todo funcionaba perfecto, con todas sus maquinas virtuales, pero cuando quería hacer lo mismo en el otro host y que las maquinas virtuales del host1 se pusieran de acuerdo con las del host2, todo fracasó. No se hablaron nunca, puesto que eran dispositivos distintos para el cluster.
Luego, después de pensarlo, y para consolarme un poco, me fije que la velocidad máxima de escritura de mis discos era de 20MB/s en acceso aleatorio, y que mi red interna es de 1GB, así que podía usar NFS dentro de cada host para darle acceso al dispositivo de almacenamiento a cada nodo, sin tener problemas de velocidad.
Sin embargo mi idea sigue, y espero lograrlo algún día, cuando lo logre, escribiré una actualización. La idea es hacer un GFS2/OCFS2 sobre iSCSI sobre DRBD o sobre un iRAID-1.
Finalmente, llegó el momento de elegir el sistema de archivos. Si tu intentas a un cluster en el que todos los nodos pueden escribir, ponerle un sistema de archivos normal, como ext3, xfs, reiserfs o similares, al montar en dispositivo en dos o mas nodos y escribir en ellos, se corromperá todo y tendrás que formatear de nuevo. Para hacer algo así se necesita un sistema de archivos para cluster. Inicialmente probe GFS2, pero su complejidad de configuración me hizo desistir. Probe luego OCFS2 que me pareció muy sencillo, por lo que fue el gran ganador.
Ahora que he terminado la introducción a este artículo, vamos a lo que nos interesa, que es a fabricar todo.
Lo primero será instalar los paquetes que vamos a usar. Recuerda, estamos trabajando en Ubuntu Jaunty.
1 |
sudo apt-get install drbd-module-source drbd8-utils |
Una vez instalado esto que requerimos, tenemos que particionar el disco de almacenamiento.
Mis discos son identicos, de 250GB cada uno, y los parti mas o menos a la mitad para tener una parte de storage y otra parte de respaldos en cada equipo.
Tu puedes usar el software que acostumbres para hacer las particiones, yo utilicé fdisk directamente, por que estoy acostumbrado a usarlo:
1 |
# fdisk /dev/sda |
Una vez que terminamos el proceso de particionar, es recomendable reiniciar, aunque no siempre es necesario. Para mayor seguridad, reiniciamos.
Lo que sigue ahora es configurar nuestro DRBD. Tenemos dos dispositivos en hosts diferentes, de la misma capacidad exacta, así que esta es nuestra configuración, que debe estar en /etc/drbd.conf:
1 |
global { |
Considera la parte de syncer, donde tengo especificado 40M. Este rubro especifica la velocidad de sincronización entre ambos hosts. Es realmente importante definirlo adecuadamente, si lo defines muy alto, y no tienes una red suficientemente grante y dedicada, entonces vas a alentar mucho tu red, si lo defines bajo, va a tardar mucho en sincronizarse. El estandar de 10M será suficiente para la mayoría. En mi caso yo tengo una red de gigabit dedicada a esto, así que le puse un valor mayor.
Ahora vamos a crear nuestro dispositivo drbd, y después vamos a sincronizarlos. Estos pasos debes realizarlos en ambos nodos simultaneamente, no te adelantes en un nodo si no haz hecho el paso correspondiente en el otro nodo.
1 |
drbdadm create-md r0
|
Revisamos que se haya creado:
1 |
cat /proc/drbd |
Ahora vamos a conectar ambos nodos:
1 |
drbdadm connect r0 |
Y revisamos los cambios:
1 |
cat /proc/drbd |
¡Bien! ya estamos conectados, checa la "C" en la línea 4. Ahora vamos a hacer la sincronización inicial.
Es importante notar que para la sincronización inicial entre mas alto sea este valor, mejor, por que así tardamos menos en este lento paso. Yo le puse una velocidad de 110M y tardó cerca de 300 minutos.
Para hacer este cambio sin modificar la configuración, nada mejor que aplicarlo de manera temporal:
1 |
drbdsetup /dev/drbd0 syncer -r 110M
|
Ahora hagamos la sincronización inicial, sólo hazlo en uno de los dos nodos:
1 |
drbdadm -- --overwrite-data-of-peer primary r0
|
Y verificamos que se este realizando:
1 |
[root@host1]# cat /proc/drbd |
Esperamos a que termine la sincronización, para que nos muestre algo como esto:
1 |
root@host2:~# cat /proc/drbd |
Estamos ya listos para el siguiente paso. Vamos a formatear el dispositivo /dev/drbd0 con ocfs2. Este paso solo hazlo en uno de los dos nodos:
1 |
root@host2:~# mkfs.ocfs2 -b 4K -T mail -N 2 -v /dev/drbd0 |
En este caso, el parametro -T mail le indica al sistema ocfs2 que vamos a almacenar muchos archivos relativamente pequeños, para que optimice el journal. Y el parámetro -N 2 le indica cuantos nodos se van a conectar. Puesto que sólo vamos a conectar host1 y host2, solo requerimos 2 nodos.
1 |
mkfs.ocfs2 1.3.9 |
Una vez que terminó el proceso de formateo vamos a conectar las unidades. Empezamos con reiniciar el servicio de OCFS2:
1 |
/etc/init.d/o2cb restart
|
Nota: puede ser que en ocasiones se te reinicien los nodos, esto es normal. Esto ocurre cuando uno de los dos nodos deja de responder por cierto tiempo, entonces, los otros nodos lo sacan del cluster. Para reingresar el cluster, hace un reinicio. Si esto ocurre con frecuencia, te sugiero editar el archivo de configuracion de o2cb ubicado en /etc/default/o2cb y cambiar la línea que dice O2CB_HEARTBEAT_THRESHOLD=7 por un número más grande, algo como 300, que son los segundos que va a esperar antes de reiniciar. No te olvides de reiniciar el servicio de o2cb después de este cambio.
Vamos ahora a montar las unidades. Yo cree una carpeta llamada /storage y ahí conecte la unidad drbd0 (recuerda hacer esto en los dos nodos, como todos los demás pasos, excepto los que te indico que solo en uno de ellos):
1 |
mkdir /storage |
Si hasta aquí no tienes ningun error, felicidades! ya tienes tu primer punto de montaje.
Lo que sigue es pan comido. Editamos el archivo /etc/exports para compartir la carpeta /storage con las máquinas virtuales:
1 |
/storage 10.0.1.0/26(rw,sync,no_root_squash) |
Yo tengo la red interna de mis maquinas virtuales como 10.0.1.0/26, así que esa red comparto, solo los miembros de esta red van a poder acceder a este dispositivo.
Hasta aquí llegamos el día de hoy. Lo que sigue a continuación es crear las máquinas virtuales y montar estas unidades en cada una de ellas, pero esto lo veremos en el próximo artículo, ¡hasta pronto!
Referencias:
Comentarios
Suscripción de noticias RSS para comentarios de esta entrada.