(一)环境准备:RHEL6.6
服务器IP:
rsync_server(数据源):192.168.26.130
rsync_client(客户端):192.168.26.131

同步目录:
rsync_server:/app/rsync_server
rsync_client:/app/rsync_client

(二)安装及配置rsync
client客户端配置
1.安装rsync
# yum install rsync xinetd -y
# cp /etc/xinetd.d/rsync{,.bak}---进行rsync文件的备份
# vim /etc/xinetd.d/rsync---编辑文件
------------------------
service rsync
{
disable = no
flags = IPv6
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args = --daemon
log_on_failure += USERID
}
------------------------
# /etc/init.d/xinetd start---将服务启动
2.配置rsync
# vim /etc/rsyncd.conf---自己创建一个文件,官方没有给模板
------------------------
logfile = /var/log/rsyncd.log #日志文件位置,启动rsync后自动产生这个文件,无需提前创建
pidfile = /var/run/rsyncd.pid #pid文件的存放位置
lockfile = /var/run/rsyncd.lock #支持max connections参数的锁文件
secretsfile = /etc/rsync.pass #用户认证配置文件,里面保存用户名称和密码,后面会创建这个文件
motdfile = /etc/rsyncd.Motd #rsync启动时欢迎信息页面文件位置(文件内容自定义)
[app_rsync_client] #自定义名称
path = /app/rsync_client/ #rsync服务端数据目录路径
comment = app_rsync_client #模块名称与[app_rsync_client]自定义名称相同
uid = root #设置rsync运行权限为root
gid = root #设置rsync运行权限为root
port 873
use chroot = no #默认为true,修改为no,增加对目录文件软连接的备份
read only = no #设置rsync服务端文件为读写权限
list = no #不显示rsync服务端资源列表
mac connections = 200
timeout = 600
auth user = rsync #执行数据同步的用户名,可以设置多个,用英文状态下逗号隔开
host allow = 192.168.26.131 #允许进行数据同步的客户端IP地址,可以设置多个,用英文状态下逗号隔开
host deny = 192.168.26.45,192.168.26.46 #禁止数据同步的客户端IP地址,可以设置多个,用英文状态下逗号隔开,先允许后拒绝
------------------------
3.配置rsync同步的账户密码
# vim /etc/rsync.pass
------------------------
rsync:123456
------------------------
4.启动rsync
# chmod 600 /etc/rsyncd.conf
# chmod 600 /etc/rsync.pass
# /etc/init.d/xinetd restart---赋权启动rsync
# service iptables stop---关闭客户端的防火墙
# setenforce 0---将客户端的SELinux设置为Permissive

server服务端配置
1.安装rsync
# yum install rsync xinetd -y
# cp /etc/xinetd.d/rsync{,.bak}
# vim /etc/xinetd.d/rsync---编辑文件
------------------------
service rsync
{
disable = no
flags = IPv6
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args = --daemon
log_on_failure += USERID
}
------------------------
2.配置rsync同步的账户密码
# vim /etc/passwd.txt
------------------------
123456
------------------------
# chmod 600 /etc/passwd.txt
3.测试手动同步
# mkdir -pv /app/rsync_server/&&touch /app/rsync_server/test.txt---在服务器端创建/app/rsync_server目录,并在目录中创建test.txt文件
# service iptables stop---关闭服务器端的防火墙
# setenforce 0---将服务器端的SELinux设置为Permissive
# rsync -avH --port=873 --progress --delete /app/rsync_server/ [email protected]::app_rsync_client --password-file=/etc/passwd.txt
rsync目标端rsync服务端配置的用户名,app_rsync_client目标端rsync服务端配置的模块名称

client客户端验证
1.验证:
# ls /app/rsync_client---此时在客户端发现已经产生了从服务器端传输过来的test.txt文件了
2.其他
# rsync --daemon
这个也可以通过编辑# vim /etc/rc.d/rc.local,将rsync加入实现开机自动启动

(三)安装inotify-tools实现实时触发rsync进行同步
server服务端配置
1.下载安装inotify-tools,记住需要使用epel6的源:
# yum install inotify-tools -y
# rpm -qa inotify-tools---查看其程序是否安装成功
# rpm -ql inotify-tools---查看程序包含的文件
2.配置inotify-tools:
# sysctl -a | egrep -i "max_queued_events|max_user_watches|max_user_instances"---查询显示inotify相关的系统参数
# vim /etc/sysctl.conf---编辑sysctl.conf文件
------------------------
fs.inotify.max_queued_events = 99999999 #inotify队列最大长度,如果值太小,会出现"** Event Queue Overflow **"错误,导致监控文件不准确
fs.inotify.max_user_watches = 99999999 #要同步的文件包含多少目录,可以用:find /app/rsync_server/ -type d | wc -l 统计,必须保证max_user_watches值大于统计结果(这里/app/rsync_server/为同步文件目录)
fs.inotify.max_user_instances = 65535 #每个用户创建inotify实例最大值
------------------------
# sysctl -p---参数立即生效
3.创建实时同步脚本:
# mkdir -p /usr/local/inotify/---创建inotify目录
# vim /usr/local/inotify/rsync.sh---创建一个rsync.sh的脚本文件
------------------------
#!/bin/bash
src_dir="/app/rsync_server/" #源服务器同步目录
dst_dir="app_rsync_client" #目标服务器rsync同步目录模块名称
exclude_dir="/usr/local/inotify/exclude.list" #不需要同步的目录,如果有多个,每一行写一个目录,使用相对于同步模块的路径。例如:不需要同步/app/rsync_server/"目录下的a目录和b目录下面的b1目录
rsync_user="rsync" #目标服务器rsync同步用户名
rsync_passwd="/etc/passwd.txt" #目标服务器rsync同步用户的密码在源服务器的存放路径
dst_ip="192.168.26.131" #目标服务器ip,多个ip用空格分开
rsync_command(){
rsync -avH --port=873 --progress --delete --exclude-from=$exclude_dir $src_dir $rsync_user@$ip::$dst_dir --password-file=$rsync_passwd
}
for ip in $dst_ip;do
rsync_command
done
/usr/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e close_write,modify,delete,create,attrib,move $src_dir \
| while read file;do
for ip in $dst_ip;do
rsync_command
echo "${file} was rsynced" >> /tmp/rsync.log 2>&1
done
done
------------------------
4.赋权并添加开机启动
# chmod +x /usr/local/inotify/rsync.sh---添加可执行权限
# touch /usr/local/inotify/exclude.list---创建脚本中定义的exclude.list文件
# vim /etc/rc.d/rc.local
------------------------
nohup /bin/sh /usr/local/inotify/rsync.sh &
------------------------
5.测试
重启192.168.26.130服务器端后
# cd /app/rsync_server/
# touch test{2..9}

client客户端验证
此时我们在/app/rsync_client目录下便可以看到服务器端实时生成的文件