大きな ZFS スナップショット (ZFS 送信) をサイト 1 からサイト 2 にコピーしています。サイト 1 とサイト 2 はリモートであり、IPsec 経由で接続されています (つまり、低速です)。
サイト 2 では、2 つの異なる zfs サーバー上のデータが必要です。現在、2 つの同時 ssh "zfs send" | zfs receive コマンドを使用しています。これはもちろん、帯域幅の無駄です。
私たちは次のことを実験しました (リモート ssh 1 つ、tee、ローカル ssh 1 つ):
[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
これは、元のソリューション (2 つのリモート SSH を同時に実行) のシミュレーションよりも遅いことが判明しました。
[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
私たちは第一容疑者である tee のコードを調べたところ、単一のスレッドで動作していることがわかりました。
誰か、Tee よりも速い代替案、あるいはまったく異なる解決策を推奨してもらえませんか?
よろしくお願いします、グヴェン
答え1
提案:
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
これには2回の転送が必要ですが、おそらく2回目の転送の方が速くなります(ローカルネットワークなどのため)