Why
在服務(wù)器之間倒騰數(shù)據(jù)是運(yùn)維工作的常見場(chǎng)景题涨,這個(gè)運(yùn)維的同行們應(yīng)該都心有戚戚焉吧淘邻,比如要把一臺(tái)服務(wù)器上的服務(wù)遷移到另外一臺(tái)服務(wù)器上菠隆、比如這個(gè)服務(wù)又新上一臺(tái)服務(wù)器譬重,需要把數(shù)據(jù)從老服務(wù)器上同步過來一份读整,類似的需求是不是感覺經(jīng)常碰到呢簿训?
How
- scp
- rsync
- sftp
- nc
- socat
- ......
以上幾種方法中:
- scp和sftp其實(shí)都還是走的ssh,走這種方式服務(wù)器有加密米间、解密的負(fù)載强品,所以比較耗cpu資源,為了減輕cpu負(fù)載屈糊,可以選用輕一點(diǎn)的cipher比如arcfour的榛。這種方式比較適合于一次性的拷貝不太大的單個(gè)文件。
-
rsync可以走自有協(xié)議逻锐,也可以走ssh通道夫晌。不管那種,都可以用于“同步”數(shù)據(jù)的場(chǎng)景昧诱。
- 如果走自有協(xié)議的話晓淀,速度很不錯(cuò)。只不過需要先配置服務(wù)器和客戶端
- 如果走ssh的話鳄哭,會(huì)一樣碰到加解密耗cpu的問題要糊。
- nc(netcat)和socat在這里是類似的思路,只是socat號(hào)稱是比nc(netcat)更瑞士軍刀的瑞士軍刀:)
總結(jié)一下:
- 如果文件很多妆丘、數(shù)據(jù)量很大的場(chǎng)景下锄俄,我推薦用tar+socat的方案,代碼如下:
# server A & server B上都要執(zhí)行
yum -y install tar socat;
# server A(ip:1.1.1.1)上執(zhí)行
cd dest_path;
socat tcp4-listen:11111 stdout | tar xvpf -
# server B上執(zhí)行
cd src_path;
tar cvf - files | socat stdin tcp4:1.1.1.1:11111
# server B上的src_path/files==>server A的dest_path/files
# 在千兆環(huán)境下勺拣,拷貝速度可以穩(wěn)定達(dá)到800M以上奶赠。
- 如果是單個(gè)的大文件,直接socat即可药有,代碼跟上面類似
- 如果不追求性能和速度毅戈,scp即可,代碼略
思考
- 如果網(wǎng)絡(luò)帶寬不大而且沒有加密需求的話愤惰,可以給tar啟用壓縮苇经,格式用性能最好的xz
# server A & server B上都要執(zhí)行
yum -y install tar socat xz;
# server A(ip:1.1.1.1)上執(zhí)行
cd dest_path;
socat tcp4-listen:11111 stdout | tar xJvpf -
# server B上執(zhí)行
cd src_path;
tar cJvf - files | socat stdin tcp4:1.1.1.1:11111
# 在千兆環(huán)境下,拷貝速度只有10M(壓縮后)左右宦言。
- 如果從命令行簡(jiǎn)潔程度來講扇单,還不如直接用nc呢。:)
# server A & server B上都執(zhí)行
yum -y install nc;
# server A(ip:1.1.1.1)上執(zhí)行
cd dest_path;
nc -l 11111 | tar xv
# server B上執(zhí)行
cd src_path;
tar cvf - files | nc 1.1.1.1 11111