AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 4048
Accepted
sal
sal
Asked: 2009-05-05 06:46:30 +0800 CST2009-05-05 06:46:30 +0800 CST 2009-05-05 06:46:30 +0800 CST

提高 rsync 备份性能

  • 772

假设一个系统总是有主副本,另一个系统总是有一个最近的副本(少于 48 小时)

此外,要扩展这种方法以处理数十台机器来推动这些变化,还需要做些什么呢?

backup unix rsync mirror
  • 6 6 个回答
  • 6760 Views

6 个回答

  • Voted
  1. Best Answer
    Steve Schnepp
    2009-05-05T07:01:24+08:002009-05-05T07:01:24+08:00

    如果 :

    • 您的文件的修改时间是正确的
    • 文件不是很大
    • 不能错过任何推送(或者有某种积压处理)

    您可以使用find -ctime或file -cnewer列出自上次执行以来更改的文件,并仅复制修改后的文件(只是一个美化的差异推送)。

    这对于多个主机来说非常好:只需在源上执行差异 tar,然后在所有主机上解压缩它。

    它给了你类似的东西:

    find -type f -cnewer /tmp/files_to_send.tar.gz > /tmp/files_to_send.txt
    tar zcf /tmp/files_to_send.tar.gz --files-from /tmp/files_to_send.txt 
    for HOST in host1 host2 host3 ...
    do
        cat /tmp/files_to_send.tar.gz | ssh $HOST "tar xpf -"
    done
    

    剧本已经精炼,但你明白了。

    • 6
  2. pjz
    2009-05-05T06:50:20+08:002009-05-05T06:50:20+08:00

    假设您正在重新同步的数据尚未压缩,打开压缩 (-z) 可能会有助于传输速度,但代价是两端都需要一些 CPU。

    • 4
  3. mogsie
    2012-06-01T15:18:27+08:002012-06-01T15:18:27+08:00

    rsync 有一种方法可以进行断开连接的副本。换句话说,rsync 可以(在概念上)区分目录树并生成一个补丁文件,然后您可以将其应用于与原始源相同的任意数量的文件。

    它要求您使用 master 调用 rsync 并使用--write-batch;进行镜像。它产生一个文件。然后将此文件传输到任意数量的其他目标,然后使用--read-batch.

    如果您在与主服务器相同的机器上保留上次 rsynced 状态的本地副本(即镜像现在看起来的副本),您可以在主服务器上生成此“补丁”,甚至无需联系任何镜像:

    在主上:

    rsync --write-batch=my-batch.rsync /master/data /current/mirror
    

    添加您想要的任何其他选项。这将做两件事:

    1. 它会做出/current/mirror改变来反映/master/data
    2. 它将创建一个二进制补丁文件(或批处理文件)my-batch.rsync供以后使用。

    将my-batch.rsync文件从主服务器传输到所有镜像,然后在镜像上,应用补丁可以这么说:

    rsync --read-batch=my-batch.rsync /local/mirror
    

    这种方法的好处:

    • 主人没有被淹没
    • 无需同时协调/访问主/镜像
    • 具有不同权限的不同人可以在 master 和 mirror(s) 上执行工作。
    • 无需 TCP 通道(ssh、netcat 等;文件可以通过电子邮件发送;-))
    • 离线镜像可以稍后同步(只需将它们上线并应用补丁)
    • 所有镜像都保证是相同的(因为它们应用了相同的“补丁”)
    • 所有镜像都可以同时更新(因为--read-batch镜像本身只有 cpu/io 密集型)
    • 3
  4. Rodney Amato
    2009-05-06T01:33:22+08:002009-05-06T01:33:22+08:00

    当您将 rsyncing 作为备份方法时,您将遇到的最大问题是如果您有很多要备份的文件。Rsync 可以毫无问题地处理大文件,但是如果您要备份的文件数量太大,那么您会注意到 rsync 不会在合理的时间内完成。如果发生这种情况,您将需要将备份分解为更小的部分,然后循环这些部分,例如

    find /home -mindepth 1 -maxdepth 1 -print0 | xargs -0 -n 1 -I {} -- rsync -a -e ssh {} backup@mybackupserver:/backup/
    

    或压缩文件集以减少文件数量。

    至于让数十台机器获得这些更改的镜像,这取决于备份需要多新鲜。一种方法是将更改从主服务器镜像到备份服务器,然后让其他服务器通过初始备份服务器上的 rsync 守护程序将其更改从备份服务器中拉出,然后调度其他服务器以稍微拉取不同时间或通过脚本使用无密码 ssh 连接到每台服务器并告诉他们提取备份的新副本,这将有助于防止您的初始备份服务器不堪重负 - 但您是否会遇到那么多麻烦将取决于关于您有多少其他机器提取备份副本。

    • 2
  5. gbjbaanb
    2009-06-02T08:48:52+08:002009-06-02T08:48:52+08:00

    如果您要传输具有大量更改的非常大的文件,请使用 --inplace 和 --whole-file 选项,我将它们用于我的 2Gb VM 映像,它有很大帮助(主要是因为 rsync 协议没有做太多通过这些文件传递增量数据)。我不建议在大多数情况下使用这些选项。

    使用 --stats 查看使用 rsync 增量协议传输文件的情况。

    • 2
  6. Jackalheart
    2009-06-02T09:00:31+08:002009-06-02T09:00:31+08:00

    另一种策略是使 ssh 和 rsync 更快。如果您正在通过受信任的网络(阅读:私有),则不需要加密实际的有效负载。您可以使用HPN ssh。此版本的 ssh 仅加密身份验证。此外,rsync 版本 3 在构建文件列表时开始传输文件。这当然比 rsync 版本 2 节省了大量时间。我不知道这是否是您想要的,但我希望它有所帮助。此外,rsync 确实以某种方式支持多播,但我不会假装理解如何。

    • 2

相关问题

  • 更改 PHP 的默认配置设置?

  • IIS 6.0 (Windows Server 2003) 备份的最佳实践?

  • 10TB数据和3台服务器的备份解决方案

  • 最佳混合环境(OS X + Windows)备份?[关闭]

  • 如何从 SQL Server 2008 中的备份中排除索引

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve