Rsync实时同步工具
一、rsync是什么
rsync(remote synchronize)是Liunx/Unix下的一个远程数据同步工具。它可通过LAN/WAN快速同步多台主机间的文件和目录,并适当利用rsync算法(差分编码)以减少数据的传输。
rsync算法并不是每一次都整份传输,而是只传输两个文件的不同部分,因此其传输速度相当快。
除此之外,rsync可拷贝、显示目录属性,以及拷贝文件,并可选择性的压缩以及递归拷贝。
二、rsync的工作原理
客户端构造FileList,FileList包含了需要与服务器同步的所有文件信息对name->id(id用来唯一表示文件例如MD5)。
客户端将FileList发送到服务器。
服务器上rsync处理客户端发过来的FileList,构建新的NewFileList。其中根据MD5值比较,删除服务器上已经存在的文件信息对,只保留服务器上不存在或变化的文件。
客户端得到服务器发送过来的NewFileList,然后把NewFileList中的文件重新传输到服务器。
三、rsync优点
1)可以镜像保存整个目录树和文件系统。
2)可以很容易做到保持原来文件的权限、时间、软硬连接等。
3)无需特殊权限即可安装。
4)拥有优化的流程和比较高的文件传输效率。
5)可以使用shell(rsh、ssh)方式来传输文件。
6)支持匿名运行。
7)与scp相比,rsync传输速度绝对远远超过scp的传输速度。
- 在局域网中经常用rsync和scp传输大量mysql数据库文件,发现rsync传输文件速度至少要比scp快20倍以上。
- 所以如果需要在Liunx/Unix服务器之间互传海量数据时,建议选择rsync进行传输。
四、rsync两种认证方式
rsync有两种常用的认证方式,一种是rsync-daemon方式,另外一种是ssh方式。在平时使用过程,我们使用最多的是rsync-daemon方式。 注意:在使用rsync时,服务器和客户端都必须安装rsync程序。
4.1 rsync-daemon认证
rsync在rsync-daemon认证方式下,默认监听TCP的873端口。
rsync-daemon认证方式是rsync的主要认证方式,这个也是我们经常使用的认证方式。并且也只有在此种模式下,rsync才可以把密码写入到一个文件中。
注意:rsync-daemon认证方式,需要服务器和客户端都安装rsync服务,并且只需要rsync服务器端启动rsync,同时配置rsync配置文件。客户端启不启动rsync服务,都不影响同步的正常进行。
4.2 ssh认证
rsync在ssh认证方式下,可通过系统用户进行认证,即在rsync上通过ssh隧道进行传输,类似于scp工具。此时同步操作不在局限于rsync中定义的同步文件夹。
ssh认证方式,不需要服务器和客户端配置rsync配置文件,只需双方都安装rsync服务,并且也不需要双方启动rsync。
五、rsync 常用选项
- 若使用普通用户身份运行 rsync 命令,同步后的文件的属主将改变为这个普通用户身份。
- 若使用超级用户身份运行 rsync 命令,同步后的文件的属主将保持原来的用户身份。
选项 | 说明 |
---|---|
-a, ––archive | #归档模式,表示以递归方式传输文件,并保持所有文件属性,等价于 -rlptgoD (注意不包括 -H) |
-v, ––verbose | #详细输出模式 |
-z, ––compress | #在传输文件时进行压缩处理 |
-r, ––recursive | #对子目录以递归模式处理 |
-H, ––hard-links | #保持硬链接文件 |
-p, ––perms | #保持文件权限 |
-t, ––times | #保持文件时间信息 |
-g, ––group | #保持文件属组信息 |
-o, ––owner | #保持文件属主信息 (super-user only) |
-D | #保持设备文件和特殊文件 (super-user only) |
––exclude=PATTERN | #指定排除一个不需要传输的文件匹配模式 |
––exclude-from=FILE | #从 FILE 中读取排除规则 |
––include=PATTERN | #指定需要传输的文件匹配模式 |
––include-from=FILE | #从 FILE 中读取包含规则 |
––copy-unsafe-links | #拷贝指向SRC路径目录树以外的链接文件 |
––safe-links | #忽略指向SRC路径目录树以外的链接文件(默认) |
––existing | #仅仅更新那些已经存在于接收端的文件,而不备份那些新创建的文件 |
––ignore-existing | #忽略那些已经存在于接收端的文件,仅备份那些新创建的文件 |
-b, ––backup | #当有变化时,对目标目录中的旧版文件进行备份 |
––backup-dir=DIR | #与 -b 结合使用,将备份的文件存到 DIR 目录中 |
––link-dest=DIR | #当文件未改变时基于 DIR 创建硬链接文件 |
––delete | #删除那些接收端还有而发送端已经不存在的文件,让目标目录和源目录数据保持一致 |
––delete-before | #接收者在传输之前进行删除操作 (默认) |
––delete-during | #接收者在传输过程中进行删除操作 |
––delete-after | #接收者在传输之后进行删除操作 |
––delete-excluded | #在接收方同时删除被排除的文件 |
-e, ––rsh=COMMAND | #指定替代 rsh 的 shell 程序 |
––ignore-errors | #即使出现 I/O 错误也进行删除 |
––partial | #保留那些因故没有完全传输的文件,以是加快随后的再次传输 |
––progress | #在传输时显示传输过程 |
-P | #等价于 ––partial ––progress |
––delay-updates | #将正在更新的文件先保存到一个临时目录(默认为 “. |
-l, ––links | #保持符号链接文件 |
-q, ––quiet | #精简输出模式 |
-h, ––human-readable | #输出文件大小使用易读的单位(如,K,M等) |
-n, ––dry-run | #仅测试哪些文件将被传输 |
––list-only | #仅仅列出文件而不进行复制 |
––rsyncpath=PROGRAM | #指定远程服务器上的 rsync 命令所在路径 |
––password-file=FILE | #从 FILE 中读取口令,以避免在终端上输入口令,通常在 cron 中连接 rsync 服务器时使用 |
-4, ––ipv4 | #使用 IPv4 |
-6, ––ipv6 | #使用 IPv6 |
––version | #打印版本信息 |
––help | #显示帮助信息 |
六、rsync三种工作模式
rsync 是一个功能非常强大的工具,其命令也有很多功能选项。rsync 的命令格式为:
1 | 1)本地使用: |
- SRC: 是要复制的源位置
- DEST: 是复制目标位置
- 若本地登录用户与远程主机上的用户一致,可以省略 USER@
- 使用远程 shell 同步时,主机名与资源之间使用单个冒号“:”作为分隔符
- 使用 rsync 服务器同步时,主机名与资源之间使用两个冒号“::”作为分隔符
- 当访问 rsync 服务器时也可以使用 rsync:// URL
- ‘拉’ 复制是指从远程主机复制文件到本地主机
- ‘推’ 复制是指从本地主机复制文件到远程主机
- 当进行“拉”复制时,若指定一个 SRC 且省略 DEST,则只列出资源而不进行复制
- 注意:无论是推送和拉取,rsync命令都是在客户端执行,只是命令的格式不同而已。
七、配置rsync
7.1 rsync服务端配置
sync服务器端需要两个配置文件:rsyncd.conf、rsyncd.password。
其中rsyncd.conf默认存放在/etc/目录下,同时它也是rsync服务器的主配置文件。该文件配置了rsync服务器的控制认证、访问、日志记录等等。而rsyncd.password主要用于存储rsync用户名和密码。
但是在rsync安装完毕后后是不会生成以上这两个配置文件的,需要我们手工进行创建。
rsyncd.conf配置文件内容如下:
1 | [root@service ~]# vi /etc/rsyncd.conf |
- 配置文件创建完毕后,我们来创建密码文件。如下:
1 | [root@service ~]# echo "test:123123">>/etc/rsyncd.password |
- 以上两个文件创建完毕后,我们来创建其对应的目录并授权,如下:权限必须是777
1 | [root@service ~]# mkdir /backup |
- 启动Rsync服务
1 | [root@service ~]# systemctl start rsyncd ; systemctl enable rsyncd |
以上就是rsync服务端的配置。
7.2 rsync客户端配置
rsync客户端配置与服务器端相比差别还是比较大的。
在客户端安装完毕rsync服务后,是不需要启动rsync服务的。我们只需要在客户端创建连接rsync服务器时,验证码用户所需要的密码文件即可。
该密码文件中的密码要与rsync服务器上的密码文件中的密码对应,并且也要与rsync服务器rsyncd.conf配置文件中的认证模块中的用户匹配。
当然该密码文件不创建也是可以的,不创建的话。我们在执行rsync操作时,就需要输入rsync的对应用户的密码。如下:
1 | [root@client ~]# echo "123123">>/etc/rsyncd.password |
以上就是rsync客户端的配置。
八、rsync的启动与关闭
在前面我们讲过rsync-daemon认证方式,需要服务器和客户端都安装rsync服务,并且只需要rsync服务器端启动rsync,同时配置rsync配置文件,客户端启动不启动rsync服务。
rsync-daemon认证方式的启动,如果是源码方式安装的rsync,我们可以使用rsync –daemon来启动rsync。如下:
1 | echo PATH=$PATH:/usr/local/bin/>>/etc/profile |
九、rsync同步示例
9.1 ssh认证用法
- 这种用法最好配置免登,不然每次都要输入密码
1 | #全量,跟scp意思一致 |
1 | #增量示例1 |
- 图示:服务的1.1 客户端1.2
1 | #增量示例2 【--exclude-from=:排除单个或多个文件】 |
- 图示:服务的1.1 客户端1.2
1 | #增量示例3 【--exclude=:只能排除单个文件】 |
- 图示:服务的1.1 客户端1.2
9.2 daemon认证用法 (常用)
1 | #从服务器上下载文件(拉取) |
十、rsync + inotify实时同步
10.1 Inotify是什么?
Inotify 是一种强大的、细粒度的、异步的文件系统事件监控机制,linux内核从2.6.13起,加入了Inotify支持,通过Inotify可以监控文件系统 中添加、删除,修改、移动等各种细微事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,而inotify-tools就是这样 的一个第三方软件。inotify可以监控文件系统的各种变化,当文件有任何变动时,就触发rsync同步,这样刚好解决了同步数据的实时性问题。
10.2 案例实操
1 | 安装inotify: |