使用tar+pigz+ssh实现大数据的高效传输

使用tar+pigz+ssh实现大数据的高效传输mysql

之前咱们跨主机拷贝大数据的时候,好比要拷贝超过100GB的mysql原始数据,咱们一般的作法以下:sql

  • 在源端打包压缩为tar.gz文件服务器

  • 采用scp或者rsync等方式拷贝到目标主机ssh

  • 在目标主机解压文件异步

这三个过程是同步阻塞,即不能同时异步执行,致使效率低下。ide

如今咱们将过程优化为以数据流的方式,同时执行(非阻塞模式),则效率通常能够提升到原来的3倍以上,具体实现以下:工具

磁盘读取---->打包---->压缩------>传输---->解压缩-->拆包---->落盘性能

                     |->tar     |->gzip      |->ssh      |->gzip   |->tar大数据

好比我要将本地的test目录拷贝到“目标IP”的的data目录,则命令以下:优化

tar -c test/ |pigz |ssh -c arcfour128 目标IP "gzip -d|tar -xC /data"

固然,这里的解压过程仍然用了效率比较低下的gzip,若是将解压工具换成lz4(但须要单独编译安装),则效率能够再提升很多。

若是不须要解压,则命令变为:

tar -c test/ |pigz |ssh -c arcfour128 目标IP "cat >/data/test.tar.gz"

注:由于采用了流式压缩,解压过程必须加上-i参数,及tar –ixf /data/test.tar.gz 。

说明: pigz是一个高效的压缩工具,能够将多核CPU的每一分剩余性能都用来作压缩计算。而传统的gzip则只能用单核CPU。好比一台2个8core cpu服务器采用pigz和gzip压缩相同的数据,通常性能差距至少在7-8倍以上(通常不会达到理论的16倍,由于受限于磁盘的读写速度和内存等资源)

相关文章
相关标签/搜索