wir kopieren einen großen ZFS-Snapshot (ZFS-Send) von Site-1 nach Site-2. Site-1 und Site-2 sind Remote und über IPsec verbunden (sprich: langsam).
An Standort 2 benötigen wir die Daten auf zwei verschiedenen ZFS-Servern. Derzeit verwenden wir zwei gleichzeitige SSH-Befehle „ZFS Send“ | ZFS Receive. Dies ist natürlich eine Verschwendung von Bandbreite.
wir haben mit Folgendem experimentiert (1 Remote-SSH, T-Shirt, 1 lokales SSH):
[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
was sich als langsamer herausstellte als eine Simulation der ursprünglichen Lösung (2 Remote-SSHs gleichzeitig):
[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
wir haben uns den Code von Tee, unserem Hauptverdächtigen, angesehen und es scheint, dass er aus einem einzigen Thread heraus operiert.
kann jemand eine schnellere Alternative zu Tee oder vielleicht eine völlig andere Lösung empfehlen?
danke im voraus, guven
Antwort1
Anregung:
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
Das erfordert zwei Übertragungen, aber vermutlich wird die zweite schneller sein (wegen lokalem Netzwerk usw.)