CC00077.LinuxNetwork——|Linux&RSYNC服务.V03|——|实时同步|Rsync+Inotify|

一、配置rsync+inotify实时同步
### --- 配置rsync+inotify实时同步

~~~		#定期同步的缺点:
~~~		当执行备份的#时间固定,延期明显,实时性差
~~~		当同步源长期不变化时,密集的定期任务是不必要的(浪费资源)

~~~		#实时同步的优点:
~~~		一旦同步源出现变化,#立即启动备份,实时性好
~~~		只要#同步源无变化,则不执行备份,节省资源
### --- inotify简介
~~~		inotify是一个Linux内核特性,它监控文件系统,
~~~		并且及时向专门的应用程序发出相关的事件警告,比如删除/读/写/卸载等操作,
~~~		要使用inotify,必须具备一台带有2.6.13版本的内核操作系统

~~~		#inotify两个监控命令:
~~~		inotifywait:用于#持续监控,实时输出结果(常用)
~~~		inotifywatch:用于短期监控,任务完成后再出结果
二、inotify部署
### --- 安装编译工具
~~~		在不知道你需要的软件是gcc还是gcc-c++,直接gcc*即可全部安装

[root@server21 inotify-tools-3.14]# yum install -y gcc*
### --- 部署在服务器端:
~~~     centos6.x:20.20.20.21                                 // 服务器端
### --- 将inotify-tools.zip上传到服务器

[root@server21 ~]# unzip inotify-tools.zip 
[root@server21 ~]# cd inotify-tools 
[root@server21 inotify-tools]# tar -zxvf inotify-tools-3.14.tar.gz  
[root@server21 inotify-tools]# cd inotify-tools-3.14 
[root@server21 inotify-tools-3.14]# ./configure && make && make install
### --- inotifywait命令格式

~~~     格式:inotifywait -mrq -e 监控动作2  /监控目录&
~~~     示例:inotifywait -mrq -e create,delete /filesrc &
~~~     -m:始终保持事件监听状态
~~~     -r:递归查询目录
~~~     -q:只打印监控事件的信息
### --- 监控动作:modify(内容),create ,attrib(权限),move,delete  

[root@server21 ~]# inotifywait -mrq -e create,delete,modify /filesrc/ // 监控实时显示操作状态
/filesrc/ CREATE aaa
/filesrc/ DELETE 1.txt
/filesrc/ MODIFY aaa
[root@server21 ~]# touch /filesrc/aaa
[root@server21 ~]# rm -rf /filesrc/1.txt 
[root@server21 ~]# echo "aaaaaaa">>/filesrc/aaa
### --- 利用rsync+inotifywait结合脚本实现单向实时同步
~~~     注:用户登录时要求面密码验证

[root@server21 ~]# vim src.sh
#!/bin/bash
a="inotifywait -mrq -e create,delete,modify /filesrc"           // 变量a
b="rsync -avz /filesrc/* root@20.20.20.22:/filedst"             // 变量b
$a | while read directory event file            
#while判断是否接受到监控记录  $a:执行变量a;$a只要有变化就传输给$b
do
     $b
done
### --- 执行脚本放在后台执行 

[root@server21 ~]# rm -rf /filesrc/*
[root@server22 ~]# rm -rf /filedst/*
[root@server21 ~]# bash ~/src.sh &
### --- 实验结果验证
~~~     在服务器端创建,删除文件,查看备份端是否正常
~~~     创建同步

[root@server21 ~]# touch /filesrc/a.txt
[root@server21 ~]# sending incremental file list
a.txt
[root@server22 ~]# ls /filedst/
a.txt
[root@server21 ~]# touch /filesrc/xxx.txt
[root@server21 ~]# sending incremental file list                // 服务端自动执行
xxx.txt

sent 82 bytes  received 31 bytes  75.33 bytes/sec
total size is 0  speedup is 0.00
~~~     更改文件内容

[root@server22 ~]# ls /filedst/
a.txt  xxx.txt
[root@server21 ~]# echo "1111111111aaaaaaaa" >>/filesrc/a.txt
[root@server21 ~]# sending incremental file list                // 服务端自动执行
a.txt

sent 91 bytes  received 31 bytes  81.33 bytes/sec
total size is 14  speedup is 0.11
echo "1111111111aaaaaaaa" >>/filesrc/a.txt 
[root@server22 ~]# cat /filedst/a.txt 
aaaaaaaaaaaaa
1111111111aaaaaaaa
拓展:跳整inotify监控的文件数量
调整inotify内核参数(/etc/sysctl.conf)
mak_queue_events监控队列大小
mak_user_instances是多监控实例数
max_user_watches每个实例最多监控文件数
三、配置unison+inotify实现双向实时同步
### --- 配置unison+inotify实现双向实时同步

~~~     rsync在单向同步上支持的非常好,且效率很高,但是在双向同步支持较差;
~~~     unison则是同步的优秀工具,但其缺点是#同步效率较低、
~~~     rsync单向同步就可以满足我们的需求,
### --- 环境要求
### --- 准备好同步所需的两个目录

~~~		如若用root来实现登录的话,生成秘钥对,以便于免密码验证
~~~		准备好inotify和unison的软件包
### --- 安装步骤:

[root@server21 ~]# rm -rf /filesrc/*
[root@server22 ~]# rm -rf /filedst/*
[root@server21 ~]# ps aux |grep bash                            // 停止脚本
root       4458  0.0  0.0 106072  1308 pts/2    S    11:37   0:00 bash /root/src.sh
root       4460  0.0  0.0 106072   816 pts/2    S    11:37   0:00 bash /root/src.sh 
[root@server21 ~]# kill 4458
[root@server21 ~]# kill 4460
### --- 先安装inotify(客户端)

[root@server21 ~]# cp -a inotify-tools.zip /filesrc/            // 将文件传输到20.20.20.22下,
[root@server22 ~]# ls /filedst/
 inotify-tools.zip
[root@server22 ~]# mv /filedst/inotify-tools.zip .
[root@server22 ~]# unzip inotify-tools.zip
[root@server22 ~]# cd inotify-tools
[root@server22 inotify-tools]# ls
inotify-tools-3.14.tar.gz  ocaml-3.10.1.tar.gz  unison-2.13.16.tar.gz
[root@server22 inotify-tools]# tar -zxvf  inotify-tools-3.14.tar.gz 

[root@server22 inotify-tools]# cd inotify-tools-3.14 
[root@server22 inotify-tools-3.14]# yum install -y gcc** 
[root@server22 inotify-tools-3.14]# ./configure && make && make install
### --- 再安装ocaml

[root@server22 inotify-tools-3.14]# cd ..
[root@server21 ~]# cd inotify-tools
[root@server21 inotify-tools]# tar -zxvf ocaml-3.10.1.tar.gz
[root@server21 inotify-tools]# cd ocaml-3.10.1
[root@server21 ocaml-3.10.1]# ./configure                       // 忽略所有报错
[root@server21 ocaml-3.10.1]# make world opt
[root@server21 ocaml-3.10.1]# make install
### --- 同步流程部署客户端ocml:20.20.20.22
### --- 安装unison(服务端,客户端)

[root@server21 ocaml-3.10.1]# cd ..
[root@server21 inotify-tools]# tar -zxvf unison-2.13.16.tar.gz
[root@server21 inotify-tools]# cd unison-2.13.16
[root@server21 unison-2.13.16]# make UISTYLE=text THREADS=true STATIC=true  // 已经存在Makefile文件,不需要./configure
make[1]: [tags] Error 127 (ignored)                             // 错误:忽略即可
[root@server21 unison-2.13.16]# cp unison /usr/local/bin/       // 把生成的脚本拷贝出来
### --- 同步流程部署客户端unison:20.20.20.22
### --- 配置脚本
~~~     注:双向自动同步,监控目录和数据同步时,源目录不能使用*通配符传输,
~~~		否则会变成死循环。
~~~		#filesrc端

[root@server21 ~]# vim filesrc.sh
#!/bin/bash
a="inotifywait -mrq -e create,delete,modify /filesrc"
b="/usr/local/bin/unison -batch /filesrc/ ssh://20.20.20.22//filedst/" 
#-batch:批处理
$a | while read directory event file
do
    $b
done
[root@server21 ~]# bash filesrc.sh &
[1] 10586
~~~     filedst端

[root@server22 ~]# vim filedst.sh
#!/bin/bash
a="inotifywait -mrq -e create,delete,modify /filedst"
b="/usr/local/bin/unison -batch /filedst/ ssh://20.20.20.21//filesrc/" 
#-batch:批处理
$a | while read directory event file
do
    $b
done
[root@server22 ~]# bash filedst.sh &
[1] 10998
### --- 测试
~~~     将两个脚本放入后台执行:bash filesrc.sh &
~~~     分别在两个主机上创建主机查看是否可以实现双向实时同步(可能会有延迟)
### --- 创建同步

[root@server21 ~]# touch /filesrc/a.txt
[root@server21 ~]# Contacting server...                         // 自动执行命令
Looking for changes
[root@server22 ~]# Contacting server...                         // 客户端自动执行命令
[root@server22 ~]# ls /filedst/
a.txt
[root@server22 ~]# touch /filedst/1.txt
### --- 删除同步

[root@server22 ~]# rm -rf /filedst/1.txt 
[root@server22 ~]# Contacting server...                         // 自动执行,删除的时候可能会有延迟,生产环境多检查
[root@server21 ~]# Contacting server...                         // 服务端自动执行
Looking for changes
[root@server21 ~]# ls /filesrc/
1.txt  a.txt
### --- 改变文件内容

[root@server21 ~]#  echo "1111111111aaaaaaaa" >>/filesrc/a.txt
[root@server21 ~]# Contacting server...                         // 自动执行
[root@server22 ~]# Contacting server...                         // 客户端自动执行
Contacting server...
[root@server22 ~]# cat /filedst/a.txt 
1111111111aaaaaaaa
[root@server22 ~]# echo "aaaaaaaa111111111" >>/filedst/a.txt 
[root@server22 ~]# Contacting server...                         // 自动执行
[root@server21 ~]# Contacting server...                         // 服务端自动执行
[root@server21 ~]# cat /filesrc/a.txt 
1111111111aaaaaaaa
aaaaaaaa111111111
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yanqi_vip

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值