Ejecutar nodos de producción de WAX Mainnet puede consumir muchos recursos. Teniendo en cuenta que muchos operadores se esfuerzan por proporcionar Nodos Completos con un historial completo de bloques, los requisitos de almacenamiento pueden ser un desafío ya que están en constante expansión.
Esta guía explicará cómo optimizar la utilización del disco utilizando la Deduplicación ZFS en múltiples nodos WAX.
Optimizar la Utilización del Disco con Deduplicación ZFS
En su mayor parte, el software de WAX está diseñado para usar solo un hilo y no necesariamente utilizará todos los recursos disponibles. Si tu hardware operativo tiene suficiente CPU, RAM y almacenamiento, puede ser bastante económico ejecutar múltiples nodos WAX en un solo servidor físico. Esto se puede lograr utilizando Máquinas Virtuales, Contenedores o Baremetal puro con diferentes puertos TCP de servicio.
Con múltiples nodos ejecutándose en el mismo servidor, el primer desafío suele ser la cantidad de espacio en disco requerida, ya que todos los datos deben duplicarse. Los datos de bloques son actualmente 4TB y los datos de state-history son actualmente 11TB (octubre de 2024), duplicar esto en un solo servidor requeriría una cantidad sustancial de disco.
Afortunadamente, esto se puede mitigar utilizando la Deduplicación ZFS.
Zettabyte File System (ZFS)
ZFS (Zettabyte File System) es un sistema de archivos avanzado y altamente escalable que fue desarrollado originalmente por Sun Microsystems (ahora propiedad de Oracle Corporation) para el sistema operativo Solaris. Está diseñado para abordar las limitaciones de los sistemas de archivos tradicionales y proporcionar características como integridad de datos, protección de datos y alta capacidad de almacenamiento.
Debido a sus características avanzadas y robustez, ZFS ha ganado popularidad en diversos entornos, incluidos centros de datos, servidores de archivos y dispositivos de almacenamiento. También se ha portado a otros sistemas operativos como Linux y FreeBSD, proporcionando una solución de almacenamiento versátil y confiable.
Deduplicación ZFS
La función de deduplicación ofrecida por ZFS permite la eliminación de datos redundantes dentro de los pools/sistemas de archivos ZFS. En nuestro caso, tenemos una cantidad considerable de datos duplicados almacenados en las carpetas de bloques y state-history, solo se conservará una única copia de estos archivos. Las instancias restantes funcionarán como referencias a esa copia de datos original. Este enfoque conserva significativamente el espacio en disco dentro del pool ZFS de tu servidor físico configurado.
Desde una perspectiva técnica, cuando copias, mueves o creas nuevos datos dentro de tu pool/sistema de archivos ZFS, ZFS los divide en fragmentos más pequeños y compara estos fragmentos con los existentes almacenados. Al identificar coincidencias entre los fragmentos, incluso si solo partes de los datos corresponden, la función de deduplicación reduce eficazmente el consumo de espacio en disco.
En nuestro caso de uso, el consumo de espacio en disco de las carpetas de bloques y state-history se reducirá a la mitad al ejecutar dos nodos en un solo servidor.
Configuración
Este ejemplo cubrirá dos instancias de nodos WAX en un solo servidor baremetal y, de manera similar a la Guía de Configuración de un Nodo Sólido WAX Mainnet, utiliza 2 Sistemas de Discos Discretos en este servidor para equilibrar la E/S del disco.
Disco 1 es el SSD o NVMe de grado empresarial de alta velocidad y será el disco del SO utilizado para el software WAX, toda la configuración y los archivos de estado. Se requiere que cada instancia de nodo tenga sus propios archivos de estado, normalmente es más fácil colocar todos los archivos para cada instancia de nodo en un directorio separado y ejecutarlos con diferentes puertos TCP de servicio.
Disco 2 es una matriz de discos SAS de 4 unidades de 4TB (ajusta el tamaño del disco a una capacidad adecuada para las condiciones actuales de la cadena) que alojará un directorio \blocks
separado para cada instancia de nodo.
El Disco 2 ejecutará el Sistema de Archivos ZFS, lo que nos dará tres beneficios principales. ZFS nos permitirá usar la compresión LZ4 para ahorrar espacio, la E/S del disco se mejorará con Adaptive Replacement Cache (ARC) y la utilización del disco se optimizará con Deduplicación.
Implementa ZFS en el Disco 2 con la siguiente configuración:
# Instalar ZFS
$ sudo apt-get install zfsutils-linux
# Localizar los nombres de dispositivo del Disco 2
$ lsblk
# Crear Pool ZFS llamado "datavolume" en los dispositivos localizados
$ sudo zpool create -f -o ashift=12 datavolume /dev/sde /dev/sdf /dev/sdg /dev/sdh
# Habilitar compresión LZ4
$ sudo zfs set compression=lz4 datavolume
# Deshabilitar actualizaciones de tiempo de acceso ZFS
$ sudo zfs set atime=off datavolume
# Establecer Atributos Extendidos ZFS a Atributo de Sistema para Rendimiento
$ sudo zfs set xattr=sa datavolume
# Establecer ARC para almacenar en caché solo metadatos
$ sudo zfs set primarycache=all datavolume
# Habilitar Deduplicación ZFS
$ sudo zfs set dedup=on datavolume
# Establecer la ubicación del punto de montaje en tu ubicación preferida
$ sudo zfs set mountpoint=/home/eosphere/datavolume datavolume
Verificación
Ahora que se ha creado un pool de 16TB, copia o sincroniza tus /blocks
en el punto de montaje /datavolume
, asegurándote de usar dos carpetas separadas para cada instancia de nodo, como /datavolume/node1blocks
y datavolume/node2blocks
, obviamente referenciadas correctamente en el config.ini
de nodeos. ZFS Dedup reconocerá la duplicación de datos en los dos directorios en el pool datavolume.
Verificar Compresión LZ4:
$ zfs get ratio
NAME PROPERTY VALUE SOURCE
datavolume compressratio 1.25x -
La compresión ZFS LZ4 funciona como se esperaba con un saludable 1.25x en un blocks.log
de nodeos.
Verificar Rendimiento de Deduplicación:
$ zpool list
NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
datavolume 14.5T 2.57T 11.9T - - 5% 17% 2.00x ONLINE -
La deduplicación funciona como se anuncia, esencialmente deduplicando ambas instancias de nodo de datos de bloques comprimidos LZ4 de 2.57TB -> DEDUP 2.00x
Verificar Utilización de Memoria de Deduplicación:
$ zpool status -D datavolume
pool: datavolume
state: ONLINE
scan: scrub repaired 0B in 00:02:40 with 0 errors on Sun May 14 00:26:43 2023
config:
NAME STATE READ WRITE CKSUM
datavolume ONLINE 0 0 0
sde ONLINE 0 0 0
sdf ONLINE 0 0 0
sdg ONLINE 0 0 0
sdh ONLINE 0 0 0
errors: No known data errors
dedup: DDT entries 25353378, size 1.06K on disk, 350B in core
bucket allocated referenced
______ ______________________________ ______________________________
refcnt blocks LSIZE PSIZE DSIZE blocks LSIZE PSIZE DSIZE
------ ------ ----- ----- ----- ------ ----- ----- -----
1 2.47K 317M 24.7M 24.7M 2.47K 317M 24.7M 24.7M
2 24.2M 3.02T 2.45T 2.45T 48.3M 6.04T 4.91T 4.91T
4 6.75K 864M 544M 544M 27.0K 3.38G 2.13G 2.13G
8 1 128K 4K 4K 10 1.25M 40K 40K
16 5 640K 20K 20K 136 17M 544K 544K
32 24 3M 924K 924K 1.01K 129M 38.8M 38.8M
2K 2 256K 8K 8K 5.82K 745M 23.3M 23.3M
Total 24.2M 3.02T 2.45T 2.45T 48.4M 6.05T 4.91T 4.91T
La utilización de la memoria se puede determinar mediante la siguiente ecuación:
Entradas DDT x Core / 1024²
25353378 * 350 / (1024²) = 8462MB RAM Usados
Verificar la E/S del disco del pool ZFS:
$ zpool iostat
capacity operations bandwidth
pool alloc free read write read write
---------- ----- ----- ----- ----- ----- -----
datavolume 2.57T 11.9T 9 27 1.39M 2.39M
---------- ----- ----- ----- ----- ----- -----
La salida anterior corresponde a ambos nodos ejecutándose y sincronizados con la red.
Mientras investigaba y realizaba pruebas para esta guía, parece haber bastante desinformación sobre la Deduplicación ZFS. A menudo se descarta Dedup por ser intensiva en CPU, RAM y E/S de disco.
En nuestra experiencia, funciona muy bien para aliviar el uso innecesario de disco del directorio /blocks
, especialmente en entornos de Máquinas Virtuales en servidores más grandes. La sobrecarga parece ser bastante manejable, siendo la mayor la RAM, que es de alrededor de 1GB / TB de disco, la CPU y la E/S del disco no se vieron afectadas.
También es posible usar la clonación ZFS para esencialmente clonar datos sin duplicarlos en el disco. Sin embargo, la clonación ZFS es un proceso manual a menos que se automatice y requiere que se ejecute una reclonación cada cierto tiempo para recuperar datos duplicados.
Estas Guías Técnicas para Desarrolladores de WAX se crean utilizando material fuente de la Serie de Guías Técnicas de WAX de EOSphere
Asegúrate de hacer cualquier pregunta en el Telegram de EOSphere