一般网站搬家的时候 一般都会采用 压缩打包->传输压缩包->解压压缩包,但是这个步骤中会面临很多问题,比如压缩解压的空间不够,磁盘只有1TB 存储都已经占了600G 或者更高的时候 压缩的空间就不够了,还有压缩和解压消耗时间比较长 传输的时候网络瓶颈 等等,我碰到有些朋友搬家 2T的数据将近来来回来折腾了一个多月,压缩分卷,传出 合并分卷 再解压。这一系列步骤下来 确实弄得人身心俱疲。
还有一种方案是 rsync 方式 这种压缩好的包来说 速度很快 但是对碎片文件来说 简直是灾难。碎片小文件在rsync的方式下 频繁的建立和断开tcp连接。2T的小文件 我估计一个月都传不完。
下面就是通过ssh协议 将文件压缩后的流直接传输到目标服务器。然后目标服务器接收到流之后 对数据流进行解压。
首先添加免密
在老服务器上执行这个命令 ssh-keygen 之后一路回车下去 就ok
如下

root@logstash01 ~]# ssh-keygen  
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
b0:f5:8a:f6:c3:f5:85:cf:9c:f7:55:28:15:ba:4c:60 root@logstash01
The key's randomart image is:
+--[ RSA 2048]----+
|          E   .  |
|         . . . . |
|      . .   o .  |
|       + . o o . |
|      . S . +.. .|
|       . .. ... .|
|      o... . = ..|
|     . .o   . = o|
|        ..     .o|
+-----------------+
[root@logstash01 ~]# 

然后执行如下命令 192.168.10.11是新站的IP 然后输入yes和输入密码

ssh-copy-id 192.168.10.11

     

然后就可以进行数据同步了

nohup `tar -c /home/wwwroot/www.test.com/ |gzip |ssh -c arcfour128 192.168.10.11 "gzip -d|tar -xC /" ` &        

不过现在差不多都是 centos7了 不在支持arcfour128加密模式了 所以我就换一个 aes128-ctr

nohup `tar -c /home/wwwroot/www.test.com/ |gzip |ssh -c aes128-ctr 192.168.10.11 "gzip -d|tar -xC /" ` &

上面的命令发现 断开ssh连接之后 会断,对以上命令进行修改 创建一个文件rsynct.sh 在/www/wwwroot 目录下

#!/bin/bash
tar -c www.test.com |gzip |ssh -c aes128-ctr 192.168.10.11 "gzip -d|tar -xC /www/wwroot"

然后只需要cd 到/www/wwwroot 执行即可 这样执行就可以安稳的断开xshell了

cd /www/wwwroot
nohup sh rsynct.sh &  

目标端检查同步进程是否完成

ps -ef |grep gzip 

源端检查 那个任务跑完了 需要安装iotop

yum install iotop -y
itop #如果没完成会看到 tar -c www.test.com 读取硬盘的进程还在 

不过跑之前 我先建议检查下新老机器的磁盘性能,根据多个场景测试,发现大部分瓶颈都在磁盘的文件读取速度上面,有的机器能跑满带宽,有些机器因为磁盘性能问题 最多也就跑几M的速度。 有些机器IO高的 网站同步速度 100G 数据 仅仅需要2个小时。

yum install hdparm -y #安装hparm 软件
hdparm -t /dev/sdb  #测试数据盘读取能力