网站搬家

对经营网站的站长来说,网站搬家是一件头疼的事,尤其存在大量碎文件的网站来说,简直是噩梦,我之前也是被网站搬家折腾的不行,搬家的时候还损坏过一次数据。然后没有数据备份,损失可想而知。

传统网站搬家方案

网站搬家都是三个步骤

  • 原始服务器压缩打包
  • 传输压缩包到新服务器
  • 新服务器解压压缩包

但是这种数据传输方式,会面临很多问题。

  • 整个搬家过程原始服务器资源会消耗殆尽,影响网站访问
  • 搬家过程中网站不能有更新,否则新服务器内容就有部分丢失
  • 时间过长,压缩打包传输解压包,看似没啥大问题,但是数据一大消耗的时间呈指数上升

Rsync方式传输

这种方式看起来比打包传输的方式好,

  • 优点:实时同步,同步完可以直接使用新服务器数据
  • 缺点:碎片化的文件同步时间特别慢,250G左右的数据消费了将近30个小时,时间全部消耗在建立TCP三次握手协议上了,每一个文件都要建立一次握手

Rsync 对大量碎片文件推荐不高,还有就是如果服务器是window的服务器,我不知道百度云的文件同步功能是否给力。

流式非落地打包压缩传输

多次迁移服务器之后,我在思考是否可以利用linux 管道符命令 将数据打包、压缩、 传输、解压数据流、最后落盘。
最后尝试有下面的命令

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

操作步骤

传输依赖老服务器免密登录新服务器

  • 生成公私钥

在老服务器上执行这个命令 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
  • 数据同步

执行下面命令 将/home/wwwroot/下的www.test.com 这个目录和目录下所有内容 同步到目标服务器 的/home/wwwroot/下

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 数据 仅仅需要半个小时。

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