OCFS (Oracle Cluster File System) es un sistema de archivos de discos compartidos o sistema de archivos distribuido para clusteres de servidores de sistemas GNU/Linux desarrollado por Oracle Corporation distribuidos bajo los términos de la GNU General Public License.
La primera versión de OCFS se desarrolló con el objetivo de albergar los archivos de la base de datos de Oracle en entornos clusterizados.Con la segunda versión del sistema las características POSIX fueron incluidas.
OCFS2 (versión 2) fué integrada dentro de la versión 2.6.16 del kernel de Linux. Inicialmente se marcó como código experimental (Alpha-test). Esta restricción se levantó en la versión 2.6.19. Con la versión de kernel 2.6.29 se añadieron más funcionabilidades como ACLS (access control lists) y cuota 2
La idea básica de este sistema de archivos es, dado un servidor de almacenamiento, compartir dicho almacenamiento entre diferentes servidores. Para ello, crearemos un almacenamiento compartido (shared storage) e instalaremos un sistema de archivos capaz de trabajar en clúster. Esto es importante ya que si miramos de usar un disco compartido con un sistema de archivos que no tenga capacidades de cluster crearía inconsistencia de datos. Luego veremos un ejemplo.
Este sería el esquema que planteo:
Para crear el disco compartido podríamos basarnos, por ejemplo, en VMWare creando un disco duro virtual con acceso de escritura desde cualquier máquina y luego activar los flags multi-writer. Como el objetivo de este blog no es enseñar a usar características de VMWare, os dejo el enlace para que podáis hacerlo si fuera necesario. Sino, podéis usar una SAN o cualquier otro sistema que conozcáis para compartir almacenamiento.
Por otro lado, necesitamos que el sistema de archivos esté preparado para trabajar con clúster y en esta ocasión trabajaremos con OCFS2. Para instalarlo en nuestro sistema usaremos apt:
Así pues:
apt-get install ocfs2-tools
Si tenéis una versión con escritorio también podeis instalar ocfs2console. Para este tutorial nos basaremos en servidores sin ventanas.
Lo primero que haremos es definir dos nodos que accederán al recurso compartido (disco compartido). Podrían ser tantos nodos como queramos, pero empecemos por dos. También declararemos un cluster que nos servirá para enlazar los nodos:
Creamos el archivo /etc/ocfs2/cluster.conf:
cluster:
node_count = 2
name = ocfs2
node:
ip_port = 7777
ip_address = 192.168.1.100
number = 1
name = node3
cluster = ocfs2
node:
ip_port = 7777
ip_address = 192.168.1.101
number = 2
name = node4
cluster = ocfs2
Es bastante sencillo entender la configuracón. Declaramos un cluster de dos maquinas (node_count = 2) al que llamamos ocfs2 (name = ocfs2). Luego declaramos dos nodos a los que le ponemos la ip que tienen (192.168.1.100 etc), les asignamos un nombre a cada nodo (name = mi_nodo1) y los enlazamos con el cluster definido (cluster = ocfs2). Como nota, deciros que el nombre del cluster 'por defecto' es ocfs2. Podéis cambiarlo, pero tenerlo en cuenta por si algo no os funciona. También tener muy en cuenta el sangrado del archivo. Si no tabulais correctamente el archivo no arrancará el servicio. Os dará un error como este:
Ahora vamos a cambiar un valor en el otro archivo 'importante' de configuración:
/etc/default/o2cb
Debéis cambiar el valor O2CB_ENABLED a true y dejarlo así:
O2CB_ENABLED=true
Esto lo que hará es que se cargue el driver al arrancar el sistema operativo, lo cual con casi toda seguridad es lo que querremos.
Ya lo tenemos listo. Nos quedará reiniciar los servicios para que los cambios se apliquen:
service o2cb restart
service ocfs2 restart
Ahora bien, todo esto lo hemos hecho en un nodo. Para el otro nodo deberemos instalar también el paquete, editar el /etc/ocfs2/cluster.conf y /etc/default/o2cb.
Ahora sólo nos queda formatear el disco compartido (como es compartido, lo hemos de hacer solamente una vez en uno de los nodos) con el sistema de archivos ocfs2. No hace falta particionarlo si vamos a usar todo el disco. Entenderemos que nuestro disco compartido será, para este ejemplo, el /dev/sdb .
root@node3:/etc/ocfs2# mkfs.ocfs2 -b 4k -C 32K -L "Cluster-OCFS2" -N 4 /dev/sdb
mkfs.ocfs2 1.6.4
Cluster stack: classic o2cb
Label: Cluster-OCFS2
Features: sparse backup-super unwritten inline-data strict-journal-super xattr
Block size: 4096 (12 bits)
Cluster size: 32768 (15 bits)
Volume size: 4293918720 (131040 clusters) (1048320 blocks)
Cluster groups: 5 (tail covers 2016 clusters, rest cover 32256 clusters)
Extent allocator size: 4194304 (1 groups)
Journal size: 67108864
Node slots: 4
Creating bitmaps: done
Initializing superblock: done
Writing system files: done
Writing superblock: done
Writing backup superblock: 1 block(s)
Formatting Journals: done
Growing extent allocator: done
Formatting slot map: done
Formatting quota files: done
Writing lost+found: done
mkfs.ocfs2 successful
Para montar el disco compartido podemos editar el /etc/fstab añadiendo:
/dev/sdb /mnt/Cluster-OCFS2 ocfs2 defaults 0 0
y luego hacer mount -a.
Una vez hecho esto podremos ver que ya trabajamos con el cluster definido:
root@node3:/mnt# /etc/init.d/ocfs2 status
Configured OCFS2 mountpoints: /mnt/Cluster-OCFS2
Active OCFS2 mountpoints: /mnt/Cluster-OCFS2
Si montamos el disco compartido en los dos nodos, veremos que lo que vemos y escribimos desde uno tiene visibilidad total en el otro.
Enlaces de interés:
No hay comentarios:
Publicar un comentario