Estamos copiando una instantánea zfs grande (envío zfs) del sitio 1 al sitio 2. site-1 y site-2 son remotos y están conectados a través de IPsec (léase: lento)
en el sitio-2, necesitamos los datos en dos servidores zfs diferentes. actualmente estamos usando dos "envío zfs" ssh simultáneos | zfs recibe comandos. Por supuesto, esto es un desperdicio de ancho de banda.
Hemos experimentado con lo siguiente (1 ssh remoto, tee, 1 ssh local):
[root@site-2-1 ~]# \
time \
ssh root@site-1-0 \
"cat /tmp/100000000.rnd | pigz -1" \
| pv -B 10m -s 100000000 \
| tee \
>(ssh root@site-2-2 "pigz -d > /tmp/test.rnd.1") \
| pigz -d \
> /tmp/test.rnd.1
95.4MiB 0:00:52 [1.83MiB/s] [===<snipped>===>] 100%
real 0m52.062s
user 0m0.979s
sys 0m1.100s
que resultó ser más lento que una simulación de la solución original (2 ssh remotos simultáneamente):
[root@site-2-1 ~]# \
time \
ssh root@site-1-0 \
"cat /tmp/100000000.rnd | pigz -1" \
| pv -B 10m -s 100000000 \
| pigz -d \
> /tmp/test.rnd.2
95.4MiB 0:00:30 [3.09MiB/s] [===<snipped>===>] 100%
real 0m30.837s
user 0m0.827s
sys 0m1.003s
[root@site-2-2 ~]# \
time \
ssh root@site-1-0 \
"cat /tmp/100000000.rnd | pigz -1" \
| pv -B 10m -s 100000000 \
| pigz -d \
> /tmp/test.rnd.2
95.4MiB 0:00:38 [ 2.5MiB/s] [===<snipped>===>] 100%
real 0m38.187s
user 0m0.840s
sys 0m0.846s
Hemos analizado el código de tee, nuestro principal sospechoso, y parece que funciona con un único hilo.
¿Alguien puede recomendar una alternativa más rápida al tee, o tal vez una solución totalmente diferente?
gracias de antemano guven
Respuesta1
sugerencia:
zfs send > file
scp file server-at-site2:
ssh server-at-site2 zfs receive < file
ssh server-at-site2 cat file | ssh second-server-at-site2 zfs receive
Eso requiere dos transferencias, pero presumiblemente la segunda será más rápida (porque la red local, etc.)