大文件跨網傳輸技巧
運維DBA跨網傳輸大文件就如同上茅廁下廚房一般無二
好的方法并非顯而易見,且方法的優劣差異可能非常顯著
常言道:蔬菜最后一公里價格翻一翻,即便不聽常言
我們用迅雷下載常常駐足在99.9%,亦可窺見文件校驗的昂貴
整個傳輸需要綜合考量的因素頗多,這里我僅拿是否壓縮來寫
壓縮無須做文件校驗,且節省網絡帶寬,提高傳輸速度
相關資源如:CPU、內存、IO,最好用vmstat -n 5看IO或者CPU是否為瓶頸
切莫教條主義導致和數據庫服務器爭搶資源拖垮DB Server
因為壓縮必然要增加CPU開銷!
以下介紹4種方法
㈠ rsync
利用rsync的二進制差異算法,只在網間同步變化的數據,這是rsync優勢所在。
在知道文件中大部分的內容都不需要傳輸的場景下,可以優先考慮使用rsync。
[plain] [mysql@even ~]$ rsync -av /backup/ -e ssh root@192.168.1.110:/bak root@192.168.1.110's password: sending incremental file list ./ cdio_bak.sql sent 1061815 bytes received 34 bytes 163361.38 bytes/sec total size is 1061575 speedup is 1.00 [mysql@even ~]$ mv cdio_bak.sql.bz2 /backup [mysql@even ~]$ rsync -av /backup/ -e ssh root@192.168.1.110:/bak root@192.168.1.110's password: sending incremental file list ./ cdio_bak.sql.bz2 sent 308 bytes received 34 bytes 76.00 bytes/sec total size is 1061757 speedup is 3104.55
顯然,這次只同步了變化的308字節大小。
㈡ scp
這大概會是最簡單的方法,但速度較慢,因為每步都要讀寫磁盤
[plain] [mysql@even ~]$ gzip -c cdio_bak.sql > cdio_bak.sql.gz [mysql@even ~]$ scp cdio_bak.sql.gz root@192.168.1.110:/bak [root@odd bak]# gunzip cdio_bak.sql.gz
㈢ 管道
一步到位,極大降低IO開銷。平時我也是用這種。
[plain] [mysql@even ~]$ gzip -c cdio_bak.sql | ssh root@192.168.1.110 "gunzip -c - > /bak/cdio.sql"
㈣ nc
跨網ssh并非最佳,netcat能使數據在網間"裸奔",避免加密帶來的系統開銷。
[plain]
ODD機器[受]:
猶如餓壞了的寵物小狗,張著嘴等著小主人喂食
[root@odd ~]# nc -l -p 55555 | tar zxvf -
EVEN機器[攻]:
比如貪玩的小主人,往小狗嘴里倒東東
[root@even ~]# tar zcvf - mm | nc 192.168.1.110 55555
bitsCN.com聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com