一、简介
认识
Rsync是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。rsync使用所谓的"Rsync算法"来使本地和远程两个主机之间的文件达到同步,这个算法只传递两个文件的不同部分,而不是每次都整份传递,因此速度很快。
原理
Rsync本来是用于替代rcp的一个工具,目前由sync.samba.org维护,所以rsync.conf文件格式类似于samba的主配置文件。
Rsync可以通过rsh或ssh使用,也能以daemon的形式运行,在以daemon形式运行时Rsync server会打开一个873端口,等待客户端链接。
连接时,Rsync server会检查口令是否相符,若通过口令查核,则可以开始文件传输。第一次连通完成时,会把整个文件传输一次,以后就只需进行增量备份。
特点
- 可以镜像保存整个目录数和文件系统;
- 可以很容易做到保持原来文件的权限、时间、软硬链接等;
- 无需特殊权限即可安装;
- 优化的流程,文件传输效率高;
- 可以使用rsh、ssh等方式来传输文件,当然也可以通过直接的socket连接;
- 支持匿名传输;
二、ssh模式
本地IP:192.168.122.188
本地间传输:
rsync -av src/ dest/ //将src目录下所有文件同步至dest下
rsync -av src dest/ //将src目录包括自己整个同步至dest
rsync -avR src/ dest/ //将src目录包括自己同步至dest,等同于src不加/的状态
局域网间同步:
rsync -av src/ 192.168.122.122:/data //同步目录下文件到远程目录
rsync -av 192.168.122.122:/data/ src/ //同步远程文件到本地
rsync -av src 192.168.122.122:/data //同步整个目录
rsync -av —delete src/ 192.168.122.122:/data //从目标文件里面删除无关文件
局域网指定用户同步
rsync -av src ‘-e ssh -l root’ 192.168.122.122:/data
rsync -av 192.168.122.122:/data/ ‘-e ssh -l root -p 22’ dest/
三、daemon 模式
本地ip:192.168.122.188
1.服务启动方式
对于负荷较重的rsync服务器应该使用独立运行方式
yum install rsync xinetd
vim /etc/xinetd.d/rsync. //配置托管服务,将下乡改为no
disable = no
/etc/init.d/xinetd start //启动托管服务xinetd
chkconfig rsync on
netstat -ntpl | grep 873 查看服务是否启动
2.配置详解
两种rsync服务运行方式都需要配置rsync.conf,其格式类似于samba的主配置文件
全局参数:
- 在全局参数部分也可以定义模块参数,这是该参数的值就是所有模块的默认值;
- address:在独立运行时,用于指定服务器运行的IP地址;由xinetd运行时将忽略此参数,使用命令行上的-address选项替代。默认本地所有IP;
- port:指定rsync守护进程监听的端口号,由xinted运行时忽略此参数,使用命令行-port选项替代。默认873;
- motd file:指定一个消息文件,当客户连接服务器时该文件的内容显示给客户;
- pid file:rsync的守护进程将其PID写入指定文件;
- log file:指定rsync守护进程的日志文件,而不将日志发送给syslog;
- syslog facility:指定rsync发送给syslog的时的消息级别;
- socket options:指定自定义TCP选项;
- lockfile:指定rsync的锁文件存放路径;
- timeout=600:超时时间;
模块参数:
模块参数主要用于定义rsync服务器哪个目录要被同步。模块声明的格式必须为[module]形式,这个名字就是在rsync客户端看到的名字,类似于samba服务器提供的共享名。而服务器真正同步的数据是通过path来指定的。
基本模块参数
- path:指定当前模块在rsync服务器上的同步路径,该参数是必须指定的;
- comment:给模块指定一个描述,该描述连同模块名在客户端连接得到模块列表时显示给客户;
模块控制参数 - use chroot=:默认为true,在传输文件之前首先chroot到path参数所制定的目录下;优点,安全;缺点,需要root权限,不能备份指向path外部的符号链接所指向的目录文件;
- uid=:指定该模块以指定的UID传输文件;默认nobody;
- gid=:指定该模块以指定的GID传输文件;默认nobody;
- max connections:最大并发连接数,0为不限制;
- lock file:指定支持max connections参数的锁文件。默认/var/run/rsync.lock;
- list:指定当前客户请求列出可以使用的模块列表时,该模块是否应该被列出。默认为true,显示;
- read only=:只读选择,也就是说,不让客户端上传文件到服务器上。默认为true;
- write only=:只写选项,也就是说,不让客户端从服务器上下载文件。默认为false;
- ignore errors:忽略IO错误。默认true;
- ignore nonreadable:指定rsync服务器完全忽略那些用户没有访问权限的文件。这对于在需要备份的目录中有些不应该被备份者获得的文件时是有意义的。默认为false;
- timeout=:该选项可以覆盖客户指定的IP超时时间。从而确保rsync服务器不会永远等待一个崩溃的客户端。对于匿名rsync服务器来说,理想的数字是600(单位为秒)。默认为0(未限制);
- dont compress:用来指定那些在传输之前不进行压缩处理的文件。该选项可以定义一些不允许客户对该模块使用的命令选项列表。必须使用选项全名,而不能是简称。当发生拒绝某个选项的情况时,服务器将报告错误信息并退。例如,要防止使用压缩,应该是:”dont compress = .gz .tgz .zip .z .rpm .deb .iso .bz2 .tbz”
模块文件筛选参数
- exclude:指定多个由空格隔开的多个文件或目录(相对路径),并将其添加到exclude列表中。这等同于在客户端命令中使用-exclude来指定模式;
- exclude from:指定一个包含exclude规则定义的文件名,服务器从该文件中读取exclude列表定义
- include:指定多个由空格隔开的多个文件或目录(相对路径),并将其添加到include列表中。这等同于在客户端命令中使用-include来指定模式;
- include from:指定一个包含include规则定义的文件名,服务器从该文件中读取include列表定义;
模块用户认证参数
- auth users:指定由空格或逗号分隔的用户名列表,只有这些用户才允许连接该模块(和系统用户没有任何关系)。用户名和口令以明文的方式存放在secrets files参数指定的文件中。默认为匿名方式;
- secrets file:指定一个rsync认证口令文件。只有在auth users被定义时,该文件才起作用。问价权限必须是600
- strict modes:指定是否检测口令文件的权限。为true则口令文件只能被rsync服务器运行身份的用户访问,其他任何用户不可以访问该文件。默认为true;
模块访问控制参数
- hosts allow:用一个主机列表指定哪些主机客户允许连接该模块。不匹配主机列表的主机将被拒绝。默认值为*;
- hosts deny:用一个主机列表指定哪些主机客户不允许连接该模块;
模块日志参数
- transfer logging:使rsync服务器将传输操作记录到传输日志文件。默认为false;
- log format:指定传输日志文件的字段。默认为”%o %h[%a] %m (%u) %f %l”,设置log file参数时,在日志每行的开始会追加”%t [%p]“;
可以使用的日志格式定义符如下所示:
%o:操作类型:send或recv;
%h:远程主机名;
%a:远程IP地址;
%m:模块名:
%u:认证的用户名(匿名是是null);
%f:文件名;
%l:文件长度字符数;
%p:该次rsync会话的PID;
%P:模块路径;
%t:当前时间;
%b:实际传输的字节数;
%c:当发送文件时,记录该文件的检验码;
3.服务端配置
vim /etc/rsync.conf
为rsyncd服务配置文件,默认没有,需自己编辑
- uid = root:rsync运行权限为root
- gid = root:rsync运行权限为root
- use chroot = no:是否让进程离开工作目录;
- max connections = 5:最大并发连接数,0为不限制;
- timeout = 600:超时时间;
- pid file = /var/run/rsyncd.pid:指定rsync的pid存放路径;
- lockfile = /var/run/rsyncd.lock:指定rsync的锁文件存放路径;
- log file = /var/log/rsyncd.log:指定rsync的日志存放路径;
- [web1] :模块名称;
- path = /data/test/src:该模块存放文件的基础路径;
- ignore errors = yes:忽略一些无关的IO错误;
- read only = no:客户端可以上传;
- write only = no:客户端可以下载;
- hosts allow = 192.168.122.122:允许连接的客户端主机IP;
- hosts deny= :黑名单, 表示任何主机;
- list = yes:允许模块显示;
- auth users = web:认证此模块的用户名;
- secrets files = /etc/web.passwd:指定存放”用户名:密码“格式的文件;
mkdir /data/test/src
//创建基础目录
midir /data/test/src/george
touch /data/test/src/{1,2,3}
echo “web:123” > /etc/web.passwd
//创建密码文件
service xinetd restart
测试
rsync参数
-a:全部参数,相当于-rlptgoD;
-r:递归
-l:拷贝链接文件;
-i:列出rsync服务器中文件;
-p:保持文件原有权限;
-t:保持文件原有时间;
-g:保持文件原有用户组;
-o:保持文件原有属主;
-D:块设备文件;
-z:传输是压缩;
-P:传输进度;
-v;传输时的进度等信息,和-P类似;
数据实时同步
rsync + inotify-tools
参照链接:http://t.csdn.cn/A80di