server端搭建
wget http://rsync.samba.org/ftp/rsync/src/rsync-3.0.7.tar.gz
tar xf rsync-3.0.7.tar.gz
cd rsync-3.0.7
./configure --prefix=/usr/local/rsync
make && make install
修改配置文件
vim /etc/rsyncd.conf
#全局设置
uid = root #守护进程所属的uid,默认是nobody,可能会碰到文件或目录权限问题,可以用root
gid = root
port = 873 #指定监听端口,默认是873,可以自己指定
use chroot = no
max connections = 30
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock 设置rsync运行时lock文件的位置
log file = /var/log/rsyncd.log #记录传输文件的日志
transfer logging = yes #记录传输文件的日志
log format = %t%a%m%f%b #日志格式
syslog facility = local3 #日志级别
timeout = 300
ignore errors = yes #是否忽略错误
list = no #当查看服务器上提供了哪些目录时是否列出来,no比较安全
#模块定义
#主要是定义服务器哪个目录要被同步。
#每个模块都要以[name]形式。这个名字就是在 rsync 客户端看到的名字。
#但是服务器真正同步的数据是通过 path 指定的。可以依次创建多个模块。
#每个模块要指定认证用户、密码文件,但排除并不是必须的。
[script]
read only = yes #只读,也就是客户端只能下载,不能上传
#write only = yes #只写选择,只让客户端到服务器上写入
path = /root/script #需要同步的路径
comment = script #本模块注释,可选
auth users = test #认证的用户
secrets file = /etc/rsync.pas #密码文件路径
hosts allow = 172.96.248.250 #允许访问的IP,可以指定单个IP,也可以指定整个网段,能提高安全性。格式是 ip 与 ip 之间、ip 和网段之间、网段和网段之间要用空格隔开;
exclude = error_log httpd.pid #忽略的文件或目录
[web]
read only = yes
path = /data/www
comment = web
auth users = test
secrets file = /etc/rsync.pas
hosts allow = 172.96.248.250 #白名单
hosts deny = ipaddress/netmask #黑名单
此处需要注意:
(1)默认规则为允许访问,二者都不出现时
(2)只出现hosts allow:定义白名单;但没有被匹配到的由默认规则处理,即为允许
(3)只出现hosts deny:定义黑名单;出现在名单中的都被拒绝
(4)二者同时出现,先检查hosts allow,如果匹配就allow,否则,检查hosts deny 如果匹配则拒绝,如二者均无匹配,则使用默认的,即允许
vim /etc/rsync.pas
test:12345 #账号密码
chmod 600 /etc/rsync.pas
启动服务端rsync
- /usr/local/rsync/bin/rsync --daemon --config=/etc/rsyncd.conf 默认监听873端口
- xinet方式启动
1).修改 /etc/services,加入以下内容,如果已经有可以不加,如果端口改了,需要改掉 873 端口为指定端口
rsync 873/tcp # rsync
rsync 873/udp # rsync
2).修改 /etc/xinetd.d/rsync,主要是要打开rsync這個daemon, 一旦有rsync client要连接時, xinetd会把它转介給 rsyncd(port 873)。
service rsync
{
disable = no
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args = --daemon --config=/etc/rsynd.conf
log_on_failure += USERID
}
3).重启 xinetd
service xinetd restart
client端安装配置
yum install rsync -y #如果yum安装的版本不行,则用源码安装并配置环境变量即可
vim /etc/rsync.pas
123456 #密码
chmod 600 /etc/rsync.pas
rsync -aP --delete /root/script [email protected]::script --password-file=/etc/rsync.pas
rsync 选项
-n:测试,在不确定命令是否能按照意愿执行时,务必要实现测试
-q:--quiet,静默模式
-P |--partial 保留那些因故没有完全传输的文件,以是加快随后的再次传输。
-a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD。
-z, --compress 对备份的文件在传输时进行压缩处理。
-v, --verbose 详细模式输出。
-q, --quiet 精简输出模式。
-r, --recursive 对子目录以递归模式处理。
-l, --links 保留软链结。
-p, --perms 保持文件权限。
-o, --owner 保持文件属主信息。
-g, --group 保持文件属组信息。
-t, --times 保持文件时间信息。
-D, --devices 保持设备文件信息。
-e, --rsh=command 指定使用rsh、ssh方式进行数据同步。
--rsync-path=PATH 指定远程服务器上的rsync命令所在路径信息。
--delete 删除那些接收端还有而发送端已经不存在的文件。
-R, --relative 使用相对路径信息。
-c, --checksum 打开校验开关,强制对文件传输进行校验。
-u, --update 仅仅进行更新,也就是跳过所有已经存在于DST,并且文件时间晚于要备份的文件,不覆盖更新的文件。
--address 绑定到特定的地址。
--config=FILE 指定其他的配置文件,不使用默认的rsyncd.conf文件。
--port=PORT 指定其他的rsync服务端口。
--progress:显示进度条
rsync基于ssh同步
rsync -aP --delete [email protected]:/data/www/webapps /data/www/webapps
#如果想每次同步不输入密码,需要做Linux主机之间免密码登录。
#如果ssh端口不是22,则需要使用如下方式执行
rsync -aP -e 'ssh -p 27209' [email protected]:/root/script /root/script3
如果遇到该报错
bash: rsync: command not found
rsync: connection unexpectedly closed (0 bytes received so far) [receiver]
rsync error: error in rsync protocol data stream (code 12) at io.c(600) [receiver=3.0.6]
请在两台服务器上都执行yum install rsync -y,或者源码安装完后,做一个软连接,让rsync命令能在PATH路径中找到
注意点
1、如果使用命令时只指定源而不指定目标,仅会将源以列表的形式显示而不同步
2、rsync命令使用中,如果源参数的末尾有斜线,只会复制指定目录的内容,而不复制目录本身,没有斜线,则会复制目录本身,包括目录
rsync实时同步配置
rsync+inotify
Rsync安装完毕后,需要安装inotify文件检查软件。同时为了同步的时候不需要输入密码,这样可以使用ssh免密钥方式进行同步。
-
inotify安装
wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
tar xf inotify-tools-3.14.tar.gz
cd inotify-tools-3.14
./configure
make && make install
-
监控脚本
#写一个脚本时刻监控同步目录的变化:
vim auto_inotify.sh
#!/bin/sh
src=/data/webapps/www/
des=/var/www/html/
ip=192.168.0.11
inotifywait -mrq --timefmt '%d/%m/%y-%H:%M' --format '%T %w%f' -e modify,delete,create,attrib ${src} | while read file
do
rsync -aP --delete $src root@$ip:$des
done
#后台一直执行
nohup sh auto_inotify.sh &