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

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

我正在尝试创建远程服务器的备份。这是我的配置:

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 解决方案:

最后,感谢大家的建议,我遵循了这条路径:

  1. 在所有 debian 机器上安装 rsync
  2. 在备份服务器中安装 rsnapshot
  3. 在 debian box 中配置 rsync deamon(不包括备份服务器)
  4. 设置 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 的。我用它来备份许多远程服务器。第一次备份只需要一些时间,如果你的数据变化不大,备份速度就会非常快。它完全可定制,而且速度相当快(在我的情况下,网络是瓶颈)。

相关内容