首页
解决方案
数据库专业技术服务全栈式PostgreSQL解决方案Oracle分布式存储化数据库云PolarDB一体化解决方案
产品
CLup:PostgreSQL高可用集群平台 CMiner: PostgreSQL中的CDC CData高性能数据库云一体机 CBackup数据库备份恢复云平台 CPDA高性能双子星数据库机 CSYun超融合虚拟机产品 ZQPool数据库连接池 ConshGuard数据保护产品
文档
文章
客户及伙伴
中启开源
关于我们
公司简介 联系我们
中启开源

介绍

我们经常需要生产中心和容灾中心之间传送大文件,但是如果生产中心与备份中心的物理距离比较远,即使有比较大的带宽,传送也比较慢,原因是物理距离加大了网络延迟,导致传输变慢。而qpipe通过建立多个并发连接来解决网络延迟导致的传输慢的问题。

同时此工具还提供了以下几个功能:

  1. 当网络不稳定,TCP连接断了后,可以重连。
  2. 相比ssh,占用CPU低。
  3. 有压缩功能,为了提高压缩速度,可以使用多线程压缩,线程数可以由参数指定。

使用方法:

下面介绍使用方法:

此工具分服务端和客户端,而程序只有这一个,当指定不同的参数时,程序会以服务端运行或以客户端模式运行。

在服务器端,运行qpipe服务:

  1. nohup ./qpipe -p 4000 -n 192.168.1.0/24 -n 192.168.2.0 >qpipe.log 2>&1 &

参数说明:

在客户端上:
如果想把文件t.dat传送到服务端机器的/tmp目录下,客户端的命令如下:

  1. cat t.dat | ./qpipe -s 192.168.1.1 -p 4000 -c "cat >/tmp/t.dat"

实际执行的效果如下:

  1. osdba@odlt:~/tmp/osdba-qpipe-24a0aea$ cat t.dat | ./qpipe -s 192.168.1.1 -p 4000 -c "cat >/tmp/t.dat"
  2. 2012-03-15 21:01:29 : INFO : Client id : 1
  3. ====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快照:

  1. [root@host01/]#zfs list
  2. NAME USED AVAIL REFER MOUNTPOINT
  3. storagepool 804G 422G 730G /storagepool
  4. storagepool/tangtest 60.6G 422G 59.6G /storagepool/tangtest

我们要把/storagepool/tangtest文件系统传送到host02上去。传送zfs快照需要先建一个快照:

  1. [root@host01 /]#zfs snapshot storagepool/tangtest@snap01
  2. [root@host01 /]#zfs list
  3. NAME USED AVAIL REFER MOUNTPOINT
  4. storagepool 803G 423G 730G /storagepool
  5. storagepool/tangtest 59.6G 423G 59.6G /storagepool/tangtest
  6. storagepool/tangtest@snap01 0 - 59.6G -

这时可以看到快照storagepool/tangtest@snap01建好了,我们把这个快照传到host02上。
先把host02上把启动qpipe服务器:

  1. [root@host02 ]#nohup ./qpipe -n 192.168.128..0/24 -n 192.168.129.0/24 -p 5000 >qpipe.log 2>&1 &
  2. [1] 35

然后在host01上运行如下命令:

  1. [root@host01]#zfs send storagepool/tangtest@snap01 |./qpipe -s 192.168.129.2 -p 5000 -c "zfs recv storagepool/tangtest"
  2. 2012-03-15 21:10:55 : INFO : Client id : 1
  3. ----read speed: 187016797/s, send speed: 755235/s, rate of compression : 0%
  4. ----read speed: 146371897/s, send speed: 653566/s, rate of compression : 0%
  5. ....
  6. ....

等命令执行完后,到host02上可以看到文件系统storagepool/tangtest传过来了:

  1. [root@inc-dba-gp-129-148 /storagepool/qpipe]#zfs list
  2. NAME USED AVAIL REFER MOUNTPOINT
  3. storagepool 30.2G 1.17T 2.68G /storagepool
  4. storagepool/tangtest 59.6G 423G 59.6G /storagepool/tangtest
  5. storagepool/tangtest@snap01 0 - 59.6G -

默认命令中是开启压缩的,使用zlib压缩级别2,可以通过-z参数指定压缩率,如果-z 0则关闭压缩。
默认是使用4个线程做压缩的,可以通过-t 参数指定压缩线程数。

qpipe的其它参数见帮助:

  1. [host01]#./qpipe -h
  2. Usage: qpipe [OPTION]
  3. read data from stdin, and send to a command in remove server.
  4. -s <server_ip>
  5. in client mode, specify the server IP
  6. -p <port>
  7. in client mode, specify the server ip port,
  8. in server mode, specify the server listen port
  9. -c <cmd>
  10. only can be used in client mode, specify the command run in server
  11. -z <0-9>
  12. specified compression level, between 0 and 9: 1 gives best speed, 9 gives best compression, 0 gives no compression at all
  13. -t <1-nn>
  14. specified number of concurrent compress threads, default is 4
  15. -b <blocksize>
  16. specified block size, default is 4M
  17. -l <loglevel>
  18. loglevel, default loglevel is 3, 3 is 1(ERR_LOG)+2(INFO_LOG)
  19. ERR_LOG: 1, INFO_LOG: 2, STAT_LOG: 4, DEBUG0_LOG: 8, DEBUG1_LOG: 16
  20. -w <wait_seconds>
  21. specified time of server wait client reconnect, default is 300 seconds
  22. when beyond it ,then server close this session
  23. -n <allow_ip_or_network>
  24. only can be used in server mode, specify the specified client ipaddress or network can connect to server
  25. -k <socket_buffer_size>
  26. specified size of socket buffer,default is 1M
  27. -h
  28. help
  29. Example:
  30. qpipe -p 5000 -n 172.16.196.0/24
  31. This command start server in 5000 port.
  32. If you only specify a port option, program run in server mode, and listen on this port.
  33. cat t.dat |qpipe -s 192.168.1.200 -p 5000 -c "cat >t2.dat"
  34. This command send file t.dat to 192.168.1.200

下载

此工具可以到github上下载:
https://github.com/osdba/qpipe/zipball/master