Rsync(remote synchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件,也可以使用 Rsync 同步本地硬盘中的不同目录。
Rsync 是用于取代rcp的一个工具,Rsync使用所谓的 “Rsync 算法” 来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。您可以参考 How Rsync Works A Practical Overview 进一步了解 rsync 的运作机制。
Rsync支持大多数的类Unix系统,无论是Linux、Solaris还是BSD上都经过了良好的测试。此外,它在windows平台下也有相应的版本,比较知名的有cwRsync和Sync2NAS。
Rsync 的初始作者是 Andrew Tridgell 和 Paul Mackerras,它当前由 维护。
Rsync的基本特点如下:
1. 可以镜像保存整个目录树和文件系统;
2. 可以很容易做到保持原来文件的权限、时间、软硬链接等;
3. 无须特殊权限即可安装;
4. 优化的流程,文件传输效率高;
5. 可以使用rcp、ssh等方式来传输文件,当然也可以通过直接的socket连接;
6. 支持匿名传输,以方便进行网站镜像。
在使用 rsync 进行远程同步时,可以使用两种方式:远程 Shell 方式(建议使用 ssh,用户验证由 ssh 负责)和 C/S 方式(即客户连接远程 rsync 服务器,用户验证由 rsync 服务器负责)。
无论本地同步目录还是远程同步数据,首次运行时将会把全部文件拷贝一次,以后再运行时将只拷贝有变化的文件(对于新文件)或文件的变化部分(对于原有文件)。
rsync 在首次复制时没有速度优势,速度不如 tar,因此当数据量很大时您可以考虑先使用 tar 进行首次复制,然后再使用 rsync 进行数据同步。
inotify-tools+rsync实时同步文件安装和配置
CentOS 6.5下Rsync远程同步
二、系统环境
系统平台:CentOS release 6.3 (Final)
rsync 版本:rsync-3.0.9-2.el6.rfx.x86_64.rpm
rsync 服务器:TS-DEV (172.16.1.135)
rsync 客户端:TS-CLIENT (172.16.1.136)
三、服务器端安装rsync服务
3.1. 检查rsync 是否已经安装
# rpm -qa|grep rsync
若已经安装,则使用rpm -e 命令卸载。
3.2. 下载RPM包
# wget
3.3. 安装rsync
# rpm -ivh rsync-3.0.9-2.el6.rfx.x86_64.rpm
四、配置 rsync 服务
4.1. 配置 rsync 服务器的步骤
首先要选择服务器启动方式
对于负荷较重的 rsync 服务器应该使用独立运行方式
对于负荷较轻的 rsync 服务器可以使用 xinetd 运行方式
创建配置文件 rsyncd.conf
对于非匿名访问的 rsync 服务器还要创建认证口令文件
4.2. 以 xinetd 运行 rsync 服务
CentOS 默认以 xinetd 方式运行 rsync 服务。rsync 的 xinetd 配置文件 在 /etc/xinetd.d/rsync。要配置以 xinetd 运行的 rsync 服务需要执行如下的命令:
# chkconfig rsync on # service xinetd restart
管理员可以修改 /etc/xinetd.d/rsync 配置文件以适合您的需要。例如,您可以修改配置行
server_args = --daemon
在后面添加 rsync 的服务选项。
4.3. 独立运行 rsync 服务
最简单的独立运行 rsync 服务的方法是执行如下的命令:
# /usr/bin/rsync --daemon
您可以将上面的命令写入 /etc/rc.local 文件以便在每次启动服务器时运行 rsync 服务。当然,您也可以写一个脚本在开机时自动启动 rysnc 服务。
4.4. 配置文件 rsyncd.conf
两种 rsync 服务运行方式都需要配置 rsyncd.conf,其格式类似于 samba 的主配置文件。 配置文件 rsyncd.conf 默认在 /etc 目录下。为了将所有与 rsync 服务相关的文件放在单独的目录下,可以执行如下命令:
# mkdir /etc/rsyncd # touch /etc/rsyncd/rsyncd.conf # ln -s /etc/rsyncd/rsyncd.conf /etc/rsyncd.conf配置文件 rsyncd.conf 由全局配置和若干模块配置组成。配置文件的语法为:
模块以 [模块名] 开始
参数配置行的格式是 name = value ,其中 value 可以有两种数据类型:
字符串(可以不用引号定界字符串)
布尔值(1/0 或 yes/no 或 true/false)
以 # 或 ; 开始的行为注释
\ 为续行符
全局参数