鸿 网 互 联 www.68idc.cn

实时同步部署(inotify,sersync)

来源:互联网 作者:佚名 时间:2022-07-19 10:55
使用inotify现实,实时同步的前提条件 a 先部署好rsync服务 b 其次部署好inotify服务,并对需要实时的数据进行监控 c 建立rsync与inotify服务的关联,对变化的数据进行实时备份传输 测试最

使用inotify现实,实时同步的前提条件

a 先部署好rsync服务

b 其次部署好inotify服务,并对需要实时的数据进行监控

c 建立rsync与inotify服务的关联,对变化的数据进行实时备份传输


测试最少需要两台主机

cat /etc/hosts

192.168.40.26? ?nfs01? ? ? ?# rsync客户机+inotify,把监控的数据实时传输到备份服务器

192.168.40.27? ?backup01? ? # rsync服务器,作为备份服务器


1 修改ip 主机名 查看rsync是否安装

hostnamectl set-hostname nfs01

rpm -qa inotify-tools

nmcli c mod eth1 ipv4.addr "192.168.40.26/24"

nmcli d reapply eth1

ifconfig


# 系统优化,请参考:https://blog.51cto.com/lehappy/2781516


2 rsync服务器部署参考?

https://blog.51cto.com/lehappy/2759036


3 inotify服务部署

3.1 安装程序

yum -y install inotify-tools


3.2 命令使用

[root@nfs01 ~]#rpm -ql inotify-tools

/usr/bin/inotifywait? ? ? # 监控数据变化

/usr/bin/inotifywatch? ? ?# 对监控变化信息进行统计

# --------下面不重要 -------------------------------

/usr/lib64/libinotifytools.so.0

/usr/lib64/libinotifytools.so.0.4.1

/usr/share/doc/inotify-tools-3.14

/usr/share/doc/inotify-tools-3.14/AUTHORS

/usr/share/doc/inotify-tools-3.14/COPYING

/usr/share/doc/inotify-tools-3.14/ChangeLog

/usr/share/doc/inotify-tools-3.14/NEWS

/usr/share/doc/inotify-tools-3.14/README

/usr/share/man/man1/inotifywait.1.gz

/usr/share/man/man1/inotifywatch.1.gz

-----------------------------------------------------


3.3 man inotifywait 参数说明??

-m, --monitor? ? # 始终保持事件监听状态

-r, --recursive? # 递归监控

-q, --quiet? ? ? # 打印很少的信息

--format <fmt>? ?# 指定输出信息的格式? %T时间 %w路径 %f文件名 %e状态

--timefmt <fmt>? # 指定输出的时间格式? %Y年 %m月 %d日 %H小时 %M分钟

-e <event>? ? ? ?# 指定监控事件信息

#------------事件信息------------------

create file? ? ? ? ? ? ?# 创建文件? ? ? ? ***

open file? ? ? ? ? ? ? ?# 打开文件

attrib file? ? ? ? ? ? ?# 修改文件属性

close_write,close file? # 保存并关闭文件? ***

delete file? ? ? ? ? ? ?# 删除文件? ? ? ? ***

modify file? ? ? ? ? ? ?# 修改文件

moved_to file? ? ? ? ? ?# 文件移入? ? ? ? ***


# 打开两个窗口测试同一个系统

[root@nfs01 ~]#inotifywait -mrq --timefmt '%Y-%m-%d %H:%M' --format '%T %w%f status:%e' -e create,close_write,delete,moved_to /data

2021-05-13 13:59 /data/2.txt status:CREATE? ? ? ? ? ? ?# 监控数据变化

2021-05-13 13:59 /data/2.txt status:CLOSE_WRITE,CLOSE

2021-05-13 14:00 /data/1 status:CREATE,ISDIR

2021-05-13 14:00 /data/2.txt status:CLOSE_WRITE,CLOSE

2021-05-13 14:00 /data/hosts status:DELETE

2021-05-13 14:02 /data/hosts status:MOVED_TO

#------------------------------------------------------------------------

[root@nfs01 /data]#touch 2.txt? ? ? ? ? ? ? ? ? ? ? ? ?# 执行命令

[root@nfs01 /data]#mkdir -p /data/1/2/3

[root@nfs01 /data]#echo 123 >2.txt

[root@nfs01 /data]#rm -f hosts?

[root@nfs01 /data]#mv /etc/hosts /data


3.4 inotify+rsync实现实时同步

# 实现实时同步需要写shell脚本,最好是把测试正常的命令复制到里面。

vim /scripts/backup.sh

#!/bin/sh

inotifycmd=”/usr/bin/inotifywait –mrq –format ‘%w%f’ -e create,close_write,delete,moved_to,attrib”

$inotifycmd /data | while read line

do

/usr/bin/rsync –az –delete $line –timeout=100 rsync_backup@192.168.40.27::backup \

--password-file=/etc/rsync.pwd &>/dev/null

done

shell测试成功后把它增加到/etc/rc.local

/usr/bin/sh /scripts/backup.sh &


4 优化

[root@nfs01 /]#ll /proc/sys/fs/inotify/

total 0

-rw-r--r-- 1 root root 0 May 13 15:21 max_queued_events

-rw-r--r-- 1 root root 0 May 13 15:21 max_user_instances

-rw-r--r-- 1 root root 0 May 13 15:21 max_user_watches

# max_user_watches:设置inotifywait或inotifywatch命令可以监视的文件数据(单进程)

# max_user_instances:设置每个用户可以运行的inotifywait或inotifywatch命令的进行数

# max_queued_events:设置inotify实例事件(event)队列可容纳的事件数量


[root@nfs01 /]#sysctl -a|grep inotify

fs.inotify.max_queued_events = 16384? # 工作中可以修改为50000000

fs.inotify.max_user_instances = 128

fs.inotify.max_user_watches = 8192? ? # 工作中可以修改为50000000


5 inotify缺点:

# 1、并发如果大于200个文件(10-100k),同步有延迟

# 2、写的脚本,每次都是全部推送一次,但确实是增量

# 3、监控到事件后,调用rsync同步是单进程的。


####################################################################

1 sersync服务部署

# sersync利用inotify与rsync技术实现对服务器数据实时同步。sersync与inotify相比优点是:

# 1、对linux产生的临时文件和重复文件操作会进行过滤。

# 2、配置简单,下载解压后可直接进行使用。

# 3、使用多线程进行同步。

# 4、sersync自带出错处理机制,对出错的文件重新同步。

# 5、sersync自带crontab功能,只需要在xml配置中开启,即可按预先的配置,隔一段时间整体同步一次。

# 6、可以满足有特殊需求的公司二次开发。


1.1 安装程序

# 这个程序需要手动下载,搜索下载地址为

# https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/sersync/sersync2.5.4_64bit_binary_stable_final.tar.gz


[root@nfs01 /data]#mkdir /tools

[root@nfs01 /data]#cd /tools

[root@nfs01 /tools]#wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/sersync/sersync2.5.4_64bit_binary_stable_final.tar.gz


[root@nfs01 /tools]#tar xf sersync2.5.4_64bit_binary_stable_final.tar.gz? # 解压

[root@nfs01 /tools]#ll

total 712

drwxr-xr-x 2 root root? ? ?41 Oct 26? 2011 GNU-Linux-x86

-rw-r--r-- 1 root root 727290 Oct 26? 2011 sersync2.5.4_64bit_binary_stable_final.tar.gz

[root@nfs01 /tools]#cd GNU-Linux-x86/

[root@nfs01 /tools/GNU-Linux-x86]#ll

total 1772

-rwxr-xr-x 1 root root? ? 2214 Oct 26? 2011 confxml.xml? ?# 配置文件

-rwxr-xr-x 1 root root 1810128 Oct 26? 2011 sersync2? ? ? # 命令

[root@nfs01 /tools/GNU-Linux-x86]#cp sersync2 /usr/bin/sersync? ?# 把sersync2复制到/usr/bin/并改为sersync

[root@nfs01 /tools/GNU-Linux-x86]#ll /usr/bin/ser*

-rwxr-xr-x 1 root root 1810128 May 13 15:04 /usr/bin/sersync


1.2 编辑配置文件

[root@nfs01 /tools/GNU-Linux-x86]#cp confxml.xml confxml.xml.bak? ?# 修改前先备份

[root@nfs01 /tools/GNU-Linux-x86]#vi /tools/GNU-Linux-x86/confxml.xml?

# 在vi里面输入 :set nu 查看共有66行

? ? ? 1 <?xml version="1.0" encoding="ISO-8859-1"?>

? ? ? 2 <head version="2.5">

? ? ? 3? ? ?<host hostip="localhost" port="8008"></host>

? ? ? 4? ? ?<debug start="false"/>

? ? ? 5? ? ?<fileSystem xfs="false"/>

? ? ? 6? ? ?<filter start="false">

? ? ? 7? ? ? ? ?<exclude expression="(.*)\.svn"></exclude>

? ? ? 8? ? ? ? ?<exclude expression="(.*)\.gz"></exclude>

? ? ? 9? ? ? ? ?<exclude expression="^info/*"></exclude>

? ? ?10? ? ? ? ?<exclude expression="^static/*"></exclude>

? ? ?11? ? ?</filter>

? ? ?12? ? ?<inotify>

? ? ?13? ? ? ? ?<delete start="true"/>

? ? ?14? ? ? ? ?<createFolder start="true"/>

? ? ?15? ? ? ? ?<createFile start="false"/>

? ? ?16? ? ? ? ?<closeWrite start="true"/>

? ? ?17? ? ? ? ?<moveFrom start="true"/>

? ? ?18? ? ? ? ?<moveTo start="true"/>

? ? ?19? ? ? ? ?<attrib start="false"/>

? ? ?20? ? ? ? ?<modify start="false"/>

? ? ?21? ? ?</inotify>

? ? ?22?

? ? ?23? ? ?<sersync>

? ? ?24? ? ? ? ?<localpath watch="/opt/tongbu">

? ? ?25? ? ? ? ? ? ?<remote ip="127.0.0.1" name="tongbu1"/>

? ? ?26? ? ? ? ? ? ?<!--<remote ip="192.168.8.39" name="tongbu"/>-->

? ? ?27? ? ? ? ? ? ?<!--<remote ip="192.168.8.40" name="tongbu"/>-->

? ? ?28? ? ? ? ?</localpath>

? ? ?29? ? ? ? ?<rsync>

? ? ?30? ? ? ? ? ? ?<commonParams params="-artuz"/>

? ? ?31? ? ? ? ? ? ?<auth start="false" users="root" passwordfile="/etc/rsync.pas"/>

? ? ?32? ? ? ? ? ? ?<userDefinedPort start="false" port="874"/><!-- port=874 -->

? ? ?33? ? ? ? ? ? ?<timeout start="false" time="100"/><!-- timeout=100 -->

? ? ?34? ? ? ? ? ? ?<ssh start="false"/>

? ? ?35? ? ? ? ?</rsync>

? ? ?36? ? ? ? ?<failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once-->

? ? ?37? ? ? ? ?<crontab start="false" schedule="600"><!--600mins-->

? ? ?38? ? ? ? ? ? ?<crontabfilter start="false">

? ? ?39? ? ? ? ? ? ? ? ?<exclude expression="*.php"></exclude>

? ? ?40? ? ? ? ? ? ? ? ?<exclude expression="info/*"></exclude>

? ? ?41? ? ? ? ? ? ?</crontabfilter>

? ? ?42? ? ? ? ?</crontab>

? ? ?43? ? ? ? ?<plugin start="false" name="command"/>

? ? ?44? ? ?</sersync>

? ? ?45?

? ? ?46? ? ?<plugin name="command">

? ? ?47? ? ? ? ?<param prefix="/bin/sh" suffix="" ignoreError="true"/>? <!--prefix /opt/tongbu/mmm.sh suffix-->

? ? ?48? ? ? ? ?<filter start="false">

? ? ?49? ? ? ? ? ? ?<include expression="(.*)\.php"/>

? ? ?50? ? ? ? ? ? ?<include expression="(.*)\.sh"/>

? ? ?51? ? ? ? ?</filter>

? ? ?52? ? ?</plugin>

? ? ?53?

? ? ?54? ? ?<plugin name="socket">

? ? ?55? ? ? ? ?<localpath watch="/opt/tongbu">

? ? ?56? ? ? ? ? ? ?<deshost ip="192.168.138.20" port="8009"/>

? ? ?57? ? ? ? ?</localpath>

? ? ?58? ? ?</plugin>

? ? ?59? ? ?<plugin name="refreshCDN">

? ? ?60? ? ? ? ?<localpath watch="/data0/htdocs/cms.xoyo.com/site/">

? ? ?61? ? ? ? ? ? ?<cdninfo domainname="ccms.chinacache.com" port="80" username="xxxx" passwd="xxxx"/>

? ? ?62? ? ? ? ? ? ?<sendurl base="http://pic.xoyo.com/cms"/>

? ? ?63? ? ? ? ? ? ?<regexurl regex="false" match="cms.xoyo.com/site([/a-zA-Z0-9]*).xoyo.com/images"/>

? ? ?64? ? ? ? ?</localpath>

? ? ?65? ? ?</plugin>

? ? ?66 </head>


# 6至11行:默认排除指定数据信息不要进行实时同步,修改<filter start="false">可以实时同步把false改为true


# 12至21行:定义inotify监控事件,只要把false改为true就执行


# 重点23至35行:和inotifywait命令做对比

[root@nfs01 ~]#inotifywait -mrq --timefmt '%Y-%m-%d %H:%M' --format '%T %w%f status:%e' -e create,close_write,delete,moved_to /data

# -e create,close_write,delete,moved_to? ? ? ?对应? 12至21行

# /data? ? ?对应 24行 <localpath watch="/opt/tongbu">??

#? ? ? ? ? ? ? ?修改? <localpath watch="/data">


# 重点23至35行:和rsync命令做对比

[root@nfs01 ~]#rsync -az /etc/hosts rsync_bak@192.168.40.27::backup --password-file=/etc/rsync.pwd?

# @192.168.40.27::backup? ?对应 25行 <remote ip="127.0.0.1" name="tongbu1"/>??

#? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?修改? <remote ip="192.168.40.27" name="backup"/>

# rsync -az? 对应30行? <commonParams params="-artuz"/>??

#? ? ? ? ? ? ? ? 修改? <commonParams params="-az"/>

# rsync_bak@192.168.40.27 --password-file=/etc/rsync.pwd? 对应31行? <auth start="false" users="root" passwordfile="/etc/rsync.pas"/>

#? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?修改? <auth start="true" users="rsync_bak" passwordfile="/etc/rsync.pwd"/>


# 32行是设置端口号,必须和rsync配置/etc/rsyncd.conf文件里面的端口号一致(port = 873)

# 把false修改为true启用并修改端口号? <userDefinedPort start="true" port="873"/><!-- port=874 -->


# 33行是设置设置超时时间,把false修改为true启用? <timeout start="true" time="100"/><!-- timeout=100 -->

# 修改完成,保存退出。?


1.3 启动sersync服务

[root@nfs01 /tools/GNU-Linux-x86]#sersync -h? # 使用命令帮助

set the system param? ? ? ? ? ? ? ? ? ? ? ? ? # 这里告诉可以设置系统参数,参考inotify 4优化的内容

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命令推送一遍 *(第一次使用时保证数据同步,后面就不需要了)

参数-n: 指定开启守护线程的数量,默认为10个? (指定线程总数为10,cpu过高可调低)

参数-o:指定配置文件,默认使用confxml.xml文件? ***(可以指定多个配置文件)

参数-m:单独启用其他模块,使用 -m refreshCDN 开启刷新CDN模块

参数-m:单独启用其他模块,使用 -m socket 开启socket模块

参数-m:单独启用其他模块,使用 -m http 开启http模块

不加-m参数,则默认执行同步程序

________________________________________________________________

[root@nfs01 /tools/GNU-Linux-x86]#sersync -dro /tools/GNU-Linux-x86/confxml.xml? # 启动服务

[root@nfs01 /tools/GNU-Linux-x86]#killall sersync? ?# 关闭服务


1.4 设置为开机启动

[root@nfs01 /tools/GNU-Linux-x86]#echo '/usr/bin/sersync -do /tools/GNU-Linux-x86/confxml.xml' >>/etc/rc.local?

[root@nfs01 /tools/GNU-Linux-x86]#tail -1 /etc/rc.local?

/usr/bin/sersync -do /tools/GNU-Linux-x86/confxml.xml



上一篇:haproxy 常用轮询算法及日常配置
下一篇:没有了
网友评论
<