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