远程数据同步----Rsync + inodify

								Rsync + inodify
########################################Rsync远程同步################################
--配置rsync源服务器
1.安装rsync服务
[root@source ~]# rpm -qa | grep rsync
rsync-3.1.2-4.el7.x86_64
2.修改配置文件
[root@source ~]# vim /etc/rsyncd.conf
uid = nobody
gid = nobody
use chroot = yes				'//禁锢在源目录'
address=192.168.100.140			'//监听地址,源地址'
port 873						'//监听端口号'
log file= /var/log/rsyncd.log	'//日志文件位置'
pid file= /var/run/rsyncd.pid	'//存放进程ID的文件位置'
hosts allow 192.168.100.0/24	'//允许访问的客户机地址'
......
[wwwroot]						'//共享模块名称'
path = /var/www/html			'//源目录的实际路径'
comment = www.kgc.com
read only = no					'//是否只读'					
dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2	'//同步时不在压缩的文件类型'
auth users = backuper			'//授权账户'
secrets file = /etc/rsyncd_users.db							'//存放账户信息的数据文件'
3.创建用户密码文件
[root@source ~]# vim /etc/rsyncd_users.db					'//创建存放账户信息的数据文件'
backuper:123456												'//采用“用户名:密码”的记录格式,每行一个用户记录独立的账号数据,不依赖于系统账号'
[root@source ~]# chmod 600 /etc/rsyncd_users.db 			'//给数据文件设置权限'
4.创建共享目录,这里选择apache的站点目录
[root@source ~]# yum install -y httpd
5.启动rsync服务并查看端口
[root@source ~]# rsync --daemon
[root@source ~]# netstat -ntap | grep rsync
tcp        0      0 192.168.100.140:873     0.0.0.0:*               L 10413/rsync         
[root@source ~]# kill 10413
[root@source ~]# netstat -ntap | grep rsync
[root@source ~]# rsync --daemon
[root@source ~]# netstat -ntap | grep rsync
tcp        0      0 192.168.100.140:873     0.0.0.0:*               L 10437/rsync         
6.共享目录下创建文件,共享给客户机
[root@source ~]# cd /var/www/html
[root@source html]# vim index.html
[root@source html]# cp index.html  web.html
[root@source html]# iptables -F
[root@source html]# setenforce 0

--客户机配置
1.关闭防火墙
[root@client ~]# iptables -F
[root@client ~]# setenforce 0
2.同步数据
[root@client ~]# rsync -avz backuper@192.168.100.140::wwwroot /opt				'第一种方法把140的源下的wwwroot模块共享到客户机的/opt下'
Password:
[root@client ~]# ls /opt
index.html  web.html
[root@client opt]# rm -ef *.html
[root@client opt]# rsync -avz rsync://backuper@192.168.100.140/wwwroot /opt		"第二种方法和上面语句功能一样"
Password:
3.创建免密同步且客户机同步的目录多余文件删除
[root@client opt]# vim /etc/server.pass
[root@client opt]# chmod 600 /etc/server.pass 
[root@client opt]# rsync -avz --delete --password-file=/etc/server.pass backuper@192.168.100.140::wwwroot /opt/
[root@client opt]# ls
index.html  web.html

#############################实时同步##################################
--源服务器配置
1.修改rsync配置文件,添加
[root@source html]# vi /etc/rsyncd.conf 
read only = no '//改为no'
2.重启服务
[root@source html]# kill `cat /var/run/rsyncd.pid`	'//关闭rsync服务'
[root@source html]# netstat -ntap |grep rsync
[root@source html]# rsync --daemon	'//开启rsync服务'
[root@source html]# netstat -ntap |grep rsync
tcp        0      0 192.168.233.131:873     0.0.0.0:*               LISTEN      88302/rsync         
[root@source html]# chmod 777 /var/www/html

--客户机配置
1.修改内核文件
[root@client opt]# cat /proc/sys/fs/inotify/max_queued_events 	'//监控队列大小'
16384	
[root@client opt]# cat /proc/sys/fs/inotify/max_user_instances	'//最多监控实例数'
128	
[root@client opt]# cat /proc/sys/fs/inotify/max_user_watches 	'//每个实例最多监控文件数'
8192
[root@client opt]# vi /etc/sysctl.conf
[root@client opt]# sysctl -p									"使内核文件,生效"
fs.inotify.max_queued_events = 32768
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576

2.上传压缩包finalshell压缩包
[root@client opt]# mount.cifs //192.168.100.140/qq-Download  /mnt			"远程挂载的目录里有finalshell远程工具"
[root@client opt]# cd /mnt
3.客户端安装inotify-tools辅助工具
[root@client mnt]# tar zxf inotify-tools-3.14.tar.gz -C /opt
[root@client mnt]# cd /opt/inotify-tools-3.14/
[root@client inotify-tools-3.14]# yum install gcc gcc-c++ -y
[root@client inotify-tools-3.14]# ./configure 
[root@client inotify-tools-3.14]# make && make install
--重新打开一个终端
[root@client ~]# inotifywait -mrq -e modify,create,move,delete  /var/www/html	'//运行持续监控监控'
inotifywait:用于持续监控,实时输出结果
inotifywatch:用于短期监控,任务完成后再出结果

--客户机编辑脚本监控共享目录变化并启动

[root@client ~]# vim /opt/inotify.sh 			"新开一个客户端创建"
#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e create,delete,move,modify,attrib,move,delete /var/www/html/"
RSYNC_CMD="rsync -azH --delete --password-file=/etc/server.pass /var/www/html/ backuper@192.168.100.140::wwwroot/"

$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
    if [ $(pgrep rsync | wc -l) -le 0 ] ; then
        $RSYNC_CMD
#       echo "${FILE} was rsynced" >>/opt/inotify_rsync.log

    fi
done

[root@client ~]# chmod 755 /opt/inotify.sh 
[root@client ~]# chmod 777 /var/www/html
[root@client ~]# chmod +x /opt/inotify.sh 
[root@client ~]# cd /opt
[root@client opt]# ./inotify.sh 	'//执行脚本进行监控'
-重新打开终端,测试rsync上传同步
[root@client html]# touch 456.txt
[root@client html]# ls
123.txt  456.txt
[root@source html]# ls
123.txt  456.txt

[root@client html]# rm -rf 123.txt 
[root@client html]# ls
456.txt
[root@source html]# ls
456.txt


'//查看刚刚运行的脚本监控'
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1052) [sender=3.0.9]
'//发现会有这个报错,但是文件是正常传过去的,这里的这个报错我没有解决掉,如果有朋友解决了可以私信我或者评论告诉我,多谢!'