GlusterFS sólo se instalará en estos dos nodos, ya que éstas serán las máquinas que reciban la carga de trabajo por parte de los balanceadores (HA1 o HA2), y dicho directorio empleado por Apache deberá ser el mismo en los dos nodos traseros (un dato guardado por el Apache de uno de los nodos en un momento dado, puede ser requerido por el Apache del otro nodo en otro instante).
GlusterFS utiliza un sistema de ficheros en cluster denominado FUSE, similar a RAID1 (espejo), con el objetivo de poder establecer particiones en red. En el sistema de Alta Disponibilidad y Balanceo de Carga que estamos configurando, GlusterFS montará el directorio /etc/glusterfs/gfs/ en /var/www/html/ (ambas carpetas deberán ser creadas manualmente). De esta forma cuando se escriba sobre dicho directorio del nodo LB1, automáticamente también se escribirá en el mismo directorio pero del nodo LB2, y viceversa.
Si por ejemplo cayera el nodo LB1 y se empezara a utilizar exclusivamente el directorio /var/www/html/ del nodo LB2, cuando se levantase nuevamente el primer nodo, sincronizaría automáticamente su directorio /var/www/html/ con el del nodo LB2.
Todo el proceso de instalación así como los ficheros de configuración, serán idénticos en ambos nodos, por lo tanto sólo se expondrá la parte del nodo LB1.
GlusterFS emplea un cliente y un servidor. El servidor se encargará de gestionar el directorio que declararemos como compartido, y el cliente, se conectará al propio servidor GlusterFS local y remoto, formando con los dos volúmenes custodiados por los servidores un único espacio de almacenamiento final.
Vamos a empezar instalando Apache (versión 2.2.9), y el cliente y el servidor de GlusterFS (versión 1.3.10).
root@lb1:~# aptitude install apache2
root@lb1:~# aptitude install glusterfs-client glusterfs-server
En primer lugar configuraremos la parte del servidor, indicándole que utilice como directorio temporal /etc/glusterfs/gfs/ (lo denominaremos volumen brick), el cual tendremos que crear previamente. También le diremos al servidor que podrá conectarse a este volumen cualquier tipo de dirección IP (option auth.ip.brick.allow *).
root@lb1:~# cat /etc/glusterfs/glusterfs-server.vol
volume brick
type storage/posix
option directory /etc/glusterfs/gfs/
end-volume
volume server
type protocol/server
option transport-type tcp/server
subvolumes brick
option auth.ip.brick.allow *
end-volume
root@lb1:~# mkdir /etc/glusterfs/gfs/
root@lb1:~# mkdir /var/www/html/
Después le tocará el turno a la parte cliente. Para ello haremos que se conecte al propio volumen local (10.0.0.12) y al volumen remoto (10.0.0.13) - para el caso del nodo LB1 -. A continuación formará con esos dos volúmenes, un nuevo volumen llamado bricks-afr de tipo cluster/afr.
root@lb1:~# cat /etc/glusterfs/glusterfs-client.vol
volume brick1
type protocol/client
option transport-type tcp/client
option remote-host lb1
option remote-subvolume brick
end-volume
volume brick2
type protocol/client
option transport-type tcp/client
option remote-host lb2
option remote-subvolume brick
end-volume
volume bricks-afr
type cluster/afr
subvolumes brick1 brick2
end-volume
Modificando el script de arranque del servidor, haremos que una vez lanzado glusterfsd (demonio servidor), se monte el volumen de tipo cluster/afr en /var/www/html/.
root@lb1:~# cat /etc/init.d/glusterfs-server
...
do_start()
{
...
start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null return 1
start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- $DAEMON_ARGS && sleep 2
for brick in `grep /etc/glusterfs/ /etc/fstab grep glusterfs awk '{print $2}'`; do mount $brick; done return 2
}
...
do_stop()
{
...
start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
[ "$?" = 2 ] && return 2
# Many daemons don't delete their pidfiles when they exit.
rm -f $PIDFILE
for brick in `grep /etc/glusterfs/ /etc/fstab grep glusterfs awk '{print $2}'`; do umount $brick; done
return "$RETVAL"
}
...
Al ejecutar el comando mount, éste acudirá al fichero /etc/fstab para comprobar cómo debe montar el directorio. Por lo tanto, tendremos que editar dentro de este fichero el sistema de archivos a ser montado (descrito en /etc/glusterfs/glusterfs-client.vol), el punto de montaje (/var/www/html/), el tipo de sistema de archivos (glusterfs) y las opciones de montaje (defaults,noauto 0 0).
root@lb1:~# cat /etc/fstab
...
/etc/glusterfs/glusterfs-client.vol /var/www/html/ glusterfs defaults,noauto 0 0
Una vez establecido el espacio compartido en red a través de GlusterFS, si hacemos la prueba de crear un fichero en el directorio /var/www/html/ de la máquina LB1, podremos ver que automáticamente se habrá replicado al mismo directorio pero del nodo LB2.
root@lb1:/var/www/html# touch fichero
root@lb1:/var/www/html# ls -l
total 0-rw-r--r-- 1 root root 0 2009-01-14 21:54 fichero
root@lb2:/var/www/html# ls -l
total 0-rw-r--r-- 1 root root 0 2009-01-14 21:54 fichero
Muchas gracias por este articulo. Me ha aclarado bastante sobre GlusterFS.
ReplyDeleteEstoy montandolo entre 4 maquinas que exportan cada una una misma carpeta.
Luego cada una es cliente de si misma y de las otras cuatro.
Entonces monto el directorio desde el cual se accedera al espacio compartido pero no puedo escribir, no tengo permisos.
En cambio si escribo en alguno de los directorios que se estan exportando si se replica la informacion y se ve en las otras maquinas.
Hola, pues yo use la versión:
ReplyDeleteglusterfs-server-3.0.2-1.x86_64
glusterfs-client-3.0.2-1.x86_64
glusterfs-common-3.0.2-1.x86_64
Pero veo que la configuración cambio mucho, por lo que los archivos deben quedar así:
Archivo server:
cat /etc/glusterfs/glusterfsd.vol
volume posix
type storage/posix
option directory /etc/glusterfs/gfs/
end-volume
volume locks
type features/locks
subvolumes posix
end-volume
volume brick
type performance/io-threads
option thread-count 8
subvolumes locks
end-volume
volume server
type protocol/server
option transport-type tcp
option auth.addr.brick.allow *
subvolumes brick
end-volume
Archivo cliente:
cat /etc/glusterfs/glusterfs.vol
volume brick1
type protocol/client
option transport-type tcp
option remote-host lenny
option remote-subvolume brick
end-volume
volume brick2
type protocol/client
option transport-type tcp/client
option remote-host carl
option remote-subvolume brick
end-volume
volume replicate1
type cluster/replicate
subvolumes brick1 brick2
end-volume
volume writebehind
type performance/write-behind
option window-size 1MB
subvolumes replicate1
end-volume
volume cache
type performance/io-cache
option cache-size 512MB
subvolumes writebehind
end-volume
Parece ser que la opcion afd ya no esta en uso.
Cualquier sugerencia me escriben a:
customvalem@yahoo.com