标签 rsync 下的文章

Rsync(remote synchronize)是一个远程数据同步工具,它可以将一个目录的文件快速地同步到另一个目录,还可以通过网络快速同步多台主机间的文件。rsync 使用所谓的“rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。

Rsync 工作模式

一般而言,rsync 是 C/S 模型的一个软件,它既是客户端程序也是服务端程序。也就是说 rsync 需要启动一个守护进程(daemon)来接收客户端的请求,默认监听在 TCP 873 端口。

rsync 也支持独立使用以及配合 SSH 通道来传输数据,下面会有几种用法的详细说明。

Rsync 适用场景

  • rsync 在同步文件时需要非常频繁的计算文件的校验码,因此 rsync 会占用一定的 CPU 资源。

    如果不希望 Rsync 进行增量文件传输,则使用 --whole-file 参数显式指定为全量传输。

  • rsync 不适合对数据库文件进行实时同步

    像数据库文件这样的大文件,且是频繁访问的文件,如果使用rsync实时同步,发送端要计算、比较的数据块校验码非常多,cpu会长期居高不下,从而影响数据库提供服务的性能。另一方面,接收端每次都要从巨大的basis file(一般提供服务的数据库文件至少都几十G)中复制大部分相同的数据块重组新文件,这几乎相当于直接 cp了一个文件,它一定无法扛住巨大的io压力,再好的机器也扛不住。

    所以,对频繁改变的单个大文件只适合用rsync偶尔同步一次,也就是备份的功能,它不适合实时同步。像数据库文件,要实时同步应该使用数据库自带的replication功能。

  • 可以使用 rsync 对大量小文件进行实时同步
  • 由于rsync 是增量同步,所以对于接收端已经存在的和发送端相同的文件,发送端是不会发送的,这样就使得发送端和接收端都只需要处理少量的文件,由于文件小,所以无论是发送端的 CPU 还是接收端的 IO 都不是问题。

    但是,rsync 的实时同步功能是借助工具来实现的,如 inotify+rsync,sersync,所以这些工具要设置合理,否则实时同步一样效率低下,不过这不是 rsync 导致的效率低,而是这些工具配置的问题。

- 阅读剩余部分 -