Oct 6, 2009

Almacenamiento compartido en red: ext3 + NFS (I)

En el presente artículo vamos a desarrollar una arquitectura de almacenamiento compartido a la que accederán de forma concurrente un par de máquinas. Las pruebas van a ser realizadas bajo un sistema operativo de tipo CentOS 5.3.

El área de datos sobre el que se configurará el acceso compartido será un volumen lógico (LogVol00) cuyo sistema de archivos será ext3.

Ext3 es un sistema de ficheros basado en journaling, en donde se emplean registros temporales o journals antes de realizar el grabado de los datos en los bloques, todo ello con el objetivo de asegurar la integridad de la información. El tamaño máximo de almacenamiento que soporta ext3 es de 32 TB.

En la figura siguiente puede observarse que el espacio de almacenamiento compartido se instalará sobre la máquina centos01, el cual será exportado a los nodos centos02 y centos03 a través de NFS4 (Network File System v4).


NFS es un protocolo perteneciente al nivel de aplicación utilizado para sistemas de ficheros distribuidos, que permite que varios nodos puedan acceder de forma simultánea a distintos archivos remotos. Todas las operaciones de escritura son síncronas, es decir, la tarea se da por finalizada cuando realmente se ha terminado de escribir el último byte.

Cada una de las máquinas deberá tener registrado los nombres de todos los nodos en el fichero /etc/hosts.
[... ~]# cat /etc/hosts
...
192.168.1.11 centos01 centos01.local
192.168.1.12 centos02 centos02.local
192.168.1.13 centos03 centos03.local

Iptables y TCP wrappers deberán estar desactivados en el nodo centos01; SELinux podrá estar activado. Al final del artículo veremos la forma de configurarlos correctamente para que no interfieran en el sistema de almacenamiento.
[root@centos01 ~]# service iptables stop

[root@centos01 ~]# cat /etc/hosts.deny
...
#ALL: ALL

[root@centos01 ~]# getenforce
Enforcing

En los nodos centos02 y centos03 estos tres mecanismos de seguridad podrán estar activados:
[... ~]# getenforce
Enforcing

[... ~]# cat /etc/hosts.deny
...
ALL: ALL

[... ~]# iptables -nL
Chain INPUT (policy ACCEPT)
target prot opt source destination
RH-Firewall-1-INPUT all -- 0.0.0.0/0 0.0.0.0/0

Chain FORWARD (policy ACCEPT)
target prot opt source destination
RH-Firewall-1-INPUT all -- 0.0.0.0/0 0.0.0.0/0

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

Chain RH-Firewall-1-INPUT (2 references)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
LOG all -- 0.0.0.0/0 0.0.0.0/0 LOG flags 0 level 4
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable

Lo primero que vamos a hacer es crear el volumen lógico que se empleará como espacio compartido en centos01, empleando para ello una partición de 64 GB que ya tendremos creada previamente y etiquetada como Linux.
[root@centos01 ~]# fdisk -l
...
Disposit. Inicio Comienzo Fin Bloques Id Sistema
/dev/sdb1 1 8354 67103473+ 83 Linux

Primero habrá que crear un volumen físico sobre esa partición, después el grupo de volúmenes (VolGroup01) y por último el volumen lógico (LogVol00).
[root@centos01 ~]# pvcreate /dev/sdb1

[root@centos01 ~]# vgcreate VolGroup01 /dev/sdb1

[root@centos01 ~]# lvcreate -l 100%FREE -n LogVol00 VolGroup01

Una vez que ya se tiene creado el volumen lógico, crearemos dentro de él un sistema de archivos ext3.
[root@centos01 ~]# mkfs.ext3 /dev/VolGroup01/LogVol00

Una vez que se tiene el sistema de archivos construido, crearemos un directorio sobre el cual montarlo, con el objetivo de poder exportarlo posteriormente. A su vez en los nodos centos02 y centos03 también crearemos el mismo directorio en el cual montaremos el volumen NFS importado.
[root@centos01 ~]# mkdir /mnt/ext3_nfs

[root@centos02 ~]# mkdir /mnt/ext3_nfs

[root@centos03 ~]# mkdir /mnt/ext3_nfs

Para montar el volumen en el directorio creado dentro del nodo centos01, ejecutaremos el siguiente comando:
[root@centos01 ~]# mount /dev/VolGroup01/LogVol00 /mnt/ext3_nfs/

Para que este cambio se quede de forma permanente tras sucesivos reinicios de la máquina, habrá que añadir una entrada al fichero /etc/fstab.
[root@centos01 ~]# cat /etc/fstab
...
/dev/VolGroup01/LogVol00 /mnt/ext3_nfs ext3 defaults 0 0

El siguiente paso consistirá en exportar el directorio a través de NFS. Para ello editaremos el fichero /etc/exports, reiniciaremos el servicio nfs y haremos que el demonio se inicie automáticamente durante el arranque del nodo. También tendremos que asignar permisos de escritura para el resto de usuarios al directorio exportado.
[root@centos01 ~]# cat /etc/exports
/mnt/ext3_nfs centos02.local(rw,sync,root_squash,fsid=0)
/mnt/ext3_nfs centos03.local(rw,sync,root_squash,fsid=0)

[root@centos01 ~]# service nfs restart

[root@centos01 ~]# chkconfig nfs on

[root@centos01 ~]# chmod -R o+w /mnt/ext3_nfs/

Las opciones de exportación empleadas para NFS han sido rw (permitir la lectura y escritura), sync (escrituras síncronas) , root_squash (root accederá como usuario anónimo - nobody) y fsid=0 (habilitar NFSv4).

Si en este momento ejecutamos la siguiente orden en los nodo centos02 o centos03, obtendremos la lista de directorios exportados por centos01.
[root@centos02 ~]# showmount -e centos01.local
Export list for centos01.local:
/mnt/ext3_nfs centos03,centos02

Para montar a través de NFS dicho directorio, ejecutaremos el siguiente comando en los nodos centos02 y centos03.
[... ~]# mount -t nfs4 centos01.local:/ /mnt/ext3_nfs/

Para que los nodos puedan importar automáticamente dicho directorio durante el arranque, tendremos que añadir a sus ficheros /etc/fstab el siguiente contenido:
[... ~]# cat /etc/fstab
...
centos01.local:/ /mnt/ext3_nfs nfs4 defaults 0 0

1 comment:

  1. justo lo que necesitaba para implementar en almacenamiento compartido, excelente blog..felicitaciones por tu trabajo

    ReplyDelete