2015-07-07 rsync+inotify for real-time synchronization

Source: Internet
Author: User
Tags inotify rsync

Transferred from: http://chocolee.blog.51cto.com/8158455/1400596

With the expansion of application system scale, the security and reliability of data also put forward better requirements, rsync in the high-end business system also gradually exposed a lot of shortcomings, first, rsync synchronization data, need to scan all files after the comparison, for differential transmission. If the number of files reaches millions or even tens of thousands of levels, scanning all the files will be very time consuming. And what is changing is often a small part of it, which is a very inefficient way. Second, rsync cannot monitor and synchronize data in real time, although it can trigger synchronization through the way of the Linux daemon, but there must be a time difference between the two triggering actions, which results in inconsistent service and client data and the inability to fully recover data in the event of an application failure. Based on the above reasons, the rsync+inotify combination appeared!

1.1 INotify Introduction

2.1 Rsync+inotify Synchronization Logic diagram

3.1 Environment Deployment

4.1 Inotify-slave Deployment

4.1.1 Check if rsync is installed

4.1.2 Create a new rsync user and Module directory and change its user group

4.1.3 Writing the rsync daemon configuration file/etc/rsyncd.conf

4.1.4 Configuring a virtual user's password file

4.1.5 Start rsync Service

4.1.6 via Inotify-master test push

5.1 Inotify-master Deployment

5.1.1 See if the current system supports inotify

5.1.2 Download INotify source package and compile the installation

5.1.3 inotify inotifywait Command Common parameters detailed

5.1.4 Write a monitoring script and load it into the background execution

5.1.5 Real-time synchronization test

1.1 INotify Introduction

INotify is a powerful, fine-grained, asynchronous file system event control mechanism. Linux kernel from 2.6.13, joined the INotify support, through the inotify can monitor the file system to add, delete, modify, move and other events, using this kernel interface, third-party software can monitor the file system under the various changes in the file, And Inotify-tools is the implementation of monitoring software.

2.1 Rsync+inotify Synchronization Logic diagram

3.1 Environment Deployment

Host Name

Host IP Address

System version

System Kernel Version

Inotify-master

192.168.1.128

CentOS Release 6.4 (Final)

2.6.32-358.el6.x86_64

Inotify-slave

192.168.1.160

CentOS Release 6.4 (Final)

2.6.32-358.el6.x86_64

4.1 Inotify-slave Deployment

Here is the deployment of rsync service, rsync daemon working mode.

4.1.1 Check if rsync is installed

[[email protected] ~]# rpm -aq rsync

rsync-3.0.6-9.el6.x86_64

4.1.2 Create a new rsync user and Module directory and change its user group

[[email protected] mail]# useradd rsync -s /sbin/nologin  -M #添加rsync用户

[[email protected] mail]# grep rsync /etc/passwd

rsync:x:2004:2004::/home/rsync:/sbin/nologin

[[email protected] mail]# mkdir /backup  #创建rsync daemon工作模式的模块目录

[[email protected] mail]# ll -d /backup/

drwxr-xr-x. 2 root root 4096 4月  22 14:13 /backup/

[[email protected] mail]# chown rsync.rsync /backup/   #更改模块目录的用户组

[[email protected] mail]# ll -d /backup/

drwxr-xr-x. 2 rsync rsync 4096 4月  22 14:13 /backup/

4.1.3 Writing the rsync daemon configuration file/etc/rsyncd.conf

[[email protected] /]# cat /etc/rsyncd.conf

##rsyncd.conf start##

#工作中指定用户(需要指定用户)

uid = rsync

gid = rsync

#相当于黑洞.出错定位

use chroot = no

#有多少个客户端同时传文件

max connections = 200

#超时时间

timeout = 300

#进程号文件

pid file = /var/run/rsyncd.pid

#日志文件

lock file = /var/run/rsync.lock

#日志文件

log file = /var/log/rsyncd.log

#模块开始

#这个模块对应的是推送目录

#模块名称随便起

[backup]

#需要同步的目录

path = /backup/

#表示出现错误忽略错误

ignore errors

#表示网络权限可写(本地控制真正可写)

read only = false

#这里设置IP或让不让同步

list = false

#指定允许的网段

hosts allow = 192.168.1.0/24

#拒绝链接的地址,一下表示没有拒绝的链接。

hosts deny = 0.0.0.0/32

#不要动的东西(默认情况)

#虚拟用户

auth users = rsync_backup

#虚拟用户的密码文件

secrets file = /etc/rsync.password

#配置文件的结尾

#rsync_config_______________end

4.1.4 Configuring a virtual user's password file

[[email protected] /]# echo "rsync_backup:leesir" >/etc/rsync.password

[[email protected] /]# cat /etc/rsync.password

rsync_backup:leesir   #注:rsync_backup为虚拟用户,leesir为这个虚拟用户的密码

[[email protected] /]# chmod 600 /etc/rsync.password #为密码文件提权,增加安全性

[[email protected] /]# ll /etc/rsync.password

-rw-------. 1 root root 20 4月  22 14:20 /etc/rsync.password

4.1.5 Start rsync Service

[[email protected] /]# rsync --daemon   #启动rsync服务

[[email protected] /]# ps -ef |grep rsync

root     14871     1  0 14:24 ?        00:00:00 rsync --daemon

root     14873 14788  0 14:24 pts/0    00:00:00 grep rsync

[[email protected] /]# netstat -lnutp |grep rsync

tcp        0      0 0.0.0.0:873           0.0.0.0:*                   LISTEN      14871/rsync

tcp        0      0 :::873                :::*                        LISTEN      14871/rsync

4.1.6 via Inotify-master test push

Inotify-master Configure password file, test push

[[email protected] ~]# echo "leesir" >/etc/rsync.password

[[email protected] ~]# cat /etc/rsync.password

leesir   #注意:这里只要写密码即可,切记。

[[email protected] ~]# chmod 600 /etc/rsync.password

[[email protected] ~]# ll /etc/rsync.password

-rw------- 1 root root 7 4月  22 14:32 /etc/rsync.password

[[email protected] ~]# echo "hello leesir">test.txt

[[email protected] ~]# cat test.txt

hello leesir

[[email protected] ~]# rsync -avz test.txt [email protected]::backup --password-file=/etc/rsync.password

sending incremental file list

test.txt

sent 82 bytes  received 27 bytes  72.67 bytes/sec

total size is 13  speedup is 0.12

Inotify-slave Check:

[[email protected] /]# ll /backup/

总用量 4

-rw-r--r--. 1 rsync rsync 13 4月  22 14:34 test.txt

[[email protected] /]# cat /backup/test.txt

hello leesir

5.1 Inotify-master Deployment

Note:

INotify is installed and executed by the Rsync client

Enterprise Scene Stress test 200-300 synchronization limit, by the network card, disk, bandwidth and other constraints.

5.1.1 See if the current system supports inotify

[[email protected] ~]# ll /proc/sys/fs/inotify/

总用量 0

-rw-r--r-- 1 root root 0 4月  22 14:56 max_queued_events

-rw-r--r-- 1 root root 0 4月  22 14:56 max_user_instances

-rw-r--r-- 1 root root 0 4月  22 14:56 max_user_watches

#显示这三个文件则证明支持。

Expand:

/proc/sys/fs/inotify/max_queued_evnets

Represents the maximum value assigned to the number of events that can be queued in inotify instance when calling Inotify_init, an event that exceeds this value is discarded, but the In_q_overflow event is triggered.

/proc/sys/fs/inotify/max_user_instances

Represents the maximum number of inotify instatnces that each real user ID can create.

/proc/sys/fs/inotify/max_user_watches

Represents the maximum number of directories that can be monitored per inotify instatnces. If you monitor a large number of files, you need to increase the size of this value appropriately, depending on the situation.

Example: Echo 30000000 >/proc/sys/fs/inotify/max_user_watches

5.1.2 Download INotify source package and compile the installation

[email protected] tools]# wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz  #下载inotify源码包

..................................

[email protected] tools]# ll inotify-tools-3.14.tar.gz

-rw-r--r-- 1 root root 358772 3月  14 2010 inotify-tools-3.14.tar.gz

[[email protected] tools]# tar zxf inotify-tools-3.14.tar.gz

[[email protected] tools]# cd inotify-tools-3.14

[[email protected] inotify-tools-3.14]# ./configure --prefix=/usr/local/inotify-3.14 #配置inotify,并指定安装路径为/usr/local/inotify-3.14

................................

[[email protected] inotify-tools-3.14]# make && make install

................................

5.1.3 inotify inotifywait Command Common parameters detailed

[[email protected] inotify-tools-3.14]# cd /usr/local/inotify-3.14/

[[email protected] inotify-3.14]# ./bin/inotifywait --help

-r|--recursive   Watch directories recursively. #递归查询目录

-q|--quiet      Print less (only print events). #打印监控事件的信息

-m|--monitor   Keep listening for events forever.  Without this option, inotifywait will exit after one  event is received. #始终保持事件监听状态

--excludei <pattern>  Like --exclude but case insensitive.    #排除文件或目录时,不区分大小写。

--timefmt <fmt> strftime-compatible format string for use with %T in --format string. #指定时间输出的格式

--format <fmt>  Print using a specified printf-like format string; read the man page for more details.

#打印使用指定的输出类似格式字符串

-e|--event <event1> [ -e|--event <event2> ... ] Listen for specific event(s).  If omitted, all events are  listened for.   #通过此参数可以指定需要监控的事件,如下所示:

Events:

access           file or directory contents were read       #文件或目录被读取。

modify           file or directory contents were written    #文件或目录内容被修改。

attrib            file or directory attributes changed      #文件或目录属性被改变。

close            file or directory closed, regardless of read/write mode    #文件或目录封闭,无论读/写模式。

open            file or directory opened  #文件或目录被打开。

moved_to        file or directory moved to watched directory    #文件或目录被移动至另外一个目录。

move            file or directory moved to or from watched directory    #文件或目录被移动另一个目录或从另一个目录移动至当前目录。

create           file or directory created within watched directory     #文件或目录被创建在当前目录

delete           file or directory deleted within watched directory     #文件或目录被删除

unmount         file system containing file or directory unmounted  #文件系统被卸载

5.1.4 Write a monitoring script and load it into the background execution

[[email protected] scripts]# cat inotify.sh

#!/bin/bash

#para

host01=192.168.1.160  #inotify-slave的ip地址

src=/backup/        #本地监控的目录

dst=backup         #inotify-slave的rsync服务的模块名

user=rsync_backup      #inotify-slave的rsync服务的虚拟用户

rsync_passfile=/etc/rsync.password   #本地调用rsync服务的密码文件

inotify_home=/usr/local/inotify-3.14    #inotify的安装目录

#judge

if [ ! -e "$src" ] \

|| [ ! -e "${rsync_passfile}" ] \

|| [ ! -e "${inotify_home}/bin/inotifywait" ] \

|| [ ! -e "/usr/bin/rsync" ];

then

echo "Check File and Folder"

exit 9

fi

${inotify_home}/bin/inotifywait -mrq --timefmt ‘%d/%m/%y %H:%M‘ --format ‘%T %w%f‘ -e close_write,delete,create,attrib $src \

| while read file

do

#  rsync -avzP --delete --timeout=100 --password-file=${rsync_passfile} $src [email protected]$host01::$dst >/dev/null 2>&1

cd $src && rsync -aruz -R --delete ./  --timeout=100 [email protected]$host01::$dst --password-file=${rsync_passfile} >/dev/null 2>&1

done

exit 0

[[email protected] scripts]# sh inotify.sh &  #将脚本加入后台执行

[1] 13438

[[email protected] scripts]#

5.1.5 Real-time synchronization test

Inotify-master Operation:

[[email protected] scripts]# cd /backup/

[[email protected] backup]# ll

总用量 0

[[email protected] backup]# for a in `seq 200`;do touch $a;done  #创建200个文件

[[email protected] backup]# ll  --time-style=full-iso

总用量 0

-rw-r--r-- 1 root root 0 2014-04-22 15:34:08.141497569 +0800 1

-rw-r--r-- 1 root root 0 2014-04-22 15:34:08.172497529 +0800 10

-rw-r--r-- 1 root root 0 2014-04-22 15:34:08.235497529 +0800 100

-rw-r--r-- 1 root root 0 2014-04-22 15:34:08.236497529 +0800 101

-rw-r--r-- 1 root root 0 2014-04-22 15:34:08.237497529 +0800 102

...................................

Inotify-slave Check

[[email protected] backup]# ll  --time-style=full-iso

总用量 0

-rw-r--r--. 1 rsync rsync 0 2014-04-22 15:34:08.393823754 +0800 1

-rw-r--r--. 1 rsync rsync 0 2014-04-22 15:34:08.393823754 +0800 10

-rw-r--r--. 1 rsync rsync 0 2014-04-22 15:34:08.393823754 +0800 100

-rw-r--r--. 1 rsync rsync 0 2014-04-22 15:34:08.393823754 +0800 101

-rw-r--r--. 1 rsync rsync 0 2014-04-22 15:34:08.393823754 +0800 102

..........................

This article is from the "Chocolee" blog, make sure to keep this source http://chocolee.blog.51cto.com/8158455/1400596

2015-07-07 rsync+inotify for real-time synchronization

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.