Professional Documents
Culture Documents
Los datos de usuario suelen tener requerimientos y retos más complejos que los datos de sistema. Los
datos de sistema son fácilmente recreados desde los CDs de instalación y una cantidad relativamente
de datos desde un back-up.
Los datos de sistema se suelen volver a usar para arquitecturas similares, mientras que los datos de
usuario son muy específicos y dependientes de cada uno de ellos.
¿Podrían los datos ser compartidos mediante varias máquinas? ¿Son los datos específicos de cada
arquitectura?
Los clusters de alto rendimiento (o clusters computacionales) son a veces referidos como computación
en GRID, dado el uso de CPU que hacen varios sistemas para llevar a cabo cálculos concurrentes.
Trabajando en paralelo, muchas aplicaciones (como las de renderización de animaciones o una amplia
variedad de modelos de simulación de problemas) pueden mejorar sensiblemente su rendimiento.
Los cluster de aplicaciones de alta disponibilidad a veces son llamados clusters de fail-over
(recuperación a fallos). Su propósito es proveer de continua disponibilidad a un determinado
servicio eliminando los puntos únicos de fallo. A través de la redundancia (tanto hardware como
software) un sistema altamente disponible puede proveeer virtualmente disponibilidad continua a
uno o varios servicios. Los clusters de fail-over normalmente se asocian con servicios que conllevan
lecturas y escrituras de datos. Realizar el fail-over de un proceso de lectura/escritura de un sistema de
ficheros montado es algo complejo y un sistema de fail-over debe tener provisiones para mantener
la integridad de los datos mientras que un sistema toma el control de un servicio desde el sistema
fallado.
Los clusters de balanceo de carga, envían las peticiones de servicio de red a múltiples sistemas
para repartir las peticiones de carga sobre múltiples sistemas. Los balanceadores de carga proveen
escalabilidad a un coste efectivo, puesto que más sistemas se pueden añadir según cambien los
requerimientos. En vez de invertir en un sistema muy caro, es posible invertir en varios sistemas
pequeños x86, de esta manera, si un servidor en cluster falla, el software de cluster detectará este fallo
y enviará las peticiones a otros servidores operacionales dentro del cluster. Un cliente externo no se
dará cuenta de este fallo en absoluto, puesto que el cluster parece un único sistema.
Los clusters HA proveen la capacidad para que un servicio se mantenga altamente disponible en el
grupo de nodos de cluster haciendo fail-over (reubicandolo) a un nodo que aún sea funcional dentro
del “dominio de fail-over”.
GFS complementa al Cluster Suite proveeiendo gestión de volúmenes conscientes de cluster y acceso
a sistemas de archivos concurrentes para mas de una E/S de kernel (almacenamiento compartido).
Los clusters de fail-over HA son independientes de los clusteres GFS, si bien pueden coexistir y trabajar
juntos.
VFS (Virtual File System) es una capa de interfaz (dentro del kernel) que maneja las llamadas al kernel
relacionadas con sistemas de ficheros. VFS también gestiona la caché de disco.
El driver de sitema de archivos recible la llamada del sistema que ha recibido VFS, VFS pues, traduce
las llamadas genéricas a las propias de cada sistema de archivos.
El driver del dispositivo de bloques envía las peticiones de bajo nivel al driver que implementa el
dispositivo de bloques que contiene el sistema de ficheros.
Los volumenes son una forma de agregación de bloques que describen los límites físicos de los datos.
Estos límites presentan restricciones físicas de hardware y su abstracción o virtualización.
DAS: Direct Attached Storage, es un dispositivo al que tengo acceso exclusivo (típicamente mis discos
internos)
Shared Storage: dispositivos que están igualmente compartidos/accedidos.
SAN
NAS
Una red de área de almacenamiento, en inglés SAN (storage area network), es una red concebida
para conectar servidores, matrices (arrays) de discos y librerías de soporte. Principalmente, está
basada en tecnología fibre channel y más recientemente en iSCSI. Su función es la de conectar de
manera rápida, segura y fiable los distintos elementos que la conforman.
Internet SCSI, iSCSI, es un protocolo que posibilita que los clientes (iniciadores) envién comandos
Network Power Switch (NPS) provee mecanismos para automatizar de manera remota la gestión
de electricidad. Es como una regleta con un puerto ethernet al que nos podemos conectar y cortar el
suministro eléctrico a uno de los puertos.
Una red SAN se distingue de otros modos de almacenamiento en red por el modo de acceso a bajo
nivel. El tipo de tráfico en una SAN es muy similar al de los discos duros como ATA, SATA y SCSI. En
otros métodos de almacenamiento, (como SMB o NFS), el servidor solicita un determinado fichero,
p.ej."/home/usuario/rocks". En una SAN el servidor solicita "el bloque 6000 del disco 4".
Los heartbeat de los clusters no pueden ser separados del trafico de comunicación del cluster, por
tanto el tráfico y los servicios de los clusters deberían estar separados usando distintas subredes o
distintos interfaces de red. Así podemos definir la red pública y la red privada.
Un monitorizador de links de red puede disparar un failover de servicio cuando se detecte el fallo del
link.
Los canales de “bonding” (agregación) de ethernet pueden proveer paths adicionales de trafico de
failover.
El equipamiento de red ha de soportar multicast, pues es como se comunican los nodos de los
clusters (el direccionamiento se genera automáticamente cuando se crea el cluster, aunque puede ser
cambiado manualmente.)
Sirve para hacer agragación de enlaces, consiguiendo una red altamente disponible y/o más rápida.
Evita los puntos únicos de fallos.
3.- Indicar los interfaces físicos que serán miembros del bond:
cd /etc/sysconfig/network-scripts
vi ifcfg-eth0
-------------
DEVICE=eth0
MASTER=bond0
SLAVE=yes
vi ifcfg-eth1
--------------
DEVICE=eth1
MASTER=bond0
SLAVE=yes
ONBOOT=yes
BOOTPROTO=static
A la hora de configurar interfaces bonding para multiplicar ancho de banda (sobre todo con round
robin), hay que tener en cuenta la configuración del switch (trunking); el modo 1 (active backup) no
tiene este problema.
1.8. MULTIPATHING
Es una metodología de acceso a disco. En principio surgió como una implementación de acceso SCSI
por múltiples vías. Conforma una capa de conmutación para distintos caminos al mismo dispositivo de
almacenamiento.
Todas las comunicaciones entre nodos van encriptadas por defecto. OpenAIS usa el nombre del
cluster como clave de encriptación.
Por otro lado hay que asegurarse que los puertos del FW están abiertos para permitir la comunicación
entre nodos, los siguientes puertos han de estar abiertos.
La recomendación es empezar con un FW simple que permita las comunicaciones entre las máquinas,
sin importar los puertos.
2.- udev
udev es el gestor de dispositivos que usa el kernel de Linux en su versión 2.6. Su función es controlar
los ficheros de dispositivo en /dev. Es el sucesor de devfs y de hotplug, lo que significa que maneja el
directorio /dev y todas las acciones del espacio de usuario al agregar o quitar dispositivos, incluyendo
la carga de firmware.
udev sigue el Linux Standard Base (LSB) para las convenciones de nomenclaturas, pero permite
personalización por parte del usuario:
# cd /dev
# ln -s sda midisco
En un sistema Linux tradicional (sin udev ni devfs), en el directorio /dev hay nodos de dispositivo
creados para cada dispositivo conocido, esté o no en el sistema. Se dice que es un conjunto de ficheros
estático, ya que los nodos no cambian.
Además, la forma de acceder a un periférico concreto no es siempre la misma, ya que depende
de qué otros aparatos hay conectados: si se conectan los discos A y B, se llamarán disco1 y disco2
respectivamente. Pero si está sólo un disco (el B, por ejemplo), se llamará disco1, porque sólo hay uno.
El B ha cambiado de nombre.
Este modelo de gestión de dispositivos tiene algunos problemas:
● el directorio /dev es enorme y difícil de manejar, ya que incluye todos los dispositivos posibles
● los números mayor y menor que se asocian a cada dispositivo se estaban acabando
● los usuarios necesitan que cada dispositivo sea accesible de la misma manera; no aceptarán
que por conectar un disco USB al sistema tengan que reconfigurar la cámara de vídeo.
● los programas necesitan poder detectar cuándo se ha conectado o desconectado un
dispositivo, y cuál es la entrada que se le ha asociado en /dev
udev soluciona estos problemas, sobre todo el de poder acceder a un dispositivo con un nombre
siempre fijo. Ésta fue la razón por la que se hizo udev, ya que antes estaba devfs, que solucionaba
alguno de estos problemas, pero no todos.
La capa HAL provee a las aplicaciones de una forma sencilla para reconocer hardware en el sistema.
Antes las aplicaciones de escritorio descubrían el hardware “hablando” directamente con el kernel,
ya que éste mantiene una lista de dispositivos conectados al sistema. Este proceso no siempre
funcionaba correctamente. Con HAL toda la información sobre ciertas clases de hardware es
fácilmente accesible en un formato bien definido.
Cuando un dispositivo nuevo se conecta al sistema se envía una señal asíncrona al bus de mensajes
del sistema detallando qué tipo de dispositivo se ha añadido. Cualquier aplicación de escritorio se
puede conectar al bus de mensajes para descubrir hardware. Internamente, el demonio HAL mantiene
una lista de objetos directorio que contiene pares de clave/valor bien definidas que describen lo
que el objeto representa. Cada dispositivo es identificado por un Identificador Único de Dispositivo
(Universally Unique IDentifier, UUID). Los pares de clave/valor, llamados propiedades del dispositivo,
están definidos en la especificación del HAL.
Cuando un dispositivo se añade o quita del sistema, el kernel envía un mensaje a udevd e informa de
la información des dispositivo a través de /sys. udev entonces, busca información del sistema en /sys
y determina basandose en reglas personalizables y en la información encontrada en /sys, cuál es el
nodo de dispositivo o enlace simbólico a crear, cuáles son sus atributos y/o qué acciones llevar a cabo.
sysfs se usa para que udev pueda preguntar los atributos sobre todos los dispositivos en el sistema
(ubicación, nombre, número de serie, números major / minor, vendor o product ID, etc). udev tiene
un sistema de reglas de usuario para determinar los nombre de dispositivos y las acciones a realizar
cuando éstos de cargan o descargan.
udev accede la la información de los dispositivos de sysfs usando la librería de llamadas libsysfs.
libsysfs tiene un interfaz consistente estándar para todas las aplicaciones que necesitan preguntar a
sysfs para información de dispositivos. El comando udevmonitor es útil para monitorizar los eventos
de kernel y de udev, tales como el deschenfufado de un dispositivo. La opción --env da información de
las variables de entorno relacionadas.
Cada uno de los ficheros que existan en el directorio /sys/block/DISPOSITIVO pueden ser usados como
reglas de udev. También podemos verlo con el comando udevinfo:
Por defecto, udev lee ficheros con extensión “.rules” que estén ubicados en el directorio
/etc/udev/rules.d. Normalmente los ficheros de reglas se nomenclan empezando por un entero de
2 dígitos seguidos de un nombre descriptivo. udev ejecuta las reglas en orden alfabético, por tanto el
número sirve para establecer el orden de ejecución.
El formato de una regla de udev se divide de manera lógica en 2 partes separadas en la misma línea:
uno o más pares clave-valor usados para emparejar los atributos del dispositivo y/o las características
a algún valor; y una o más asignaciones de pares clave-valor que asignan un valor al dispositivo, tal
como el nombre.
Para obtener el UUID de un dispositivo SCSI usamos el comando scsi_id (el -g es para sacar el
dispositivo de la black list y obterner su información; con la opción -x generamos variables que se
pueden importar):
udev crea bajo /dev/disk unos cuantos nombres predefinidos (y persistentes) bajo varios criterios
Ejercicios
1.- Crear un nuevo dispositivo con las siguientes reglas:
Owner: student
Group: student
Mode: 0600
Name: /dev/sda6
2.- Crear una regla para un pendrive USB con los siguientes atributos:
Owner: student
Group: student
Mode: 0600
Name: /dev/sda6
3.- iSCSI
El driver iSCSI provee al host la habilidad de acceder al almacenamiento a través que una red IP. El
driver usa el protocolo iSCSI (definido por IETF) para transportar las peticiones y respuestas SCSI sobre
una red IP entre el host y el dispositivo target iSCSI. A nivel de arquitectura, el driver iSCSI se combina
con la pila TCP/IP del host, los drivers de red y las tarjetas de red (NIC) para proveer las mismas
funciones que SCSI o un adapatador de fibra (FC) con un HBA.
Los clientes (initiators) envían comandos SCSI a dispositivos de almacenamiento remotos (targets)
usando TCP/IP (puerto tcp:3260, por defecto).
Initiator
• Peticiones a dispositivos de bloques remotos vía procesos de descubrimiento.
• Se requiere que el driver iSCSI esté cargado.
• El servicio iscsi habilita la persistencia de dispositivos targets.
• Paquete: iscsi-initiator-utils-*.rpm
Un dispositivo iniciador (cliente) es el que busca e interactúa con dispositivos targets, mientras que un
target es un dispositivo pasivo.
El host ID es único para cada target. El LUN ID es asignado por el target iSCSI, cuyo driver provee
un transporte para las peticiones y respuestas SCSI a dispositivos de almacenamiento via red IP, en
vez de usar un bus SCSI directamene anexado o una conexión FC. El router de almacenamiento, en
cambio, transporta esas peticiones y respuestas SCSI a través de las redes IP y los dispositivos de
almacenamiento anexados a él. Una vez que el driver iSCSI está instalado, el host procederá a realizar
el proceso de descubrimiento de dispositivos de almacenamiento de la siguiente manera:
• Las peticiones del driver iSCSI a targets disponibles a través de un mecanismo de descubrimiento
usan la configuración del fichero /etc/iscsi/iscsid.conf.
• Cada target iSCSI envia los nombres de targets iSCSI disponibles al driver iSCSI.
• El target iSCSI acepta el login y envía los identificadores de targets.
• El driver iSCSI pregunta a los target la información de los dispositivos.
• Los targets responden con la información del dispositivo.
• El driver iSCSI crea una tabla de dispositivos target disponibles.
Una vez que la tabla está completada, los targets iSCSI están disponibles para usarse por los hosts
usando los mismos comandos y utilidades que si estuvieran directamente conectados a un dispositivo
de almacenamiento.
El driver iSCSI usa los nombres por defecto del kernel para cada dispositivo iSCSI de la misma manera
que lo haría cualquier otro dispositivo SCSI y tranporte como FC/SATA.
Puesto que Linux asigna los nodos de dispositivos SCSI cada vez que una unidad lógica SCSI se
detecta, el mapeo a nodos de dispositivos a targets iSCSI y unidades lógicas puede variar. Por tanto, es
necesario que hayan nombres de dispositivos persistentes, para lo que usaremos udev. El comando
scsi_id provee el SN para un dispositivo de bloques dado, al integrarse con udev, puede usarse para
crear un nombre persistente.
*Importante* en /etc/fstab hay que añadir la opción: _netdev, sin ella, rc.sysinit intentará
montar el targe antes de tener capacidades de red o de que los servicios iscsid se hayan arrancado.
El formato de nombres de los targets iSCSI requiere que se empiece con un tipo de designación (por
ejemplo ‘iqn’ para ‘iSCSI Qualified Name’) y debe seguirse por varios campos separados de ‘-’ creando
así un nombre único global. El formato de sub campos IQN es el siguiente:
• Tipo de designador requerido (iqn)
• Fecha de alta (yyyy-mm)
• Nombre de dominio en reverso (tld.domain)
• Cualquier cadena que asegure unicidad (string[[.string]...])
• De manera opcional, cadenas de sub grupos delimitadas por ‘:’ ([:substring])
Ejemplo:
iqn.2007-01.com.example.sales:sata.rack2.disk1
Parámetro Descripción
direct-store device creates a device that with the same VENDOR_ID and
SERIAL_NUM as the underlying storage
outgoinguser username password Target will use this user to authenticate against the
initiator.
Ejemplo:
<target iqn.2009-10.com.example.cluster20:iscsi>
# List of files to export as LUNs
backing-store /dev/vol0/iscsi
initiator-address 172.17.120.1
initiator-address 172.17.120.2
initiator-address 172.17.120.3
</target>
NOTA: Si no especifico ningún initiator, se entiende que permito que cualquiera se pueda conectar al
target iSCSI.
Para descubrir / conectarnos a un target usamos iscsiadm (necesita que esté corriendo iscsi)
• Utilidad de gestión open-iscsi.
• Gestiona el descubrimiento y login a targets iSCSI.
• Gestiona el acceso y configuración de la base de datos open-iscsi.
• Muchas operaciones requieren que el demonio iscsid esté ejecutandose.
En /var/lib/iscsi se guardan todos los ficheros de configuración del cliente, por tanto si he de
borrar un dispositivo y no sé cómo hacerlo, borrar todos los ficheros / directorios de este directorio
nos puede servir de ayuda.
Ejercicios:
1.Configurar un target iSCSI en nuestra máquina local.
[root@station9 ~]# yum install -y scsi-target-utils
[root@station9 ~]# lvcreate vol0 -n iscsi -L 5G
Logical volume "iscsi" created
[root@station9 ~]# vi /etc/tgt/targets.conf
Redundant Array of Inexpensive Disks, («conjunto redundante de discos baratos») hace referencia
En este curso veremos RAID por sofware únicamente. Linux soporta los niveles RAID 0, 1, 5, 6 y 1+0.
Usaremos la herramienta mdadm.
Podemos obtener información (o modificar acciones) de nuestro RAID con el comando mdstat o bien
en el /proc/mdstat o bien en /sys/block/mdX/md:
<ejemplos aqui>
Se pueden añadir discos en los que no se esté escribiendo al RAID para utilizarse como discos de
repuesto, así pues, cuando falla un disco, el RAID automáticamente lo reemplazará y realizará su
sincronización con el resto del RAID. Estos discos se pueden compartir entre distintos RAIDs; esto se
consigue con el fichero /etc/mdadm.conf. Éste no es el fichero de configuración de los arrays, ésta
está dentro del propio array.
NOTA: este servicio no arrancará a menos que en el fichero /etc/mdadm.conf exista la directiva
MAILADDR root@mydomain.tld
Para realizar cualquiera de estas operaciones, es necesario realizar un backup de la sección crítica. La
manera de hacerlo es añadir el parámetro backup-file:
# mdadm --grow /dev/mdX --raid-devices=4 --backup-file=/tmp/mdX.backup
Ejemplos:
Redimensionar / redefinir un stripe de datos:
# mdadm --grow /dev/md0 --raid-devices=4 --backup-file=/tmp/md0-backup
Si la sección crítica se ha corrompido, la única manera de recrearlo es con un backup:
# mdadm --assemble /dev/md0 --backup-file=/tmp/md0-backup /dev/sd[a-d]
Ejercicios
1. Crear un RAID 1 (mirror) con las 2 primeras particiones y otro RAID1 con las otras dos, pero con
bitmap write-intent
# fdisk -l
/dev/sda7 4212 4273 498014+ fd Linux raid autodetect
/dev/sda8 4274 4335 498014+ fd Linux raid autodetect
/dev/sda9 4336 4397 498014+ fd Linux raid autodetect
/dev/sda10 4398 4459 498014+ fd Linux raid autodetect
[root@station9 ~]# partprobe
[root@station9 ~]# mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sda{7,8}
--auto=yes
mdadm: array /dev/md0 started.
[root@station9 ~]# mdadm --create /dev/md1 --level=1 --raid-devices=2 /dev/
sda{9,10} --auto=yes -b internal
mdadm: array /dev/md1 started.
[root@station9 ~]# mkdir /data0 /data1
[root@station9 ~]# mkfs -t ext3 /dev/md0
[root@station9 ~]# mkfs -t ext3 /dev/md1
Para monitorizar el RAID:
[root@station9 ~]# watch -n .2 'cat /proc/mdstat'
Personalities : [raid1]
md1 : active raid1 sda10[1] sda9[0]
497920 blocks [2/2] [UU]
md0 : active raid1 sda8[1] sda7[0]
497920 blocks [2/2] [UU]
unused devices: <none>
Simulamos fallos en los arrays:
[root@station9 ~]# mdadm /dev/md0 --fail /dev/sda7 --remove /dev/sda7
mdadm: set /dev/sda7 faulty in /dev/md0
mdadm: hot removed /dev/sda7
[root@station9 ~]# watch -n .2 'cat /proc/mdstat'
md0 : active raid1 sda8[1]
497920 blocks [2/1] [_U]
[root@station9 ~]# dd if=/dev/urandom of=/data0/fichero bs=1M count=10
10+0 records in
10+0 records out
10485760 bytes (10 MB) copied, 2.10135 seconds, 5.0 MB/s
[root@station9 ~]# mdadm /dev/md0 --add /dev/sda7
mdadm: re-added /dev/sda7
[root@station9 ~]# watch -n .2 'cat /proc/mdstat'
4. Borrar cualquier partición existente en nuestra SAN (/dev/sda) en el nodo1 y crear 4 particiones de
1Gb.
[root@node1 ~]# fdisk -l /dev/sda
Device Boot Start End Blocks Id System
/dev/sda1 1 191 982855 fd Linux raid autodetect
/dev/sda2 192 382 982886 fd Linux raid autodetect
/dev/sda3 383 573 982886 fd Linux raid autodetect
/dev/sda4 574 1018 2289970 5 Extended
/dev/sda5 574 764 982855 fd Linux raid autodetect
Fallar uno a uno todos los discos locales, deespués de ir añadiendo discos SAN hot spare, para migrar
asi todos los datos
Device mapper tiene una biblioteca de espacio de usuario (libdm) que es la que usan de interfaz
las aplicaciones de gestión de volúmenes / dispositivos (como por ejemplo dmraid, LVM2) y una
herramienta de configuración llamada dmsetup. La biblioteca libdm crea los nodos a dispositivos
mapeados en /dev/mapper.
Cada metadispositivo mapeado se define en un fichero de texto basado en una tabla de reglas
ordenadas que mapean cada sector (512 bytes) del dispositivo lógico a su correspondiente sector
arbitrario del dispositivo físico.
Cada una de estas líneas se lee: “empezando en el bloque 0 y ocupando 30 bloques, escribe de manera
lineal en /dev/sda empezando en su bloque 0”.
Las instantáneas (snapshots) permiten al administrador crear un nuevo dispositivo que será una
copia exacta del LV, congelada en algún punto del tiempo. Normalmente esto se realiza de forma
automática, para no alterar el funcionamiento normal del sistema. Cuando la instantánea ha
terminado, el administrador puede quitar el dispositivo sin mayor complicación.
Una diferencia importante entre la versión 1 de LVM y la versión 2 es que en la primera, los snapshots
eran de sólo lectura, mientras que en LVM2 son de lectura y escritura. En LVM1, se crea una tabla de
excepciones, que se usa para mantener una lista de qué bloques en disco han cambiado. Si un bloque
va a ser modificado en el origen, primero se copia en la instantánea, se marca como copiado en la
tabla de excepciones y luego los nuevos datos se copian al volumen original. En LVM2, las instantáneas
funcionan como en LVM1, pero con la característica de que si los datos se escriben en el snapshot (una
vez montado), ese bloque se marca como usado en la tabla de excepciones y no se copia al volumen
original. Esta característica es muy útil debido a que podemos crear nuestra instantánea, montarla y
probar un programa o un nuevo navegador de ficheros. Si ocurre algo desastroso, la desmontamos, la
borramos y volvemos a colocar el volumen original.
Un snapshot no es un backup, puesto que no copia ningún dato, sino que mantiene una tabla de
inodos a los datos en el momento del snapshot. El úso más típico es usar los snapshots como paso
intermedio para hacer un backup, pues en vez de parar, obtenemos un snapshot y de ahí su backup
(obviamente, en caso de no tener un software de backup sofisticado).
Para realizar un snapshot necesitamos tener cargado el driver dm-snapshot. Este driver trabaja junto
con snapshot-origin y copia los datos del dispositivo de origen a un dispositivo de bloques copy-
on-write (COW) separado para almacenamiento antes de la modificación. Los snapshots se leen del
dispositivo COW o del origen subyacente para datos que no hayan sido modificados.
# dmsetup ls --tree
vg0-snap (253:1)
|_vg0-snap-cow (253:3)
|
\_(8:17)
\_vg0-original-real (253:2)
\_(8:17)
vg0-original (253:0)
\_vg0-original-real (253:2)
\_(8:17)
5.2. MULTIPATHING
Es una metodología de acceso a disco. En principio surgió como una implementación de acceso SCSI
por múltiples vías. Conforma una capa de conmutación para distintos caminos al mismo dispositivo de
almacenamiento.
Device Mapper Multipath provee redundancia, cuando falla un camino y hay otro camino disponible,
dm-multipath re-enruta la E/S sobre los caminos disponibles. Cuando hay varios caminos a un
almacenamiento, cada camino aparece como un dispositivo separado. Device Mapper Multipath crea
un metadispositivo por encima de esos dispositivos. Por ejemplo, un nodo con 2 HBAs, cada una de las
cuales tiene 2 puertos anexados a una controladora de almacenamiento, ve 4 dispositivos: /dev/sda,
/dev/sdb, /dev/sdc, y /dev/sdd. Device mapper multipath crea un único dispositivo, /dev/dm-2
Device Mapper Multipath es independiente del fabricante y la tecnología subyacente (por ejemplo, se
puede tener un camino de FC y otro iSCSI); además es “cluster aware”.
La acción a ejecutarse cuando falla uno de los grupos de prioridad, se configura con el parámetro
path_grouping_policy el la sección “defaults” del fichero /etc/multipath.conf. Este parámetro se
suele configurar con el valor de failover.
Colocar más de un camino en el mismo grupo de prioridad nos da una configuración “activo/activo”
mientras que separar los caminos en distintos grupos de prioridad da una configuración “activo/
pasivo”, es decir, los caminos activos están en uso, mientras que los caminos pasivos se mantienen
inactivos hasta que se necesiten debido a un fallo en el camino activo. Requiere el driver dm-
multipath.
Ejemplos:
Ejemplo:
blacklist {
wwid 26353900f02796769
devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*"
devnode "^hd[a-z]"
devnode "^cciss!c[0-9]d[0-9]*"
}
Ejemplo:
multipaths {
multipath {
wwid 3600508b4000156d700012000000b0000
alias yellow
path_grouping_policy multibus
path_checker readsector0
path_selector "round-robin 0"
failback manual
rr_weight priorities
no_path_retry 5
}
multipath {
wwid 1DEC_____321816758474
alias red
}
}
Para hacer preguntas usamos multipath -l
• multipath [-l | -ll | -v[0|1|2]]
• dmsetup ls --target multipath, para determinar qué números largos son necesarios para las
entradas del device mapper.
• dmsetup table
Ejemplo:
# multipath -l
mpath1 (3600d0230003228bc000339414edb8101)
[size=10 GB][features="0"][hwhandler="0"]
\_ round-robin 0 [prio=1][active]
\_ 2:0:0:6 sdb 8:16 [active][ready]
\_ round-robin 0 [prio=1][enabled]
\_ 3:0:0:6 sdc 8:64 [active][ready]
Para cada dispositivo multipath, las 2 primeras líneas de esta salida se interpretan de la siguiente
manera:
acción_si_alguno:alias (WWID_if_different_from_alias)
[size][features][hardware_handler]
6.- CLUSTERING
El cluster puede estar conformado por nodos dedicados o por nodos no dedicados.
En un cluster con nodos dedicados, los nodos no disponen de teclado, ratón ni monitor y su uso está
exclusivamente dedicado a realizar tareas relacionadas con el cluster. Mientras que, en un cluster con
nodos no dedicados, los nodos disponen de teclado, ratón y monitor y su uso no está exclusivamente
dedicado a realizar tareas relacionadas con el cluster, el cluster hace uso de los ciclos de reloj que el
usuario del computador no está utilizando para realizar sus tareas.
Red Hat Cluster Suite (RHCS) es un conjunto integrado de componentes de software que puede ser
implementado en una amplia variedad de configuraciones para cubrir las necesidad de rendimiento,
alta disponibilidad, balance de carga, escalabilidad, compartición de archivos y economía de recursos.
La infraestructura de cluster Red Hat Cluster Suite proporciona las funciones básicas para que un
grupo de computadores (llamados nodos o miembros) trabajen juntos en un cluster. Una vez el cluster
ha sido formado con la infraestructura de cluster, se pueden utilizar otros componentes de Red Hat
Cluster Suite para cubrir las necesidades del cluster (por ejemplo, se puede establecer un cluster para
compartir archivos en un sistema de archivo GFS o establecer un servicio con recuperación contra
fallos). La infraestructura de cluster lleva a cabo las siguientes funciones:
● Administración de cluster
● Administración de los cierres de exclusión
● Fencing
● Administración de la configuración de cluster
Conga provee un agente que es residente en los servidores de producción y es gestionado a través de
un interfaz web, pero la GUI está en cada una de las máquinas donde se desee ejecutar.
ricci es un agente que se instala en todos los servidores que han de ser gestionados.
El cliente web se loga de manera segura (mediante SSL) en el servidor luci, a través del interfaz web,
luci envía comandos a los agentes ricci que están en los nodos a gestionar.
CMAN mantiene rastro de las membresías sondeando los mensajes de otros nodos del cluster.
Cuando las membresías del cluster cambian, el administrador de cluster notifica a los otros
componentes de la infraestructura para que lleven a cabo las acciones apropiadas. Por ejemplo,
cuando el nodo A entra a un cluster y monta el sistema de archivos GFS que los nodos B y C ya tienen
montado, se necesita de un nuevo diario y una nueva administración de cierres de exclusión para que
el nodo A utilice este sistema de archivos. Si un nodo del cluster no transmite un mensaje durante un
tiempo determinado, el administrador del cluster remueve el nodo del cluster y comunica a los otros
componentes de la infraestructura de cluster que el nodo no es ya miembro del cluster.
Fencing es la desconexión de un nodo del cluster del almacenamiento compartido. Mediante fencing,
se corta la E/S de dicho almacenamiento compartido, asegurando así la integridad de los datos. La
infraestructura de cluster realiza fencing a través del demonio fenced.
Cuando CMAN determina que un nodo ha fallado, CMAN comunica a los otros componentes de la
infraestructura de cluster que el nodo ha fallado. fenced ejecuta una acción de aislamiento sobre el
nodo fallido cuando la comunicación es recibida. Otros componentes de la infraestructura de cluster
determinan que acciones se deben tomar. Tras recibir la confirmación de que el nodo ha sido aislado,
se ejecutan las tareas de recuperación. se liberan los cierres del nodo fallido.
Todas las máquinas han de ser capaces se hacer fencing del resto de nodos del dominio de fencing.
El comando fence_node obtiene toda la información necesaria para CCS para la E/S de un nodo de
fencing concreto y entonces ejecuta la acción de fencing haciendo una llamada al agente adecuado
(cuando hacemos fencing, siempre queremos apagar la máquina de forma brusca, no ordenada).
Se pueden configurar los dominios de failover desde el interfaz de luci en la parte de arriba de la
sección “cluster display” en “Failover Domains”.
6.4. QUORUM
El quórum se determina a través de la comunicación de mensajes entre los nodos del cluster a través
de Ethernet. Opcionalmente, se puede determinar el quórum a través de la combinación de mensajes
comunicados a través de Ethernet y a través de un disco de quórum. Para el quórum a través de
Ethernet, el quórum consiste del 50% de los votos más uno. Para el quórum a través del disco de
quórum, el quórum depende de las condiciones especificadas por el usuario.
NOTA: Por defecto, cada nodo tiene un voto. Sin embargo, se puede modificar la configuración para
que cada nodo tenga más de un voto.
cman puede sufrir una situación de “cerebro-dividido” ("split-brain") es decir, 2 grupos de nodos han
sido divididos podrían tomar su nombre del mismo grupo. Si ambos clusters accedieran al mismo
almacenamiento compartido, los datos se corromperían. Por tanto, cman debe garantizar (usando
un esquema de votos de mayoría de quorum) que sólo uno de los dos clusters divididos se mantiene
Cada nodo construye su propia visión de qué nodos cree que están on-line. Cuando se detecte que
un nodo se ha vuelto on-line u off-line, se dice que ocurre una transición de miembros. La transición
de miembros disparan la elección en la que un nodo propone una vista y todos los otros nodos
informe si el punto de vista propuesto coincide con su punto de vista interno. El grupo de gerente de
entonces hacerse una idea de qué nodos están en línea y cuenta sus respectivos votos del quórum. Si
exactamente la mitad o más de los votos espera desaparecen, el quórum ya no existe (salvo en los dos
nodos caso especial). Sólo los nodos que han quórum puede ejecutar un servicio de clúster virtual.
Los valores de votación descritos arriba se pueden ver con el comando cman_tool status.
[root@node1 cluster]# cman_tool status
Version: 6.2.0
Config Version: 7
Cluster Name: cluster9
Cluster Id: 26785
Cluster Member: Yes
Cluster Generation: 8
Membership state: Cluster-Member
Nodes: 2
Expected votes: 1
Total votes: 2
Quorum: 1
Active subsystems: 9
Flags: 2node Dirty
Ports Bound: 0 11 177
Node name: node1.cluster9.example.com
Node ID: 2
Multicast addresses: 239.192.104.10
Node addresses: 172.17.9.1
Según se vayan añadiendo nodos al cluster, el número total de votos aumenta dinámicamente. El total
de votos nunca decrece dinámicamente; si hay quorum, un código de salida 0 ha de ser devuelto por
el comando clustat -Q (quien no produce salida alguna):
# clustat -Q
# echo $?
0
Para poder obtener el quorum, se necesitan = (expected_votes / 2) + 1 (la mitad más 1).
En un ejemplo de un cluster de 10 nodos:
2 nodes @ 10 votes each = 20 votes
8 nodes @ 1 vote each = 8 votes
----------------------------------
Para tomar el control de un servicio tras un fallo, es necesario obtener el quorum y hacer fencing, si
no se consigue hacer fencing, no se puede continuar arrancando / parando servicios, la actividad del
cluster se bloquea.
Podemos ver y cambiar los votos con cman_tool expected -e <votos> y para ver información podemos
usar cman_tool status y ccs_tool lsnode
Para dejar un cluster (esto fallará si hay sistemas aún usando el cluster):
# cman_tool leave
En el caso especial de un cluster de dos nodos, queremos preservar el quorum cuando uno de los dos
nodos falla; para ello, el cluster de dos nodos son una excepción a la decisión de quorum “normal” de
tal manera que para que un nodo siga operando cuando el otro está en fallo, el cluster entra en un
modo especial llamado modo “two_node”. Para poder operar en modo “two_node” hay que poner en
la sección de configuración de cman los valores two_node y expected_votes values a 1:
<cman two_node="1" expected_votes="1"></cman>
Cuando la configuración del cluster se modifica (en uno de los nodos) de manera manual en el fichero
/etc/cluster/cluster.conf hay que asegurarse de que el resto del cluster se entere, para ello está el
comando ccs_tool. Los pasos a seguir son:
1. Editar el fichero /etc/cluster/cluster.conf
2. Informar al Cluster Configuration System (CCS) y Cluster Manager (cman) del cambio y propagarlo al
resto de los nodos:
# ccs_tool update /etc/cluster/cluster.conf
Config file updated from version 2 to 3
Update complete.
3. Verificar que la información de CMAN y los cambios al fichero cluster.conf se han propagado al
resto de los nodos con alguno de los comandos:
clusvcadm es la herramienta de administración del Cluster. Hay una sutil diferencia entre un servicio
parado (stopped) y deshabilitado (disabled). Cuando un servicio está parado, la transición de nodo
provoca que el servicio se vuelva a arrancar. Cuando el servicio está deshabilitado, el servicio se
mantiene deshabilitado aunque se haya realizado la transición a cualquier otro nodo del cluster.
Un servicio puede ser reubicado manualmente en cualquier otro nodo del cluster usando clusvcadm
siempre que en la máquina en la que lo ejecutemos, esté corriendo todos los demonios del cluster y
sea la que tenga el quorum:
# clusvcadm -r webby -m node1.example.com
Ejercicio:
1. Configuración de cluster
[root@node1 ~]# yum grouplist | grep -i cluster
This system is not registered with RHN.
RHN support will be disabled.
Cluster Storage
Clustering
[root@node1 ~]# yum groupinstall Clustering
[root@node2 ~]# yum groupinstall Clustering
[root@station9 ~]# chkconfig luci on
[root@station9 ~]# service luci start
[root@station9 ~]# luci_admin init
Initializing the luci server
Creating the 'admin' user
Ahora nos conectamos a la URL https://station9.example.com:8084 para poder gestionar el cluster
Hay que asegurarse que el fichero /etc/cluster/fence_xvm.key, existe en todos los nodos virtuales
No es el mecanismo principal del cálculo de quorum en un cluster RH, sin embargo nos ayudará a
solucionar los problemas de un cluster de 2 nodos y el que se produce cuando sólo nos queda un
nodo en el cluster pero aún así deseo seguir dando servicio.
Un disco de quorum permite la configuración de heurísticas independientes del cluster que cada nodo
del cluster puede determinar usar para decidir si es apto o no para formar parte de dicho cluster;
especialmente para manejar particiones de redes ("split-brain") o cuando la mayoría de los nodos
del cluster fallan. El disco de quorum confiene información sobre el estado y un 'timestamp'. La
información válida se comunica a los otros nodos del cluster usando un "disco de quorum" que reside
en el almacenamiento compartido. El demonio del disco de quorum requiere que se pueda acceder
a un dispositivo de bloques compartido con acceso concurrente de lectura / escritura para todos los
nodos del cluster. El dispositivo de bloques compartido puede ser un array multi-puerto SCSI RAID, un
RAID SAN Fiber-Channel, un target iSCSI RAID, o incluso, GNBD.
Aparece como un nodo más, sin embargo no lo es. Básicamente es un conjunto de demonios de
quórum basados en disco para Cluster de Linux / CMAN. Se comunican entre ellos a través de la
red para decidir quién es el disco de quorum, almacenando la información en un disco compartido.
Los discos de quorum disponibles, ofrecen un voto más al cluster. Una ventaja inmediata, es que el
El disco de quorum se comunica con cman, ccsd (el demoino Cluster Configuration System) y con el
almacenamiento compartido. Se comunica con cman para anunciar la disponibilidad del dispositivo
de quorum, y se comunica con ccsd para obtener información de la configuración. Por último, se
comunica con el almacenamiento compartido para comprobar y guardar sus estados.
Los disco de quorum están limitados a 16 nodos por cluster. El ID del nodo ha de ser configurado
estáticamente en el /etc/cluster/cluster.conf, secuencialmente del 1 al 16. El servicio cman ha de estar
corriendo antes de poder iniciar el disco de quorum.
Cada cierto intervalo de segundos ('interval'), los nodos escriben cierta información básica en
su bloque individual de estado en su disco de quorum, esta información (timestamp, estado,
disponibilidad) se inspecciona por los otros nodos para determinar si el nodo está colgado o si ha
perdido acceso al almacenamiento compartido. Si un nodo falla al actualizar su estado durante 'tko'
veces, se declara offline y no cuenta para el cálculo de votos de quorum. Si un nodo empieza a
escribir otra vez en el disco de quorum, se vuelve a declarar online después de tko_up veces que haya
actualizado su estado (por defecto tko/3).
El tiempo de espera de desalojo de CMAN (post_fail_delay) debe ser 2 veces el del demonio de
quórum:
7.1. HEURÍSTICAS
Una heurística es una prueba arbitraria ejecutada para ayudarnos a determinar un resultado. El
mecanismo del disco de quorum usa heurísticas para ayudar a determinar si un nodo es válido para
formar parte de un cluster, además del mecanismo de heartbeat que ya provee el cluster. Puede
comprobar acceso a redes o disponibilidad del almacenamiento compartido. El administrador puede
configurar hasta 10 (del 1 al 10) heurísticas puramente arbitrarias. Los nodos de puntuación de más
de 1/2 de los puntos totales que ofrecen todas las heurísticas (o min_score si se define así) son válidos
para reclamar los votos que ofrece el demonio de quórum en los cálculos del quórum del clúster. Las
heurísticas pueden ser cualquier comando ejecutable mediante 'sh -c <string>', como por ejemplo:
<heuristic program="[ -f /quorum ]" score="1" interval="2"/>
Este comando de shell comprueba la existencia de un fichero llamado "/quorum", sin él, el nodo dirá
que no está disponible,
Ejemplo:
<quorumd interval="1" tko="10" votes="1" label="testing">
<heuristic program="ping A -c1 -t1" score="1" interval="2" tko="3"/>
Para crear un qdiks se usa la herramienta "Cluster Quorum Disk" (mkqdisk), que se usa tanto para
crear como para ver los distintos disco de quorum accesibles desde un determinado nodo del cluser.
**IMPORTANTE** El dispositivo ha de ser un dispositivo de bloques raw, sin montar y sin formato.
También debería ser pequeño, pues el disco de quorum sólo va a usar 72 bloques.
1) En el bloque <cman> el flag sin definir two_node (o con valor 0) de tal manera que un único voto no
es suficiente para mantener el quorum.
2) También en el bloque <cman>, definir expected_votes a 3, para que sea neceario un mínimo de 2
votos para mantener el quorum.
3) Definir el parámetro votos del nodo a 1 y cuenta de votos del disco de quorum a 1, así se requieren
2 votos de quórum; un único nodo superviviente debe cumplir con el requisito de la heurística (ser
capaz de hacer un ping -c1 -t1 hostA, en este) para ganar el voto extra ofrecido por el demonio del
disco de quorum y mantener el cluster funcionando.
En este ejemplo, 'expected_votes' se han incrementado a 6, en vez de el valor normal de 3, por tanto
se requieren 4 votos para determinar quorum. Un disco de quorum se configura de tal manera que
contribuya con 3 votos (<quorumd votes="3" ... >) al cluster si tiene más de la mitad de la puntuación
total posible para la prueba heurística, y sigue siendo de escritura. El disco de quórum tiene tres
pruebas heurísticas definidas, cada una de ellas está configurada para anotar un punto (<heuristic
Program="ping Un -c1 score="1" -t1" ...>) si se puede hacer ping a un router diferente (A, B, o C),
para un total de 3 puntos posibles. Para obtener 2 de los 3 puntos necesarios para pasar las pruebas
heurísticas, por lo menos dos de los tres routers deben estar funcionando. Si es así, y sigue siendo
el disco de quórum de escritura, tenemos todos los 3 de los votos de quorumd. Si, en cambio, no
hay routers o solamente un router está funcionando, no se suman puntos suficientes para aprobar
y no obtiene los votos del disco de quórum. Del mismo modo, si no se puede escribir en el disco de
quórum, no se reciben votos del disco de quórum sin importar cuántas heurísticas haya pasado.
Como resultado, aunque sólo haya un nodo funcional, el clúster puede permanecer en quorum
siempre que el nodo restante puede hacer ping a dos de los tres routers (que ganan un punto de
aprobación) y se pueda escribir en el disco de quorum, quien gana los 3 votos extra que necesita para
el quórum. El <quorumd> y los parámetros del bloque de <heuristic> tko establecen el número de
intentos fallidos antes de que se
considere en fallo, y el intervalo define la frecuencia (en segundos) de lectura / escritura de los
intentos del disco de quorum y en qué heurística se ha votado, respectivamente.
Ejercicios:
1. Después de quitar el nodo3 del cluster (para obtener un cluster de 2 nodos), comprobamos el
estado:
[root@c9n1 ~]# cman_tool status
Version: 6.2.0
Config Version: 18
Cluster Name: cluster9
Cluster Id: 26785
Cluster Member: Yes
Cluster Generation: 124
Membership state: Cluster-Member
Nodes: 2
Expected votes: 1
Total votes: 2
Quorum: 2
8. GRUPOS DE RECURSOS
8.1. rgmanager
rgmanager proveee "cold failover" (normalmente significa que se hace un reinicio total de todas
las aplicaciones) para aplicaciones externas (off-the-shelf) y luego hace un "heavy lifting " del que
participan en los grupos de recursos o el failover del sistema. icio. Los servicios pueden aprovechar la
extensibilidad del cluster mediante comandos de la API, o
con un script de inicio SysV lo que acepte los argumentos “start, stop, restart, and status”
Sin rgmanger, cuando un nodo que ejecuta un servicio falla y por tanto, se le hace fencing (es parado
y aislado) el servicio que estaba corriendo seguirá sin estar disponible hasta que el nodo vuelva a
estar online. rgmanager usa OpenAIS para “hablar” con la infraestructura del cluster, y usa un modelo
distribuído para obtener información sobre el estado de los grupos de recursos o servicios.
No siempre es deseable que un servicio (o un grupo de recuros) haga failover a un nodo en particular.
Dentro de un grupo de recursos, el oden de inicio y parada cuando se habilita un servicio es muy
importante. ¿Debería Apache iniciarse antes de que su DocumentRoot esté montado? ¿Debería
levantarse la IP de un servidor NFS antes de que los clientes permitidos se hayan definido? Hay varios
recursos “especiales” que tienen ordenes de arranque y parada predefinidos en sun configuración.
En /usr/share/cluster/service.sh podemos ver los ordenes predefinidos para los grupos de recursos:
<special tag="rgmanager">
<attributes root="1" maxinstances="1"/>
<child type="fs" start="1" stop="8"/>
<child type="clusterfs" start="2" stop="7"/>
<child type="netfs" start="3" stop="6"/>
<child type="nfsexport" start="4" stop="5"/>
<child type="nfsclient" start="5" stop=""/>
<child type="ip" start="6" stop="2"/>
<child type="smb" start="7" stop="3"/>
<child type="script" start="7" stop="1"/>
</special>
Se puede ver que los distintos grupos de recursos tienen distintas prioridades de inicio y parada
Después de que se haya arrancado un recurso, sigue bajando por su estructura de árbol en memoria
que se haya definido por reglas XML externas y pasadas a CCS, para arrancar todas sus dependencias
jerárquicas. Antes de parar un recurso, se han de parar todos sus hijos primero. Según esta estructura,
es posible hacer modificaciones a servicios online e inteligentemente añadir o reiniciar recursos hijo
(como un recurso cliente NFS) sin afectar al padre (el recurso export NFS).
En el ejemplo correcto “/a” se monta antes que los otros, no se garantiza el orden de montado
siguiente, puede ser “/a/b” o “/a/c”, pero eso no nos afecta. Además, “/a” no se desmontará hasta que
sus hijos se hayan desmontado primero.
9.1. GFS
Red Hat GFS es un sistema de archivos de cluster que permite que los nodos de un cluster tengan
acceso simultáneo a un dispositivo de bloque compartido. GFS es un sistema de archivos nativo que
interactúa directamente con la capa VFS de la interfaz del sistema de archivos del kernel de Linux. GFS
utiliza metadatos distribuidos y varios diarios de registro (journals) para asegurar la óptima operación
en un cluster. Para mantener la integridad del sistema de archivos, GFS utiliza un cierre de exclusión
mutua para coordinar las operaciones de E/S. Cuando un nodo cambia los datos en el sistema de
archivos GFS, estos son inmediatamente visibles desde los otros nodos del cluster que utilizan el
sistema de archivos.
Con Red Hat GFS se puede obtener el mayor tiempo de funcionamiento de una aplicación a través de
los siguientes beneficios:
Los nodos que ejecutan Red Hat GFS son configurados y administrados con las herramientas de
configuración y administración de Red Hat Cluster Suite. La administración de volúmenes se realiza
a través de CLVM (Cluster Logical Volume Manager). Red Hat GFS proporciona compartición de datos
entre los nodos GFS en un cluster de Red Hat. GFS proporciona un panorama consistente y único
de los espacios de nombre del sistema de archivo a los largo de los nodos GFS en un cluster de Red
Hat. GFS permite que las aplicaciones sean instaladas y ejecutadas sin necesidad de un conocimiento
detallado de la infraestructura de almacenamiento. Asimismo, GFS proporciona funcionalidades que
son típicamente requeridas en entornos empresariales, tales como quotas, varios diarios de registro y
soporte de múltiples rutas.
GFS proporciona un método versátil del almacenamiento de red de acuerdo con el rendimiento,
escalabilidad y economía necesarias en su entorno de almacenamiento. Este capítulo proporciona
información básica y abreviada para ayudar al lector a entender GFS.
9.2.1 Características
Requiere los elementos del núcleo de Cluster Suite para funcionar:
• OpenAIS para la comunicación entre nodos.
• CLVMD para distribuir las actualizaciondes de los metadatos a los nodos
• I/O Fencing subsystem (fenced)
• Cluster Configuration System (CCS)
• Cluster Manager (CMAN)
• GFS-specific component:
• Distributed Lock Manager (DLM)
Información requerida:
• Tipo de gestor de bloqueos (lock_nolock, lock_dlm)
• Nombre de fichero de bloque (cluster_name:fs_name)
• Número de journals, uno por cada nodo que acceda al GFS (mínimo, extras son útiles para escalar).
• Tamaño de los journals.
• Tamaño de bloque del sistema de ficheros.
El siguiente es un ejemplo de un sistema de ficheros GFS que usa gestión de bloqueos DLM, es un
recurso válido del cluster llamado “cluster1” y se coloca en un volúmen lógico llamado “gfslv” que ha
sido creado desde un grupo de volúmenes llamado “vg0” y crea 3 journals, cada uno de ellos ocupa
128Mb de espacio.
# gfs_mkfs -p lock_dlm -t cluster1:gfslv -j 3 /dev/vg0/gfslv
El fichero de lock consiste en 2 elementos delimitados por ‘:’ el nombre del cluster y un nombre para el
FS de hasta 16 caracteres único.
Todos los atributos de un sistema de ficheros GFS pueden ser obtenidos (siempre que el FS esté
montado) con:
#gfs_tool df <GFS_mount_point>
El tamaño del journal se especifica con la opción -j y por defecto es 128Mb (si bien el mínimo
especificable son 32Mb). El tamaño del bloque de GFS se especifica con -b y por defecto con 4096
bytes. El tamaño del bloque es una potencia de 2 entre 512bytes y el tamaño de página de la máquina
(normalmente 4096 bytes).
Para aumentar un sistema de ficheros GFS, el volúmen lógico subyaciente ha de aumentarse antes.
Puesto que los bloques de datos del sistema de ficheros no puede convertirse a espacio de journal (si
bien GFS2 sí es capaz) cualquier journal que se necesite ha de crearse antes de crecer el sistema de
Pasos:
1. Crear volumenes físicos adicionales:
# pvcreate /dev/sdc /dev/sdd
2. Extender el grupo de volumenes acutales:
# vgextend vg0 /dev/sdc /dev/sdd
3. Extender el volumen lógico:
# vextend -L +100G /dev/vg0/gfslv
4. Crecer el sistema de ficheros GFS existente dentro del espacio adicional:
# gfs_grow -v <DEVICE|MOUNT_POINT>
9.2.5.1. ACLs
El sistema de ficheros en el que se van a implementar ACLs ha de estar montado con la opción ‘acl’
(bien en /etc/fstab o bien en línea de comandos). Las ACLs añaden usuarios y grupos adicionales .
Ejemplo: Añadir permisos rw al usuario ‘boss’ y un usario concreto del grupo users llamado ‘joe’ no ha
de tener ningún tipo de acceso.
-rw-r----- 1 jane users 0 Dec 17 18:33 data.0
# setfacl -m u:boss:rw,u:joe:- data.0
Puesto que las máscaras de permisos de usuarios se comprueban antes que las de grupo, el que el
usuario joe pertenezca al grupo no tiene efecto (nunca llega a comprobarse, dado que se identifica a
joe como un usuario sin permisos).
Para ver la configuración de ACLs de un fichero o directorio se usa getfacl y para cambiarlas, setfacl.
Hay muchos parámetros asosciados con un sistema de ficheros GFS que se pueden modificar con el
comando gfs_tool settune. Los parámetros ajustables han de ser configurados en cada nodo que va a
montar el sistema de ficheros. Dichos parámetros no son persistentes a reinicios.
Para poder ver todos los parámetros ajustables usamos el comando gfs_tool gettune:
[root@tng3-1]# gfs_tool gettune /mnt/gfs
ilimit1 = 100
ilimit1_tries = 3
ilimit1_min = 1
ilimit2 = 500
ilimit2_tries = 10
ilimit2_min = 3
demote_secs = 300
incore_log_blocks = 1024
jindex_refresh_secs = 60
depend_secs = 60
scand_secs = 5
ctime: Última vez que los metadatos del inodo fueron modificados.
mtime: Última vez que el fichero o directorio fue modificado.
atime: Última vez que los datos del fichero o directorio fueron accedidos.
Para poder verlos, usaremos el comando:
# gfs_tool stat <filename>
En caso de que un FS se corrompa, podemos intentar volver a un estado consistente con gfs_fsck. Este
comando ha de ejecutarse en un FS desmontado en todos los nodos:
# gfs_fsck <block_device>
Por ejemplo, para buscar inconsistencias en el FS y automáticamente llevar a cabo los cambios
necesarios sin preguntar:
# gfs_fsck -y /dev/vg0/lv1
Las quotas de FS sirven para limitar la cantidad de espacio en disco que un usuario o grupo pueden
usar. Los updates de GFS son transaccionales, por tanto, un fallo del sistema no implica que haya que
recontruir las quotas.
Para evitar que el rendimiento se vea impactado, los nodos GFS sincronizan sus actualizaciones de
manera periódica. GFS reduce dramáticamente el periodo de sincronización según se acerque al
límite ‘hard’. El comando usado para gestionar quotas es gfs_quota.
Ejemplos:
Mostrar la información de las quotas para todos los usuarios y grupos que tiene un límite o están
usando espacio en disco del FS bajo /gfs:
[root@ask-07 ~]# gfs_quota list -f /gfs
user root: limit: 0.0 warn: 0.0 value: 0.2
user moe: limit: 1024.0 warn: 0.0 value: 0.0
group root: limit: 0.0 warn: 0.0 value: 0.2
group stooges: limit: 0.0 warn: 0.0 value: 0.0
Cambiar el período de tiempo predeterminado entre actualizaciones periódicas de archivos con cuotas
a una hora (3600 segundos) para el sistema de archivos / GFS en un solo nodo.
# gfs_tool settune /gfs quota_quantum 3600
Para utilizar el CLVM, debe estar ejecutándose el software de Red Hat Cluster Suite, incluyendo el
demonio clmvd. El demonio clmvd es la extensión principal de cluster para LVM. El demonio clvmd se
ejecuta en cada computador del cluster y distribuye las actualizaciones de metadatos de LVM en un
cluster, presentando cada computador del cluster con el mismo panorama de volúmenes lógicos. Para
asegurarse de que clmvd se inicie en el arranque, puede ejecutar un comando chkconfig ... on en el
servicio clvmd, así:
# chkconfig clvmd on
Si el demonio clvmd no se ha iniciado, puede ejecutar un comando service ... start en el servicio clvmd,
así:
# service clvmd start