我们经常需要生产中心和容灾中心之间传送大文件,但是如果生产中心与备份中心的物理距离比较远,即使有比较大的带宽,传送也比较慢,原因是物理距离加大了网络延迟,导致传输变慢。而qpipe通过建立多个并发连接来解决网络延迟导致的传输慢的问题。
同时此工具还提供了以下几个功能:
下面介绍使用方法:
此工具分服务端和客户端,而程序只有这一个,当指定不同的参数时,程序会以服务端运行或以客户端模式运行。
在服务器端,运行qpipe服务:
nohup ./qpipe -p 4000 -n 192.168.1.0/24 -n 192.168.2.0 >qpipe.log 2>&1 &
参数说明:
在客户端上:
如果想把文件t.dat传送到服务端机器的/tmp目录下,客户端的命令如下:
cat t.dat | ./qpipe -s 192.168.1.1 -p 4000 -c "cat >/tmp/t.dat"
实际执行的效果如下:
osdba@odlt:~/tmp/osdba-qpipe-24a0aea$ cat t.dat | ./qpipe -s 192.168.1.1 -p 4000 -c "cat >/tmp/t.dat"2012-03-15 21:01:29 : INFO : Client id : 1====Total read bytes : 10485760, send bytes : 45793, rate of compression : 0%, time : 0.24 s
上面的命令中 -s指定了服务器的IP地址,-p指定了端口。-c 指定了在服务端接收数据的程序。上面的命令就如同在本机上执行cat t.dat |cat >/tmp/t.dat命令,只不过通过qpipe完成了跨机器的功能。
下面演示如何传送ZFS快照:
[root@host01/]#zfs listNAME USED AVAIL REFER MOUNTPOINTstoragepool 804G 422G 730G /storagepoolstoragepool/tangtest 60.6G 422G 59.6G /storagepool/tangtest
我们要把/storagepool/tangtest文件系统传送到host02上去。传送zfs快照需要先建一个快照:
[root@host01 /]#zfs snapshot storagepool/tangtest@snap01[root@host01 /]#zfs listNAME USED AVAIL REFER MOUNTPOINTstoragepool 803G 423G 730G /storagepoolstoragepool/tangtest 59.6G 423G 59.6G /storagepool/tangteststoragepool/tangtest@snap01 0 - 59.6G -
这时可以看到快照storagepool/tangtest@snap01建好了,我们把这个快照传到host02上。
先把host02上把启动qpipe服务器:
[root@host02 ]#nohup ./qpipe -n 192.168.128..0/24 -n 192.168.129.0/24 -p 5000 >qpipe.log 2>&1 &[1] 35
然后在host01上运行如下命令:
[root@host01]#zfs send storagepool/tangtest@snap01 |./qpipe -s 192.168.129.2 -p 5000 -c "zfs recv storagepool/tangtest"2012-03-15 21:10:55 : INFO : Client id : 1----read speed: 187016797/s, send speed: 755235/s, rate of compression : 0%----read speed: 146371897/s, send speed: 653566/s, rate of compression : 0%........
等命令执行完后,到host02上可以看到文件系统storagepool/tangtest传过来了:
[root@inc-dba-gp-129-148 /storagepool/qpipe]#zfs listNAME USED AVAIL REFER MOUNTPOINTstoragepool 30.2G 1.17T 2.68G /storagepoolstoragepool/tangtest 59.6G 423G 59.6G /storagepool/tangteststoragepool/tangtest@snap01 0 - 59.6G -
默认命令中是开启压缩的,使用zlib压缩级别2,可以通过-z参数指定压缩率,如果-z 0则关闭压缩。
默认是使用4个线程做压缩的,可以通过-t 参数指定压缩线程数。
qpipe的其它参数见帮助:
[host01]#./qpipe -hUsage: qpipe [OPTION]read data from stdin, and send to a command in remove server.-s <server_ip>in client mode, specify the server IP-p <port>in client mode, specify the server ip port,in server mode, specify the server listen port-c <cmd>only can be used in client mode, specify the command run in server-z <0-9>specified compression level, between 0 and 9: 1 gives best speed, 9 gives best compression, 0 gives no compression at all-t <1-nn>specified number of concurrent compress threads, default is 4-b <blocksize>specified block size, default is 4M-l <loglevel>loglevel, default loglevel is 3, 3 is 1(ERR_LOG)+2(INFO_LOG)ERR_LOG: 1, INFO_LOG: 2, STAT_LOG: 4, DEBUG0_LOG: 8, DEBUG1_LOG: 16-w <wait_seconds>specified time of server wait client reconnect, default is 300 secondswhen beyond it ,then server close this session-n <allow_ip_or_network>only can be used in server mode, specify the specified client ipaddress or network can connect to server-k <socket_buffer_size>specified size of socket buffer,default is 1M-hhelpExample:qpipe -p 5000 -n 172.16.196.0/24This command start server in 5000 port.If you only specify a port option, program run in server mode, and listen on this port.cat t.dat |qpipe -s 192.168.1.200 -p 5000 -c "cat >t2.dat"This command send file t.dat to 192.168.1.200
此工具可以到github上下载:
https://github.com/osdba/qpipe/zipball/master