我们正在将一个大型 zfs 快照 (zfs send) 从 site-1 复制到 site-2。 site-1 和 site-2 是远程的,并通过 IPsec 连接(读取:慢)
在 site-2 上,我们需要两个不同 zfs 服务器上的数据。目前我们正在使用两个同时 ssh“zfs send”| zfs接收命令。这当然是浪费带宽。
我们尝试了以下内容(1 个远程 ssh、tee、1 个本地 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
结果比原始解决方案的模拟(同时 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 的代码,这是我们的主要嫌疑人,它似乎是在单个线程中运行的。
谁能推荐一个更快的 T 恤替代品,或者一个完全不同的解决方案?
预先感谢,古文
答案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
这需要两次传输,但大概第二次会更快(因为本地网络等)