Asesoramiento de copy de security de ZFS con otro server

Actualmente tengo dos serveres que tienen exactamente el mismo hardware, discos, etc.

Un server (server1) va a ser el server "principal". Básicamente es un server con raidz2 que tiene resources compartidos SMB a los que las personas se conectan.

El otro server (server2) está configurado de la misma manera que server1 (raidz2) pero solo para respaldar server1. Está destinado a ser una copy de security externa en caso de que perdamos el server 1 por fallas en el disco, incendios, daños por agua, etc.

Estoy tratando de encontrar la mejor manera de hacer las copys de security en server2.

Al principio, estaba pensando algo así como rsync. Es trivial configurarlo en un cron, y puedo tenerlo una vez a la semana.

Alternativamente, estaba pensando en algo con zfs send / recv. Tengo entendido que ZFS puede hacer "instantáneas", así que pensé que sería genial si pudiera crear instantáneas / copys de security incrementales sin perder mucho espacio. Siento que esto podría ser más difícil de implementar / propenso a errores.

¿Hay otras alternativas?

Como dije antes, ambos serveres están configurados de la misma manera en términos de hardware y layout RAIDZ2. ¿Qué recomendarían todos para mi situación actual? Gracias por adelantado.

Usaría envío / recepción incremental de ZFS. Debería ser más eficiente que rsync ya que ZFS sabe qué se ha cambiado desde la instantánea anterior sin necesidad de explorar todo el sistema de files.

Suponiendo que desea hacer una copy de security completa de un sistema de files datapool/fs .

Primero crea un grupo para almacenar su copy de security en el server de destino y una instantánea recursiva en el grupo de origen:

 dest # zpool create datapool ... source # zfs snapshot -r datapool/fs@snap1 

a continuación, envía toda la información como una copy de security inicial:

 source # zfs send -R datapool/fs@snap1 | ssh dest zfs receive datapool/fs 

La semana que viene (o el período que desee), crea una segunda instantánea en el grupo de origen y la envía incrementalmente en el destino. En ese momento, ZFS es lo suficientemente inteligente como para enviar solo lo que ha cambiado durante la semana (files eliminados, creados y modificados). Cuando se modifica un file, no se envía como un todo, sino que solo se transmiten y actualizan los bloques modificados.

 source # zfs snapshot -r datapool/fs@snap2 source # zfs send -ri snap1 datapool/fs@snap2 | ssh dest zfs receive -F datapool/fs 

Repita la operación incrementando los numbers de instantáneas cada vez que haga una copy de security.

Elimine las instantáneas antiguas no utilizadas en cualquiera de los serveres cuando ya no las necesite.

Si tiene limitaciones de ancho de banda, puede comprimir / descomprimir datos sobre la marcha, por ejemplo, insertando commands gzip / zip en la canalización o habilitando la compression ssh.

 source # zfs send -ri snap1 datapool/fs@snap2 | gzip | ssh dest "gunzip | zfs receive -F datapool/fs" 

También puede aprovechar mbuffer get un uso de banda ancha más estable, como se describe en esta página :

 dest # mbuffer -s 128k -m 1G -I 9090 | zfs receive datapool/fs source # zfs send -i snap2 datapool/fs@snap3 | mbuffer -s 128k -m 1G -O wxyz:9090 

Nota: El zfs -r no está disponible para implementaciones que no sean Solaris ZFS, consulte http://lists.freebsd.org/pipermail/freebsd-fs/2012-September/015074.html . En tal caso, no use el indicador -F en el destino, sino que en su lugar replique los sets de datos explícitamente. Si se han creado nuevos sets de datos en el origen, envíelos primero de forma independiente antes de hacer la instantánea + envío / recepción incremental.

Por supuesto, si solo tiene un sistema de files para realizar copys de security sin una jerarquía de set de datos subyacente, o si desea realizar copys de security independientes, la copy de security incremental es más sencilla de implementar y debería funcionar de forma idéntica sea cual sea la implementación de ZFS:

T0:

 zfs snapshot datapool/fs@snap1 zfs send datapool/fs@snap1 | ssh dest zfs receive datapool/fs 

T1:

 zfs snapshot datapool/fs@snap2 zfs send -i snap1 datapool/fs@snap2 | ssh dest zfs receive -F datapool/fs