美文网首页
作业-第08周--课堂-Day36-inotify+rsync实

作业-第08周--课堂-Day36-inotify+rsync实

作者: MineG | 来源:发表于2019-04-20 11:33 被阅读0次

Day36课堂作业

inotify+rsync实时复制实践

1、inotify-tools

前提:backuprsync 服务端部署好。

1)部署NFS客户端

[root@nfs01 ~]# echo 'export RSYNC_PASSWORD=oldboy' >>/etc/bashrc
[root@nfs01 ~]# source /etc/bashrc
[root@nfs01 ~]# echo $RSYNC_PASSWORD
oldboy

测试推送

[root@nfs01 ~]# rsync -avz /data rsync_backup@172.16.1.41::backup/
sending incremental file list

sent 164 bytes  received 25 bytes  126.00 bytes/sec
total size is 0  speedup is 0.00

2)查看inotify支持情况

[root@nfs01 ~]# uname -r
3.10.0-957.5.1.el7.x86_64
[root@nfs01 ~]#  ls -l /proc/sys/fs/inotify/
总用量 0
-rw-r--r-- 1 root root 0 4月  19 09:45 max_queued_events
-rw-r--r-- 1 root root 0 4月  19 09:45 max_user_instances
-rw-r--r-- 1 root root 0 4月  19 09:45 max_user_watches

3)安装inotify-tools

yum install epel-release -y 
yum install inotify-tools -y

[root@nfs01 ~]# rpm -ql inotify-tools|head -2
/usr/bin/inotifywait
/usr/bin/inotifywatch

[root@nfs01 ~]# rpm -qa inotify-tools
inotify-tools-3.14-8.el7.x86_64

4)命令参数和事件知识

表1: inotifywait 参数说明

参数名称 参数说明
-m,–monitor 始终保持事件监听状态
-r,–recursive 递归查询目录
-q,–quiet 只打印监控事件的信息
–excludei 排除文件或目录时,不区分大小写
-t,–timeout 超时时间
–timefmt 指定时间输出格式
–format 指定时间输出格式
-e,–event 后面指定删、增、改等事件

表2: inotifywait events事件说明

事件名称 事件说明
access 读取文件或目录内容
modify 修改文件或目录内容
attrib 文件或目录的属性改变
close_write 修改真实文件内容
close_nowrite 在只读模式打开之后关闭
close 不管读或是写模式
open 文件或目录被打开
moved_to 文件或目录移动到
moved_from 文件或目录从移动
move 移动文件或目录移动到监视目录
create 在监视目录下创建文件或目录
delete 删除监视目录下的文件或目录
delete_self 文件或目录被删除
unmount 卸载文件系统

5)测试实践

inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e create /data

6)思考:实现数据复制

监控哪些事件?
增 改 删 需要监控

[root@nfs01 ~]# inotifywait -mrq --format '%w%f' -e close_write,delete /data
/data/a.txt
/data/a.txt
/data/a.txt

7)编写脚本

[root@nfs01 /server/scripts]# mkdir /server/scripts -p
[root@nfs01 /server/scripts]# cat monitor.sh 
#!/bin/sh
cmd="/usr/bin/inotifywait"
$cmd -mrq  --format '%w%f' -e close_write,delete /data|\
while read line
do
  #删除事件发生
  [ ! -e  "$line" ] && cd /data &&\
  rsync -az --delete ./ rsync_backup@172.16.1.41::backup && continue
  #处理增改事件
  rsync -az --delete $line rsync_backup@172.16.1.41::backup
done

8)放在后台执行脚本

[root@nfs01 /server/scripts]# /bin/sh /server/scripts/monitor1.sh &
[2] 9199

9)开机自启动脚本

[root@nfs01 /server/scripts]# tail -2 /etc/rc.local
########################
/bin/sh /server/scripts/monitor1.sh &

2、sersync

sersync实践:

1)客户端推送成功

rsync -az /data rsync_backup@172.16.1.41::backup

2)部署sersync服务(NFS)

下载 sersync 个人百度网盘 提取码:3xg0

--------------------------------------------------------------
==>下完后传到Linux里<==
--------------------------------------------------------------
[root@nfs01 /server/tools]# ls
sersync_oldboy_64bit_20160928.tar.gz

--------------------------------------------------------------
==>解压缩<==
--------------------------------------------------------------
[root@nfs01 /server/tools]# tar xf sersync_oldboy_64bit_20160928.tar.gz 
[root@nfs01 /server/tools]# ls
application  sersync_oldboy_64bit_20160928.tar.gz

--------------------------------------------------------------
==>移动到规范位置<==
--------------------------------------------------------------
[root@nfs01 /server/tools]# mkdir /application -p
[root@nfs01 /server/tools]# mv application/sersync /application/
[root@nfs01 /server/tools]# tree /application/
/application/
└── sersync
    ├── bin
    │   └── sersync
    ├── conf
    │   ├── confxml.xml
    │   └── confxml.xml.ori
    ├── logs
    │   └── rsync_fail_log.sh
    └── readme.txt

4 directories, 5 files

--------------------------------------------------------------
==>进入其目录<==
--------------------------------------------------------------
[root@nfs01 /server/tools]# cd /application/sersync/
[root@nfs01 /application/sersync]# ls
bin  conf  logs  readme.txt
[root@nfs01 /application/sersync]# cd conf/

--------------------------------------------------------------
==>配置文件(.ori是复制文件)<==
--------------------------------------------------------------
[root@nfs01 /application/sersync/conf]# ls
confxml.xml  confxml.xml.ori

配置文件介绍如下

3) sersync配置文件:干两件事

1)完成监控配置:

inotifywait -mrq --format '%w%f' -e createFolder,close_write,delete,moveFrom,moveTo /data

2)完整命令拼接:

rsync -az /data --timeout=100 rsync_backup@172.16.1.41::backup

将上面两件事在sersync配置文件修改即可

4) 启动服务

--------------------------------------------------------------
==>查看参数<==
--------------------------------------------------------------
[root@nfs01 /application/sersync/conf]# ../bin/sersync -h
set the system param
execute:echo 50000000 > /proc/sys/fs/inotify/max_user_watches
execute:echo 327679 > /proc/sys/fs/inotify/max_queued_events
parse the command param
_______________________________________________________
参数-d:启用守护进程模式
参数-r:在监控前,将监控目录与远程主机用rsync命令推送一遍
c参数-n: 指定开启守护线程的数量,默认为10个
参数-o:指定配置文件,默认使用confxml.xml文件
参数-m:单独启用其他模块,使用 -m refreshCDN 开启刷新CDN模块
参数-m:单独启用其他模块,使用 -m socket 开启socket模块
参数-m:单独启用其他模块,使用 -m http 开启http模块
不加-m参数,则默认执行同步程序
________________________________________________________________

--------------------------------------------------------------
==>启动<==
--------------------------------------------------------------
[root@nfs01 /application/sersync/conf]# /application/sersync/bin/sersync -d -n 10 -o /application/sersync/conf/confxml.xml

--------------------------------------------------------------
==>也可这样(但你必须知道默认值)<==
--------------------------------------------------------------
/application/sersync/bin/sersync -d

--------------------------------------------------------------
==>杀掉进程<==
--------------------------------------------------------------
pkill sersync

提示二进制程序,不是 yum 安装的,所以不能 systemctl start sersync

4)开机自启动

[root@nfs01 /data]# tail -1 /etc/rc.local
/application/sersync/bin/sersync -d

扩展: 配置 systemctl start sersync 启动方案

[root@nfs01 /data]# cat /etc/rc.d/init.d/sersync
#!/bin/bash
# chkconfig: 2345 21 81
# description: rsync service start and stop scripts
# Author: oldboy
# Organization: www.oldboyedu.com

start(){
    /application/sersync/bin/sersync -d -o /application/sersync/conf/confxml.xml &>/dev/null
}
stop(){
    killall sersync 2>/dev/null
}
case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        stop
        sleep 2
        start
        ;;
    *)
        echo $"Usage:$0 {start|stop|restart}"
        exit 1
esac
chmod +x /etc/rc.d/init.d/sersync
[root@nfs01 /data]# cat /usr/lib/systemd/system/sersync.service
[Unit]
Description=sersyncd service
After=network.target
 
[Service]
Type=forking           
ExecStart=/etc/rc.d/init.d/sersync start   
ExecReload=/etc/rc.d/init.d/sersync restart
ExecStop=/etc/rc.d/init.d/sersync stop     
PrivateTmp=true
 
[Install]
WantedBy=multi-user.target
chmod +x /usr/lib/systemd/system/sersync.service
[root@nfs01 /data]# systemctl enable sersync.service
Created symlink from /etc/systemd/system/multi-user.target.wants/sersync.service to /usr/lib/systemd/system/sersync.service.
[root@nfs01 /data]# systemctl status sersync.service
● sersync.service - sersyncd service
   Loaded: loaded (/usr/lib/systemd/system/sersync.service; enabled; vendor preset: disabled)
   Active: inactive (dead)
   
[root@nfs01 /data]# systemctl stop sersync
[root@nfs01 /data]# ps -ef|grep sersync|grep -v grep
[root@nfs01 /data]# systemctl start sersync

相关文章

网友评论

      本文标题:作业-第08周--课堂-Day36-inotify+rsync实

      本文链接:https://www.haomeiwen.com/subject/vfpkgqtx.html