使用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倍,由於受限於磁盤的讀寫速度和內存等資源)

相關文章
相關標籤/搜索