Inofity-tools+Rsync实施复制实战
标签:Inofity,Rsync,--,data,31,rsync,nfs,root,tools From: https://www.cnblogs.com/chunjeh/p/17594406.html一、先准备rsyncd服务环境
1.快速的部署rsyncd服务端 #!/bin/bash yum install rsync -y cat > /etc/rsyncd.conf << 'EOF' uid = www gid = www port = 873 fake super = yes use chroot = no max connections = 200 timeout = 600 ignore errors read only = false list = false auth users = rsync_backup secrets file = /etc/rsync.passwd log file = /var/log/rsyncd.log [backup] comment = chaoge rsync backup! path = /backup EOF useradd -u 1000 -M -s /sbin/nologin www mkdir -p /{backup,data} chown -R www:www /{backup,data} echo "rsync_backup:yuchao666" > /etc/rsync.passwd chmod 600 /etc/rsync.passwd systemctl start rsyncd 2.执行脚本部署服务端的rsync bash instal_rsync.sh
二、部署inotify-tools软件
内核检查
[root@nfs-31 ~]#uname -r 3.10.0-862.el7.x86_64 脚本通用型,健壮性 还有内核参数检查, 本质上是linux支持inotify机制 在性能还可以优化,支持更高的文件并发数 #检测多少个文件 ,文件内容大量的发生变化,inotify机制能同时检测多少文件 这个参数的优化,就是调整linux的几个文件 [root@nfs-31 ~]#ls -l /proc/sys/fs/inotify/ total 0 -rw-r--r-- 1 root root 0 Apr 20 20:08 max_queued_events -rw-r--r-- 1 root root 0 Apr 20 20:08 max_user_instances -rw-r--r-- 1 root root 0 Apr 20 20:08 max_user_watches 系统文件解释 max_user_watches:设置inotifywait或inotifywatch命令可以监视的文件数量(单进程) 默认只能监控8192个文件 max_user_instances:设置每个用户可以运行的inotifywait或inotifywatch命令的进程数 默认每个用户可以开启inotify服务128个进程 max_queued_events:设置inotify实例事件(event)队列可容纳的事件数量 默认监控事件队列长度为16384 inotify-tools 系统自带的比较low的工具 sersync 金山云的运维通过c++开发的工具 lsyncd三个工具 最新的,目前有人在用,适用于大规模服务器环境的工具 这些工具就3件事 1.优化,调整了这3文件的参数 2.检测某个目录 3.触发rsync命令
1、inotifty-tools工具
需要配置好epel源,才可以安装 [root@nfs-31 ~]# yum install inotify-tools -y 检查生成的软件命令 [root@nfs-31 ~]# rpm -ql inotify-tools |head -2 /usr/bin/inotifywait /usr/bin/inotifywatch 上述操作我们安装好了Inotify-tools软件,生成2个重要的命令 inotifywait:在被监控的目录等待特定文件系统事件(open、close、delete等事件),执行后处于阻塞状态,适合在Shell脚本中使用,是实现监控的关键 Inotifywatch:收集被监控的文件系统使用的统计数据(文件系统事件发生的次数统计)
inotifywait
所有事件,任意的linux命令,只要对该目录的数据,文件发生了修改动作,都会被检测到 mkdir /nfs-data [root@nfs-31 ~]#inotifywait -mrq --timefmt '%T' --format "%T----%w------%f 捕获到的事件是:%e" /nfs-data 12:27:56----/nfs-data/------ 捕获到的事件是:CLOSE_NOWRITE,CLOSE,ISDIR 12:27:56----/nfs-data/------ 捕获到的事件是:OPEN,ISDIR 12:27:56----/nfs-data/------ 捕获到的事件是:CLOSE_NOWRITE,CLOSE,ISDIR
指定检测事件的名字
Events 含义 -e events 事件名 access 文件或目录被读取 modify 文件或目录内容被修改 attrib 文件或目录属性被改变 close 文件或目录封闭,无论读/写模式 open 文件或目录被打开 moved_to 文件或目录被移动至另外一个目录 move 文件或目录被移动到另一个目录或从另一个目录移动至当前目录 create 文件或目录被创建在当前目录 delete 文件或目录被删除 umount 文件系统被卸载 Create、delete事件 检测,创建,删除两个时间,只有你执行了对应的linux命令,才会生成日志 # inotifywait -mrq --timefmt '%T' --format "%T----%w------%f 捕获到的事件是:%e" -e delete,create /nfs-data 12:29:46----/nfs-data/------hehe.log 捕获到的事件是:CREATE 12:30:24----/nfs-data/------aoligei.log 捕获到的事件是:CREATE 12:31:03----/nfs-data/------hehe.log 捕获到的事件是:DELETE move事件 # inotifywait -mrq --timefmt '%T' --format "%T----%w------%f 捕获到的事件是:%e" -e move /nfs-data 12:31:48----/nfs-data/------xixi.log 捕获到的事件是:MOVED_FROM 12:31:48----/nfs-data/------xixi.png 捕获到的事件是:MOVED_TO close_write事件 # inotifywait -mrq --timefmt '%T' --format "%T----%w------%f 捕获到的事件是:%e" -e close_write /nfs-data
2、sersync工具(了解)
<sersync> <localpath watch="/nfs-data"> #检测本地的哪个路径 <remote ip="172.16.1.41" name="backup"/> #传输到rsync服务端的backup模块 <!--<remote ip="192.168.8.39" name="tongbu"/>--> <!--<remote ip="192.168.8.40" name="tongbu"/>--> </localpath> <rsync> <commonParams params="-az"/> #rsync命令的参数 <auth start="false" users="rsync" passwordfile="/etc/rsync."/>#认证文件信息 <userDefinedPort start="false" port="874"/><!-- port=874 --> <timeout start="false" time="100"/><!-- timeout=100 --> <ssh start="false"/> </rsync> <failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once--> <crontab start="false" schedule="600"><!--600mins--> <crontabfilter start="false"> <exclude expression="*.php"></exclude> <exclude expression="info/*"></exclude> </crontabfilter> </crontab> <plugin start="false" name="command"/> </sersync>
3、lsyncd工具(推荐使用)
1.下载安装 yum install lsyncd -y 2.修改配置文件 [root@nfs-31 /data]#cat /etc/lsyncd.conf settings { #全局参数 logfile ="/var/log/lsyncd/lsyncd.log", statusFile ="/var/log/lsyncd/lsyncd.status", inotifyMode = "CloseWrite", maxProcesses = 8, } sync { default.rsync, source = "/nfs-data", #source是源的意思,要检测目录 target = "[email protected]::backup", #target目标,数据要同步到的目的地 delete= true, #等价于--delete参数 exclude = {".*"}, #排除文件语法,排除隐藏文件 delay=1, rsync = { binary = "/usr/bin/rsync", archive = true, # -a compress = true, # -z verbose = true, # -v password_file="/etc/rsync.pwd", # --password_file _extra={"--bwlimit=200"} } } sync { #如果要检测其他目录的文件同步,则加一层sync default.rsync, source = "/nfs-data", target = "[email protected]::backup", delete= true, exclude = {".*"}, delay=1, rsync = { binary = "/usr/bin/rsync", archive = true, compress = true, verbose = true, password_file="/etc/rsync.pwd", _extra={"--bwlimit=200"} } } 3.启动服务 systemctl start lsryncd [root@nfs-31 /nfs-data]# [root@nfs-31 /nfs-data]#systemctl start lsyncd [root@nfs-31 /nfs-data]# [root@nfs-31 /nfs-data]#systemctl status lsyncd 4.使用工具 [root@nfs-31 /nfs-data]#for i in {1..100};do echo ${i} > ${i}.log;sleep 0.1;done 去sync服务器目录下查看文件是否同步成功