我正在尝试创建远程服务器的备份。这是我的配置:
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/
服务器通过戴尔千兆交换机连接。两台服务器都有千兆网卡。它们位于同一子网中。
rSync 解决方案:
最后,感谢大家的建议,我遵循了这条路径:
- 在所有 debian 机器上安装 rsync
- 在备份服务器中安装 rsnapshot
- 在 debian box 中配置 rsync deamon(不包括备份服务器)
- 设置 rsnapshot cron 配置文件
第一次备份需要等待很长时间。
发行版:Debian 服务器
答案1
您正在重新发明轮子。您应该尝试使用 rsync。rsync 将为您构建文件列表,并使用非常快的惊人算法,即使在慢速链接或开销较慢的加密连接上也是如此。
也非常容易运行rsync -vvarP root@server1:/var/www/ root@server2:/var/backup/
答案2
我不认为这是最可能的解释,但是在阅读了您在使用 rsync 时遇到的问题后,很可能您在一个或两个 NIC 交换机连接上遇到了双工不匹配的问题。
尝试在两台服务器上执行netstat -in
,并检查传输中的错误计数。非零 TX 错误通常表示双工不匹配,其影响之一是允许慢速、小数据包(交互式)连接畅通无阻,但严格限制全速批量数据连接。
编辑(按照下面的评论):好的,这不是双工不匹配的症状,所以请忽略我的建议。现在尝试 rsync-over-ssh 时,找出瓶颈仍然很有用,因为它不是 CPU。
答案3
由于您的两台服务器位于同一个交换机和同一个网段上,我建议您在备份箱上设置一个 rsync 守护程序,并避免使用 SSH。
我建议的 rsync 守护进程设置如下。我会给出更具体的说明,但您没有提到您的发行版。
[yourshare]
path = /yourpath/
read only = no
list = yes
uid = youruser
gid = youruser
hosts allow = you.rip.add.res
这可以限制为仅可从您要备份的服务器访问。从那里您应该能够直接将 rsync 作业安排到您的目的地而无需使用 SSH,从而消除该问题。
如果您的网站包含大量文件,rsync 进程可能会在发送增量文件列表时挂起。如果是这样,--delete-before 或 --delete-after 选项可能会有所帮助。
还有一些配置是先复制文件,然后在本地进行分析。我有一段时间没有通过 SSH 使用 rsync 了,但您尝试的设置可能会产生这种效果。
答案4
我建议你使用 rsnapshot。它也是基于 rsync 的。我用它来备份许多远程服务器。第一次备份只需要一些时间,如果你的数据变化不大,备份速度就会非常快。它完全可定制,而且速度相当快(在我的情况下,网络是瓶颈)。