如何远程备份服务器目录?

我正在尝试创build远程服务器的备份。 这是我的configuration:

Server1 (webserver) Server2 (backupserver) 

这是我的小脚本。 它从server2开始:

 #!/bin/bash date=`date +%F` basepath=/var/backup webfolder=$basepath/$date/websites/ for f in $(ssh root@server1 "ls -l /var/www/ | egrep '^l'") do if [[ $f = *.* ]] then echo "processing $f "; ssh root@server1 "tar zcf - /var/www/$f/web/" > $webfolder/$f.tar.gz fi done; 

问题是它太慢了! 我如何加快这个脚本?

更新:

我已经使用Rsync没有成功。 这是我使用的命令:

 /usr/bin/rsync -a --delete --numeric-ids --relative --delete-excluded \ --rsh="/usr/bin/ssh -p 22" [email protected]:/var/www \ /home/backups/daily.0/webserver/ 

这些服务器由Dell千兆位交换机连接。 两台服务器都有千兆网卡。 他们在同一个子网。

rSync解决scheme:

最后,感谢我遵循这条道路的build议:

  1. 在所有debian框中安装rsync
  2. 在备份服务器上安装rsnapshot
  3. 在Debian中configurationrsync deamon(不包括备份服务器)
  4. 设置rsnapshot cronconfiguration文件

第一次等待第一次备份很多时间。

发行版:Debian服务器

你正在重新发明轮子。 你应该尝试使用rsync。 rsync将为您build立文件列表,并使用一个非常快的惊人的algorithm,即使是在慢速链接上,或者是从开销较慢的encryption连接。

rsync -vvarP root@server1:/var/www/ root@server2:/var/backup/

我不认为这是最可能的解释,但是阅读了rsync的麻烦之后,可能是因为一个或两个NIC交换机连接上的双工不匹配而受到影响。

尝试在两台服务器上执行netstat -in ,然后检查传输中的错误计数。 非零TX错误通常表示双工不匹配,其中一个影响是允许缓慢的小包(交互式)连接畅通无阻,但却残酷地限制全速批量数据连接。

编辑 (下面的评论如下):好的,这不是双工不匹配的症状,所以不要理我的build议。 当你尝试使用rsync-over-ssh时,找出瓶颈是非常有用的,因为它不是CPU。

由于您的两台服务器位于同一个交换机和同一个网段,因此我build议在您的备份箱中设置一个rsync守护程序,并避免一起使用SSH。

我build议你的rsync守护进程的设置如下。 我会提供一些更具体的指导,但你没有提到你的发行。

 [yourshare] path = /yourpath/ read only = no list = yes uid = youruser gid = youruser hosts allow = you.rip.add.res 

这可以限制为只能从要备份的服务器访问。 从那里你应该能够安排一个rsync作业直接到你的目的地,而不使用SSH,消除这个问题。

如果您的站点包含大量文件,则rsync进程可能会在发送增量文件列表中挂起。 如果是这样,之前或之后的删除选项可能是有益的。

还有一些configuration首先复制文件,然后在本地进行分析。 我有一段时间没有通过SSH使用rsync,但是您尝试的设置可能会产生这种效果。

我会build议你使用rsnapshot。 它也基于rsync。 我用它来备份许多远程服务器。 第一次只需要一些时间,如果你的数据变化不大,那么速度会非常快。 这是完全可定制的,相当快(在我的情况下networking是瓶颈)。