当前位置 : 主页 > 操作系统 > centos >

实时同步部署(inotify,sersync)

来源:互联网 收集:自由互联 发布时间:2022-06-20
使用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 常用轮询算法及日常配置
下一篇:没有了
网友评论