Almacenamiento y alta disponibilidad
Disponibilidad del almacenamiento
1. Problemática
Hasta ahora, cuando se hablaba de almacenamiento, se trataba de volúmenes locales o montajes, con una nota sobre el posible uso de un recurso compartido de red NFS para compartir datos entre aplicaciones.
Desde el principio, un problema ha quedado sin resolver: sabemos cómo hacer que los servidores, las direcciones IP y los servicios sean resistentes a los fallos, pero para el almacenamiento, hemos confiado esencialmente en expedientes que sólo han retrasado la llegada de un problema futuro. ¿Compartir NFS? Claro, pero ¿quién comparte? ¿Un único servidor? En ese caso, el almacenamiento se pierde (al menos temporalmente) en caso de fallo. ¿Un NAS? Si es así y si los discos son RAID, ya es mejor, pero ¿qué pasa si se desconecta el NAS? ¿Estamos seguros de que la compartición que le ofrecen es redundante?
Por tanto, existe el riesgo de que se produzca un punto único de fallo (Single Point of Failure, SPOF). La aplicación y las bases de datos pueden depender de una solución de almacenamiento para la que no esté garantizada la disponibilidad y la redundancia.
Cuando esto es posible, las empresas utilizan infraestructuras de almacenamiento dedicadas, conocidas como SAN (Storage Area Networks). Pero no todo el mundo tiene acceso a una SAN, que requiere una infraestructura dedicada.
Las NAS, Network-Attached Storage, son una solución que presenta volúmenes de datos a un cliente a través de la red, utilizando un protocolo soportado por el sistema operativo. Por lo general, estos son los protocolos NFS (Network File System) para Unix et CIFS (Common Internet File System, un dialecto de SMB) para Windows. También pueden ofrecer otros protocolos como iSCSI. Existen soluciones NAS redundantes, como las que ofrece NetApp, pero son caras. Esto está más allá del alcance de este libro.
También puede utilizar servicios de almacenamiento externos, en la nube, por ejemplo. Es una muy buena idea colocar elementos o páginas estáticas en S3, ofrecido por AWS, por ejemplo, o de Azure Blob Storage, aunque eso signifique colocarlos detrás de proxies para ocultar su presencia al público.
Desde el comienzo de este libro, los recursos de hardware utilizados no han sido excesivos e incluso se podría decir...
RAID
1. Aspectos principales
El clúster garantiza la disponibilidad de los datos en caso de pérdida, fallo o mantenimiento de uno de los nodos, pero también hay que pensar en la disponibilidad del almacenamiento en el propio nodo: ¿qué ocurre si falla un disco físico? Existen soluciones, tanto de hardware como de software, que explotan una forma de virtualización del almacenamiento para aumentar la fiabilidad del almacenamiento de datos: RAID (Redundant Array of Independent Disks; originalmente, la letra I significaba Inexpensive, pero como el coste del almacenamiento bajó mucho, se cambió la palabra).
RAID permite agregar varios discos físicos en un único disco lógico, lo que mejora la fiabilidad y la disponibilidad general y, en ocasiones, aumenta el rendimiento. Existen varios algoritmos y opciones de gestión posibles. RAID puede ser software, hardware (con una tarjeta controladora dedicada) o una mezcla de ambos, como ciertas funciones que ofrecen algunas BIOS y UEFI.
2. RAID por hardware frente a RAID por software
La elección entre RAID por hardware o por software suele ser bastante sencilla, sobre todo en la empresa. Los servidores de tipo Blade suelen tener bahías para discos en la parte frontal, conectadas a controladores específicos SCSI o SATA muy potentes, pero también muy caros, que incorporan un potente procesador, memoria caché e incluso una pequeña batería encargada de garantizar las transacciones y alimentar los discos mientras se finalizan las escrituras en caso de corte del suministro eléctrico. También permiten el hot swapping, es decir, la sustitución en caliente de los discos en caso de avería. Es el caso, por ejemplo, de las tarjetas HP Smart Array en servidores HP Proliant. En Linux, el volumen RAID se ve como un único dispositivo de bloque /dev/sdX. Para gestionar los discos y volúmenes RAID se utiliza un módulo y comandos de espacio de usuario. Una tarjeta RAID de calidad es cara, por no hablar de los discos necesarios, con una velocidad de 15.000 revoluciones por minuto para los modelos SATA o, incluso, para las unidades NVMe (SSD en formato PCI Express).
Un RAID por software permite crear volúmenes, aunque la BIOS, la UEFI o la tarjeta controladora no lo permitan. El núcleo proporciona una capa de abstracción...
Clúster NFS-HA
El clúster se instalará en los servidores nfsha01 y nfsha02. Es necesario prepararlo. Asumimos que el disco adicional de 30 GB está presente y se llama /dev/sdb. Si queremos utilizar el dispositivo RAID que vimos anteriormente, tenemos que adaptar los parámetros del comando en consecuencia.
Se introducirán muchos comandos que requieren acceso root. Se hace más conveniente pasar temporalmente a root.
1. Instalación de paquetes
Se deben instalar los siguientes paquetes (se puede instalar en total 420 paquetes), que ocupa 1 GB de espacio adicional:
# apt install net-tools corosync pacemaker resource-agents
resource-agents-extra fence-agents crmsh pcs haveged drbd-utils
nfs-kernel-server xfsprogs xfsdump units lsscsi
Se ha encontrado un problema con multipath al configurar el clúster, por lo que puede desinstalarlo:
# apt remove multipath-tools
O modificar su configuración en consecuencia en /etc/multipath.conf:
blacklist {
devnode "^sd[a-z]"
devnode "^drbd[0-9]"
}
2. Configuración de la red
Aunque podemos confiar en DNS, es preferible modificar el archivo /etc/hosts y añadir las entradas para los dos nodos. Aproveche para eliminar las eventuales entradas 127.0.1.1 presentes:
192.168.56.10 nfsha01
192.168.56.11 nfsha02
Los componentes necesitan que se abran varios puertos entre los dos miembros del clúster para funcionar.
Puertos a abrir:
Puerto |
Protocolo |
Producto |
Rol |
2224 |
TCP |
Pacemaker |
Comunicación entre el cliente pcs y todos los nodos |
3121 |
TCP |
Pacemaker |
Comunicación entre los miembros del clúster y los remote nodes (opcional aquí) |
21064 |
TCP |
Pacemaker |
Sólo es necesario si se utiliza GFS2 o clvm (aquí es opcional) |
5404-5406 |
UDP |
Corosync |
Sincronización del heartbeat entre todos los nodos |
7788 |
TCP |
drbd |
Comunicación entre servicios drbd, un puerto por recurso |
2049 |
TCP |
NFSv4 |
Puerto de servicio NFS por defecto |
En nfsha01:
# ufw enable
# ufw allow proto tcp from 192.168.56.11 to 192.168.56.10 port 2224
# ufw allow proto tcp from 192.168.56.11 to 192.168.56.10 port 3121
# ufw allow proto tcp from 192.168.56.11 to 192.168.56.10 port 7788
# ufw allow proto tcp from 192.168.56.11 to 192.168.56.10 port 21064
# ufw allow proto udp from 192.168.56.11...
Proyectos XFS
1. Adición manual
Ahora que el clúster está en su sitio, tenemos que crear recursos compartidos con cuotas. En XFS, las cuotas se presentan de varias formas: las clásicas, correspondientes a usuarios y grupos y otra, denominada cuotas de proyecto. Un proyecto es simplemente un directorio. Por lo tanto, se puede limitar la cantidad de datos dentro de un directorio.
He aquí cómo hacerlo con dos directorios. Los archivos de configuración deben estar presentes y ser idénticos en ambos nodos. Por otro lado, los directorios a crear y los comandos XFS a ejecutar deben estar en el nodo activo del clúster, donde está montado el sistema de archivos XFS.
Cree dos proyectos XFS que se puedan montar en NFS desde otro servidor. Los directorios se deben crear en la raíz NFS export /nfsha/exports:
# mkdir -p /nfsha/exports/vol{1,2}
Ya puede montar estos dos directorios desde otro servidor, pero el tamaño que verá será el de la raíz y, por tanto, el del sistema de s completo. Necesita añadir las cuotas.
El archivo /etc/projects define la lista de proyectos en formato id:path. El identificador es numérico. Añada las dos líneas correspondientes a los proyectos:
# cat /etc/projects
1:/ nfsha/exports/vol1
2:/ nfsha/exports/vol2
El archivo /etc/projid asocia una etiqueta con el identificador del proyecto:
# cat /etc/projid
vol1:1
vol2:2
En el nodo primario (que tiene el punto de montaje), inicialice las cuotas.
La información de cuotas está en el propio punto de montaje, cambiará con el sistema de archivos. Las cuotas se gestionan con el comando xfs_quota.
# xfs_quota -x -c 'project -s vol1' /nfsha
Setting up project vol1 (path /nfsha/exports/vol1)...
Processed 1 (/etc/projects and cmdline) paths for project vol1
with recursion depth infinite (-1).
# xfs_quota -x -c 'project -s vol2' /nfsha
Setting up project vol2 (path /nfsha/exports/vol2)...
Processed 1 (/etc/projects and cmdline) paths for project vol2
with recursion depth infinite (-1).
Aquí está el informe asociado. El proyecto #0 es el propio sistema de archivos XFS:
# xfs_quota -x -c 'report -p -h' /nfsha
Project quota on /nfsha (/dev/drbd0)
Blocks ...