07 mar

Crear Raid-Z más zfs con deduplicación y compresión

Vamos a dar los pasos para crear en FreeBSD dos raidz, crearemos también dos zpools y en uno de ellos vamos a montar la compresión y la deduplicacion que nos ofrece ZFS, a más voy a poner unos comandos que suelen ser útiles para controlar el tema.

El escenario es el siguiente, tenemos 8 discos duros, 4 de 2 TB y 4 de 600GB, la idea es crear dos raidz.

Primero de todo, lo que vamos a mirar es la lista de discos duros que tenemos en nuestro FreeBSD, lo haremos con el comando


egrep '^ad[0-9]|^da[0-9]' /var/run/dmesg.boot

Como os fijareis, estoy en una plataforma virtual, como consejo es diré que tengáis en cuenta los canales del conector de SCSI en VMware, yo soy partidario de separa los discos del sistema en el canal 0 y los de backup (en este caso) en el canal 1, esto también nos da la facilidad que en el caso que sean discos de backup, podamos decidir que esos discos no se realicen snapshot, o por ejemplo si tenemos que hace backup de esa máquina virtual, en mi caso con veeam backup, podremos decirle que no haga backup de los discos que estén conectados en el canal 1.

Un trozo de mi lista es:

da7: Command Queueing enabled
da7: 614400MB (1258291200 512 byte sectors: 255H 63S/T 78325C)
da8 at mpt1 bus 0 scbus3 target 6 lun 0
da8: <VMware Virtual disk 1.0> Fixed Direct Access SCSI-2 device
da8: 320.000MB/s transfers (160.000MHz, offset 127, 16bit)
da8: Command Queueing enabled
da8: 2097151MB (4294967294 512 byte sectors: 255H 63S/T 267349C)
da9 at mpt1 bus 0 scbus3 target 8 lun 0
da9: <VMware Virtual disk 1.0> Fixed Direct Access SCSI-2 device
da9: 320.000MB/s transfers (160.000MHz, offset 127, 16bit)
da9: Command Queueing enabled
da9: 614400MB (1258291200 512 byte sectors: 255H 63S/T 78325C)

Bien, pues vamos a crear primero los dos RAIDZ.

zpool create storage raidz da2 da3 da6 da8

Donde storage es el nombre del “pool” y da2..da8, los discos que queremos añadir a ese Raid.

Por defecto al colocar raidz nos generara algo parecido al RAID5 tradicional, pero disponemos de otro tipos de RAID, dentro del RAIDZ.

Tipos de RAID-Z

Raid 0

zpool create nombredelpoll discos

Raidz-2

Creación de un zpool raidz-2 con 4 discos, doble paridad y un disco de spare,

&lt;pre&gt;zpool create nombre del pool  raidz2 discos spare disco_en_spare

Ahora vamos crear el segundo raidz

zpool create backups raidz da4 da5 da7 da9

Podemos ver que el Raid se creo correctamente con

zpool list
backups  2.33T   104G  2.23T     4%  1.43x  ONLINE  -
storage  7.94T  1.58T  6.36T    19%  1.00x  ONLINE  -

Para ver el punto de montaje, lo podemos hacer con un df -h

Como vamos a colocar copias de seguridad en este pool backups activaremos la compresión y la deduplicacion

Podemos hace una simulación de lo que podíamos ganar en el caso de activar la deduplicacion en un pool, con el comando


zdb -S pool

&lt;pre&gt;
zfs set dedup=on backups/
zfs set compression=gzip-9 backups/

Podemos elegir el nivel de compresión.

Cuando empecemos a trabajar con el, podemos ir comprobando lo que hemos ganado con la deduplicacion y compresion con el comando siguiente.


zdb -D pool

zdb -DD pool

Que nos devolverá información básica o detallada del pool.

Ejemplo basico


DDT-sha256-zap-duplicate: 2682724 entries, size 356 on disk, 166 in core
DDT-sha256-zap-unique: 14651367 entries, size 335 on disk, 150 in core

dedup = 2.42, compress = 3.52, copies = 1.00, dedup * compress / copies = 8.48

Ejemplo detallado


DDT-sha256-zap-duplicate: 2682724 entries, size 356 on disk, 166 in core
DDT-sha256-zap-unique: 14651367 entries, size 335 on disk, 150 in core

DDT histogram (aggregated over all DDTs):

bucket              allocated                       referenced
______   ______________________________   ______________________________
refcnt   blocks   LSIZE   PSIZE   DSIZE   blocks   LSIZE   PSIZE   DSIZE
------   ------   -----   -----   -----   ------   -----   -----   -----
1    14.0M   1.73T    471G    473G    14.0M   1.73T    471G    473G
2    1.23M    135G   42.6G   42.8G    3.08M    345G    106G    106G
4     513K   47.3G   18.8G   18.9G    2.43M    234G   91.8G   92.2G
8     311K   33.5G   10.4G   10.5G    3.25M    362G    110G    111G
16     118K   11.1G   4.30G   4.31G    2.61M    252G   95.7G   96.1G
32     396K   47.5G   11.1G   11.1G    14.1M   1.67T    405G    407G
64    11.9K    389M    373M    375M    1014K   32.9G   31.4G   31.5G
128    3.56K    142M    131M    132M     607K   23.5G   21.9G   21.9G
256    4.24K   75.7M   44.6M   45.8M    1.30M   23.7G   14.0G   14.3G
512      106   3.40M   3.34M   3.36M    67.6K   2.16G   2.12G   2.13G
1K       16    366K    350K    353K    21.9K    440M    418M    422M
2K       16   88.5K   67.5K   71.1K    42.5K    237M    178M    188M
4K        8   77.5K   39.5K   41.1K    43.2K    423M    218M    227M
8K        2     48K     48K   48.6K    23.5K    565M    565M    573M
16K        3   77.5K   77.5K   78.5K    53.8K   1.36G   1.36G   1.38G
32K        1   71.5K   71.5K   71.8K    36.9K   2.58G   2.58G   2.59G
Total    16.5M   2.00T    559G    561G    42.6M   4.65T   1.32T   1.33T

dedup = 2.42, compress = 3.52, copies = 1.00, dedup * compress / copies = 8.48

En este caso no vamos a separa la cache de cada pool y los logs, pero es posible tener una cache por cada grupo discos, una cache que es interesante que este en unos discos más rápidos, si vemos que nos hace falta podemos mirar el rendimiento de nuestro sistema de RAID con la aplicación que queramos, sabiendo que contra más compresión pues mas recursos.
Una herramienta que esta bastante bien es Bonnie++

Con esto ya tendremos montado nuestro sistema Raid-Z y algunas características de zfs