1、rsync
man一下sync,就会发现:sync-flush file system buffers,它是一个把缓冲区中的数据同步到文件系统中的一个命令;而rsync其实就是remote rsync,它是一个远程同步工具,兼具cp和scp的功能,rsync命令的使用几乎和scp是一样一样的。rsync是通过超级守护进程xinetd进行触发同步的。
1)优点:与cp和scp相比来说,rsync更快,更安全,支持增量备份。rsync在数据同步的过程中,不像cp一样全部都拷贝,而是先去比对特征码,只有不一样的才会去拷贝,如果一样了,就不需再做多余操作。通过使用rsync+crontab可以解决对实时性要求不是太高的场景。
2)缺点:在这个大数据年代,如果数据量非常大,你每做一次任务计划,rsync都会先去遍历目标目录,把所有数据做一次特征码比对,然后进行差量传输,这个过程会是很漫长的,对于那些要求实时性更新比较高的企业来说,无疑是一场噩梦。rsync+inotify组合能够实时的去监控我们的文件系统,只有在数据改变时才会触发它去同步!
rsync有4种模式
1.本地模式。
2.远程shell模式
3.查询模式
4.C/S模式
2、inotify
Inotify 是一种强大的、细粒度的、异步的文件系统事件监控机制,linux内核从2.6.13起,加入了Inotify支持,通过Inotify可以监控文件系统中添加、删除,修改、移动等各种细微事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,而inotify-tools就是这样的一个第三方软件。
3、rsync+inotify 好处
1)服务器性能:rsync+crontab会定时去检查是否有文件更新,这势必会造成服务器性能下降;而rsync+inotify组合是触发式更新,只有在数据文件有变化时,才会去更新,因此相对前者而言,是提高了服务器性能。
2)数据实时性:rsync+crontab是周期性任务计划,不能保证数据的实时性;rsync+inotify组合是触发式更新,只要有数据变化,就立刻同步更新。
rsync命令是快速、多用、远程和本地文件复制工具;
命令语法格式:
Local: rsync [OPTION...] SRC... [DEST]
Access via remote shell:
Pull: rsync [OPTION...] [[email protected]]HOST:SRC... [DEST]
Push: rsync [OPTION...] SRC... [[email protected]]HOST:DEST
Access via rsync daemon:
Pull: rsync [OPTION...] [[email protected]]HOST::SRC... [DEST]
rsync [OPTION...] rsync://[[email protected]]HOST[:PORT]/SRC... [DEST]
Push: rsync [OPTION...] SRC... [[email protected]]HOST::DEST
rsync [OPTION...] SRC... rsync://[[email protected]]HOST[:PORT]/DEST
选项:
-v, --verbose:冗长信息;
-r, --recursive:对目录递归;
1.本地模式
rsync -rv /etc/passwd ./
拷贝passwd 到当前目录
2.远程shell模式
rsync -rv /etc/passwd 172.18.11.12:/tmp
把passwd拷贝到远程主机上,类似于scp命令需要用户密码;
3.列表模式
rsync -r 172.18.11.12:/tmp
查看远程目录下的文件
重点是第四种模式,实现数据同步:
4.C/S模式,数据同步:
实验环境:
master:172.18.11.11
slave:172.18.11.113
实验目标:
实现master主机的/var/ftp/目录下只要有文件变化(可定义),会实时同步到slave主机上的/home/ftp目录下。
在slave端:
]# vim /etc/rsyncd.conf
建立密码文件 /etc/rsyncd.pass 如下格式,并确保权限为600或400
]# vim /etc/rsyncd.pass
]# chmod 600 /etc/rsyncd.pass
启动守护进程
]# rsync --daemon
]# netstat -tnlp|grep rsync
查看873端口监听;
在master端:
]# vim /etc/rsyncd.pass
注意:此密码文件只输入在slave端设置的密码即可;
手动测试,master端passwd文件是否能同步到slave端设定的目录中;
]# rsync -avz /var/ftp/pub/passwd [email protected]::ftp --password-file=/etc/rsyncd.pass
解释:
root为slave端指定的用户;
172.18.11.113为slave端地址;
/etc/rsyncd.pass为存放slave端设置的指定用户的密码;
可在slave端的同步目录查看是否收到passwd文件;
安装inotify-tools
]# yum -y install inotify-tools
编写监控脚本并加载到后台执行:
]# vim /root/rsync.sh
将脚本加入后台执行
]# sh inotify.sh &
实时同步测试:
在master端:
]# for a in `seq 200`;do touch $a;done
创建200个文件;
]# ll --time-style=full-iso
再到slave端查看:
]# ll --time-style=full-iso /home/ftp
实现了数据实时同步。