Inotify+rsync实现自动化复制存储方案

简介:

1、前言

我们系统架构中有时候需要实现所谓的复制存储,实现复制存储的方案有很多种,现在我们来尝试inotify基于事件触发同步的复制存储方案。

2、理论部分

2.1、工具的介绍

Inotify一种强大的、细粒度的、异步文件系统监控机制,它满足各种各样的文件监控需要,可以监控文件系统的访问属性、读写属性、权限属性、删除创建、移动等操作,也就是可以监控文件发生的一切变化。

inotify-tools

是一个C库和一组命令行的工作提供Linux下inotify的简单接口。inotify-tools安装后会得到inotifywait和inotifywatch这两条命令:

-- inotifywait

命令可以用来收集有关文件访问信息,Linux发行版一般没有包括这个命令,需要安装inotify-tools,这个命令还需要将inotify支持编译入Linux内核,好在大多数Linux发行版都在内核中启用了inotify。

-- inotifywatch

命令用于收集关于被监视的文件系统的统计数据,包括每个 inotify 事件发生多少次。

2.2、帮助信息

1)查看参数:

1
inotifywait -h

2)部分参数翻译:

inotifywait命令参数

-m 是要持续监视变化。

-r 使用递归形式监视目录。

-q 减少冗余信息,只打印出需要的信息。

-e 指定要监视的事件列表。

--timefmt 是指定时间的输出格式。

--format 指定文件变化的详细信息。

可监听的事件:

-- access访问,读取文件。

-- modify修改,文件内容被修改。

-- attrib属性,文件元数据被修改。

-- move移动,对文件进行移动操作。

-- create创建,生成新文件

-- open打开,对文件进行打开操作。

-- close关闭,对文件进行关闭操作。

-- delete删除,文件被删除

3、实践部分

3.1、主机信息

inotifywait_a:

hostname=inotifywait_a

ipaddress=10.168.0.161


inotifywait_b:

hostname=inotifywait_b

ipaddress=10.168.0.162

3.2、yum源安装

1
2
3
yum  install  -y  rsync  expect
yum  install  -y http: //pkgs .repoforge.org /rpmforge-release/rpmforge-release-0 .5.3-1.el6.rf.x86_64.rpm
yum  install  -y inotify-tools

3.3、配置

3.3.1、创建脚本

In inotifywait_a:

1)创建脚本文件夹:

1
2
mkdir  ~ /script
cd  ~ /script

2)创建同步监视脚本

vim编辑isync.sh

A方案输入如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#!/bin/bash
desUser=root  #目标服务器的用户名
desPwd= 'rootpw'  #目标服务器的密码
desIP=10.168.0.162  #目标服务器的IP
desDir= /files/  #目标服务器的路径
souDir= /files/  #源服务器的路径
dt=$( date  + "%Y-%m-%d %H:%M:%S" )
fn=$( echo  $0 |  awk  -F  '/'  '{print $NF}' )
lf= "/var/log/$fn.log"
 
echo  "$dt $fn is start"  >> $lf
auto_rsync () {
     expect -c " set  timeout -1;
                 spawn  rsync  -azP --delete $5 $2@$3:$4;
                 expect {
                     *assword:* {send -- $1\r;
                                  expect {
                                     *denied* { exit  2;}
                                     eof
                                  }
                     }
                     eof         { exit  1;}
                 }
                 "
     return  $?
}
 
inotifywait -mrq -e create,move,delete,modify $souDir |  while  read  m1 m2 m3
do
   auto_rsync $desPwd $desUser $desIP $desDir $souDir
   dt=$( date  + "%Y-%m-%d %H:%M:%S" )
   echo  "$dt $fn $m2 $m1$m3"  >> $lf
done

B方案输入一下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#!/bin/bash
desUser=root  #目标服务器的用户名
desPwd= 'rootpw'  #目标服务器的密码
desIP=10.168.0.162  #目标服务器的IP
desDir= /files/  #目标服务器的路径
souDir= /files/  #源服务器的路径
dt=$( date  + "%Y-%m-%d %H:%M:%S" )
fn=$( echo  $0 |  awk  -F  '/'  '{print $NF}' )
lf= "/var/log/$fn.log"
af= "/tmp/af.sh"
 
#生成启动日志
echo  "$dt $fn is start"  >> $lf
 
#清理旧模块
if  [ -f $af ];  then
   rm  -rf $af
fi
 
#生成自动传输模块
if  [ ! -f $af ];  then
   echo  '#!/usr/local/bin/expect -f'  > $af
   echo  'set timeout 1'  >> $af
   echo  "spawn rsync -azP --delete $souDir $desUser@$desIP:$desDir"  >> $af
   echo  'sleep 2'  >> $af
   echo  'expect "password:"'  >> $af
   echo  'send "' $desPwd '\r"'  >> $af
   echo  'interact'  >> $af
fi
 
#传输模块权限设置
if  [ -f $af ];  then
   chown  root:root $af
   chmod  600 $af
fi
 
#监控并触发传输
inotifywait -mrq -e create,move,delete,modify $souDir |  while  read  m1 m2 m3
do
   /usr/bin/expect  $af
   dt=$( date  + "%Y-%m-%d %H:%M:%S" )
   echo  "$dt $fn $m2 $m1$m3"  >> $lf
done

注:以上代码二选一即可

3.3.2、启动脚本

1)手动启动

1
sh ~ /script/isync .sh

2)自动启动

1
echo  "sh ~/script/isync.sh"  >>  /etc/rc . local

3.3.3、查阅脚本日志

1
tail  /var/log/isync .sh.log









本文转自 tanzhenchao 51CTO博客,原文链接:http://blog.51cto.com/cmdschool/1730749,如需转载请自行联系原作者
目录
相关文章
|
2月前
|
机器学习/深度学习 存储 测试技术
从0到1:如何规划一套流量回放自动化测试方案
本文介绍了流量回放自动化测试的完整方法,从企业战略到交付的四个关键环节:Discovery(深度挖掘)、Define(定义目标)、Design(详细设计)和Delivery(交付与反馈)。通过这些步骤,帮助企业优化系统性能和稳定性,确保产品的高质量。
64 4
|
4月前
|
测试技术 Linux 虚拟化
iOS自动化测试方案(五):保姆级VMware虚拟机安装MacOS
详细的VMware虚拟机安装macOS Big Sur的保姆级教程,包括下载VMware和macOS镜像、图解安装步骤和遇到问题时的解决方案,旨在帮助读者顺利搭建macOS虚拟机环境。
170 3
iOS自动化测试方案(五):保姆级VMware虚拟机安装MacOS
|
4月前
|
测试技术 开发工具 iOS开发
iOS自动化测试方案(三):WDA+iOS自动化测试解决方案
这篇文章是iOS自动化测试方案的第三部分,介绍了在没有MacOS系统条件下,如何使用WDA(WebDriverAgent)结合Python客户端库facebook-wda和tidevice工具,在Windows系统上实现iOS应用的自动化测试,包括环境准备、问题解决和扩展应用的详细步骤。
359 1
iOS自动化测试方案(三):WDA+iOS自动化测试解决方案
|
4月前
|
测试技术 数据安全/隐私保护 iOS开发
iOS自动化测试方案(四):保姆级搭建iOS自动化开发环境
iOS自动化测试方案的第四部分,涵盖了基础环境准备、iPhone虚拟机设置、MacOS虚拟机与iPhone真机的连接,以及扩展问题和代码示例,确保读者能够顺利完成环境搭建并进行iOS自动化测试。
380 0
iOS自动化测试方案(四):保姆级搭建iOS自动化开发环境
|
4月前
|
测试技术 虚拟化 iOS开发
iOS自动化测试方案(二):Xcode开发者工具构建WDA应用到iphone
这篇文章是iOS自动化测试方案的第二部分,详细介绍了在Xcode开发者工具中构建WebDriverAgent(WDA)应用到iPhone的全过程,包括环境准备、解决构建过程中可能遇到的错误,以及最终成功安装WDA到设备的方法。
211 0
iOS自动化测试方案(二):Xcode开发者工具构建WDA应用到iphone
|
4月前
|
测试技术 开发工具 虚拟化
iOS自动化测试方案(一):MacOS虚拟机保姆级安装Xcode教程
这篇文章提供了一份保姆级的教程,指导如何在MacOS虚拟机上安装Xcode,包括环境准备、基础软件安装以及USB扩展插件的使用,以实现iOS自动化测试方案的第一步。
208 0
iOS自动化测试方案(一):MacOS虚拟机保姆级安装Xcode教程
|
7月前
|
机器学习/深度学习 数据采集 运维
高效处理异常值的算法:One-class SVM模型的自动化方案
高效处理异常值的算法:One-class SVM模型的自动化方案
223 1
|
7月前
|
自动驾驶 定位技术 调度
自动化存储系统无人搬运车(AGV,Autonomous Guided Vehicle)与无人叉车
自动化存储系统无人搬运车(AGV,Autonomous Guided Vehicle)与无人叉车
79 3
|
7月前
|
运维 监控 测试技术
ansible 自动化运维监控方案
本文介绍如何利用ansible实时或自动采集受控主机的信息
|
7月前
|
存储 人工智能 供应链
自动化存储系统
自动化存储系统
92 2