大文件跨網傳輸技巧 運維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 [email protected]:/bak [email protected]'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 [email protected]:/bak [email protected]'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 [email protected]:/bak [root@odd bak]# gunzip cdio_bak.sql.gz
㈢ 管道 一步到位,極大降低IO開銷。平時我也是用這種。
[plain] [mysql@even ~]$ gzip -c cdio_bak.sql | ssh [email protected] "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