环境
centso
关闭防火墙与selinux
文件同步
数据同步
本机:cp、ln、dd、dump、mount crond
局域网:scp、sftp、samba、ftp、web
弊端:
- 本地执行
- 完整复制,效率低
- 没有实时同步
文件同步工具RSYNC
核心算法:rsync算法
弱校验:32位
强校验:128位
- Rsync ( remote synchronize )是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件,也可以使用Rsync同步本地硬盘中的不同目录。
- 这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。
- Rsync支持大多数的类Unix系统,无论是Linux、Solaris还是BSD上都经过了良好的测试。此外,它在windows平台下也有相应的版本,比较知名的有cwRsync和Sync2NAS
- RSYNC文件同步同样也没有实时同步功能
总结
优势:
与传统的cp、tar备份方式相比,rsync具有安全性高、备份迅速、支持增量备份等优点,通过rsync可以解决对实时性要求不高的数据备份需求,例如定期的备份文件服务器数据到远端服务器,对本地磁盘定期做数据镜像等。
缺陷:
随着应用系统规模的不断扩大,对数据的安全性和可靠性也提出的更好的要求,rsync在高端业务系统中也逐渐暴露出了很多不足,首先,rsync同步数据时,需要扫描所有文件后进行比对,进行差量传输。如果文件数量达到了百万甚至千万量级,扫描所有文件将是非常耗时的。而且正在发生变化的往往是其中很少的一部分,这是非常低效的方式。其次,rsync不能实时的去监测、同步数据,虽然它可以通过crontab linux守护进程的方式进行触发同步,但是两次触发动作一定会有时间差,这样就导致了服务端和客户端数据可能出现不一致,无法在应用故障时完全的恢复数据。基于以上原因,rsync+inotify组合出现了!
客户端和服务器的区别
- 客户机是发起端,其需要inotify进行监控,服务器是接收端。
rsync 认证口令文件中每一行指定一个"用户名:口令"对,格式为:
# 以 "#" 开始的行为注释行
username:passwd
# 一般来说口令最好不要超过8个字符。
下载
yum -y install rsync #服务器与客户端都需要安装rsync服务
or
http://rsync.samba.org/ftp/rsync/src/rsync-3.0.9.tar.gz
rsync 命令使用
基本格式:rsync [选项] 原始位置 目标位置
-a:归档模式,递归并保留对象属性,等同于 -rlptgoD
-v:显示同步过程的详细(verbose)信息
-z:在传输文件时进行压缩(compress)
-H:保留硬连接文件
-A:保留ACL属性信息
–delete:删除目标位置有而原始位置没有的文件
-r:递归模式,包含目录及子目录中所有文件
-l:对于符号链接文件仍然复制为符号链接文件
-p:保留文件的权限标记-t:保留文件的时间标记
-g:保留文件的属组标记(仅超级用户使用)
-o:保留文件的属主标记(仅超级用户使用)
-D:保留设备文件及其他特殊文件
--protocol=NUM 强制使用指定的老版本协议
rsync -avz 同步源的一个账户@同步源IP:同步源目录 发起端目录 #下行同步
rsync -acz dal@192.168.154.187:/server /client
请注意,':'会使用ssh来远程连接,而'::'以及'rsync://'则用于以tcp方式连接一个rsync daemon服务器,这个需要SRC(源),以及包含模块名字的DEST(目的)
#同步服务器的/server目录里的文件到本地/client目录
rsync -avz 发起端目录 同步源的一个账户@同步源IP:同步源目录 #上行同步
rsync -avz /client/rsync dal@192.168.154.187:/server
#同步本地/client目录中的文件到服务器的/server目录
inotify 实时监控
- Inotify 是一种强大的、细粒度的、异步的文件系统事件监控机制,linux内核从2.6.13起,加入了Inotify支持,通过Inotify可以监控文件系统中添加、删除,修改、移动等各种细微事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,而inotify-tools就是这样的一个第三方软件。
- 在上面章节中,我们讲到,rsync可以实现触发式的文件同步,但是通过crontab守护进程方式进行触发,同步的数据和实际数据会有差异,而inotify可以监控文件系统的各种变化,当文件有任何变动时,就触发rsync同步,这样刚好解决了同步数据的实时性问题。
yum -y install gcc #安装gcc
wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz #安装inotifu-tools
tar -zxf inotify-tools-3.14.tar.gz #解压缩包
./configure && make && make install* #进入解压后目录bing'y
inotifywait:用于持续监控,实时输出结果inotifywatch:用于短期监控,任务完成后再出结果
选项:
-m:表示持续监控
-r:表示递归监控
-q:表示输出数据简化
-e:指定你要监控的哪些数据 例:create(创建),delete(删除),modify(修改),move(移动),多个命令用逗号隔开ctrl+c #退出
inotifywait -mrq -e modify,create,move,delete /server/rsync #实时监控,输出结果
inotifywatch -mrq -e modify,create,move,delete /server/rsync #短期监控,任务完成后出结果
4.1.1、基于ssh的实时同步 RSYNC+inotify
利用inotify有输出这一特性可以进行与脚本的配合,实时监控数据的增删,进行同步
**先进行免密认证
然后在服务器端写脚本
#!/bin/bash
a="/usr/local/bin/inotifywait -mrq -e create /var/www/html/" #监控 /var/www/html/下的create
b="/usr/bin/rsync -avz /server/rsync* 192.168.154.187:/client/rsync"
$a | while read directory event file
do
$b
done
sh /tmp/rsync.sh & #以后台程序执行该脚本
echo "/tmp/rsync.sh " >> /etc/rc.local #将脚本加入开机自启动
linux下inotify api
inotify是Linux内核2.6.13 (June 18, 2005)版本新增的一个子系统(API),它提供了一种监控文件系统(基于inode的)事件的机制,可以监控文件系统的变化如文件修改、新增、删除等,并可以将相应的事件通知给应用程序。该机制由著名的桌面搜索引擎项目beagle引入用于替代此前具有类似功能但存在诸多缺陷的dnotify。
inotify既可以监控文件,也可以监控目录。当监控目录时,它可以同时监控目录及目录中的各子目录及文件的。此外,inotify 使用文件描述符作为接口,因而可以使用通常的文件I/O操作select、poll和epoll来监视文件系统的变化。
inotify 可以监视的文件系统常见事件包括:
IN_ACCESS:文件被访问
IN_MODIFY:文件被修改
IN_ATTRIB,文件属性被修改
IN_CLOSE_WRITE,以可写方式打开的文件被关闭
IN_CLOSE_NOWRITE,以不可写方式打开的文件被关闭
IN_OPEN,文件被打开
IN_MOVED_FROM,文件被移出监控的目录
IN_MOVED_TO,文件被移入监控着的目录
IN_CREATE,在监控的目录中新建文件或子目录
IN_DELETE,文件或目录被删除
IN_DELETE_SELF,自删除,即一个可执行文件在执行时删除自己
IN_MOVE_SELF,自移动,即一个可执行文件在执行时移动自己
通过/proc接口中的如下参数设定inotify能够使用的内存大小:
1、/proc/sys/fs/inotify/max_queue_events
应用程序调用inotify时需要初始化inotify实例,并时会为其设定一个事件队列,此文件中的值则是用于设定此队列长度的上限;超出此上限的事件将会被丢弃;
2、/proc/sys/fs/inotify/max_user_instances
此文件中的数值用于设定每个用户ID(以ID标识的用户)可以创建的inotify实例数目的上限;
3、/proc/sys/fs/inotify/max_user_watches
此文件中的数值用于设定每个用户ID可以监控的文件或目录数目上限;
参考