十三、rsync+inotify的使用

13.1、rsync简介

rsync(remote synchronize)是一个远程数据同步工具,可以通过LAN/WAN快速同步多台主机之间的文件。也可以使用rsync同步本地磁盘中的不同目录。在使用rsync进行远程同步时,可以使用两种方式:远程shell方式和C/S方式。无论本地同步目录还是远程同步数据,首次运行时将会把全部文件复制一次,以后再运行时将只复制有变化的文件或文件的变化部分。

实施备份时有两种情况:


1、需要保留备份历史归档,在备份时保留历史的备份归档,是为了在系统出现错误后能恢复到当前的状态,这可以使用完全备份和增量备份来完成。

可以使用tar命令保存归档文件

为了提高备份效率,也可以使用rsync结合tar来完成

2、无需保留备份历史归档,则只需要备份系统最‘新鲜’的状态,这可以使用rsync同步来完成,此时通常称为镜像。镜像可以分为两种:

被镜像的目录在各个主机上保存相同的位置,此时一般是为了实施负载均衡而对多个主机进行同步镜像;

被镜像的目录在哥哥主机上不保持相同的位置。

  • rsync命令

rsync是一个功能强大的工具,其命令也有很多功能选项,其命令格式为:

本地使用:
    Local:  rsync [OPTION...] SRC... [DEST]
    
远程shell模式,此时可以利用ssh协议承载其数据传输过程:
    Pull: rsync [OPTION...] [[email protected]]HOST:SRC... [DEST]
    Push: rsync [OPTION...] SRC... [[email protected]]HOST:DEST
    
服务模式,此时rsync工作为守护进程,能接收客户端的数据同步请求
    Pull: rsync [OPTION...] [[email protected]]HOST::SRC... [DEST]
          rsync [OPTION...] rsync://[[email protected]]HOST[:PORT]/SRC... [DEST]
    Push: rsync [OPTION...] SRC... [[email protected]]HOST::DEST
          rsync [OPTION...] SRC... rsync://[[email protected]]HOST[:PORT]/DEST

其中:

SRC: 要复制的源位置

DEST:复制目标位置

若本地登录用户与远程主机上的用户一致,可以省略[email protected]

使用远程shell同步时,主机名与资源名之间用‘:‘作为分隔符

使用rsync服务器同步时,主机名与资源名之间用‘::‘作为分隔符

pull,‘拉‘是指从远程主机复制文件到本地主机

push,‘推‘是指从本地主机复制文件到远程主机

当进行‘拉‘复制时,若指定一个SRC且省略DEST,则只列出资源而不复制

注意:rsync命令中,如果源路径是目录,且给复制路径时末尾有/,则会复制目录中的内容,而非目录本身;如果末尾没有/,则会同步目录本身及目录中的所有文件;目标路径末尾是否有/无关紧要。

rsync常用选项:


-n: 同步测试,不执行真正的同步过程;

-v: --verbose详细输出模式

-q: --quiet,静默模式

-c: --checksum开启校验功能

-r: --recursive递归复制;

-a: --archives归档保留文件的原有属性

-p: --perms 保留文件的权限

-t: --times 保留文件的时间戳

-l: --links 保留文件的符号链接

-g: --group 保留文件的属组

-o: --owner 保留文件的属主

-D:--devices 保留设备文件

-e ssh: 表示使用ssh协议作承载

-z: 对文件压缩后传输

--progress:显示进度条

--stats: 显示如何执行压缩和传输

--delete:删除那些接收端还保留,而发送端已经不存在的数据

  • rsync的基本使用

本地磁盘同步数据:

[[email protected] ~]# ls /home/                         #本地磁盘数据
samba-4.6.5  samba-4.6.5.tar.gz
[[email protected] ~]# rsync -a --delete /home /backups/ #将整个/home目录复制到目标目录
[[email protected] ~]# ls /backups/
home
[[email protected] ~]# rsync -a --delete /home/ /backups/#将/home目录中内容复制到目标目录
[[email protected] ~]# ls /backups/
samba-4.6.5  samba-4.6.5.tar.gz

使用基于ssh的rsync远程同步数据:

[[email protected] ~]# rsync /etc/hosts  192.168.191.129:/etc/hosts   #执行推同步
[email protected]‘s password: 
[[email protected] ~]# rsync 192.168.191.129:/etc/hosts /etc/hosts    #执行拉同步
[email protected]‘s password:

13.2、配置rsync以daemon方式运行

1、设定rsync服务器端

1) 安装并启动xinetd

[[email protected] ~]# yum -y install xinetd rsync

2) 为rsync服务提供配置文件/etc/rsyncd.conf

[[email protected] ~]# vim /etc/rsyncd.conf
# Global Settings
uid = nobody        #以什么身份运行进程
gid = nobody
use chroot = no
max connections = 10
strict modes = yes
pid file = /var/run/rsyncd.pid
log file = /var/log/rsyncd.log
list = yes
# Directory to be synced
[synced_name]
path = /home/
ignore errors = yes
read only = no
write only = no
list = false
uid = root                           #以什么身份获取文件
gid = root
auth users = username
secrets file = /etc/rsyncd.passwd    #用户账号验证文件
hosts allow = 192.168.191.129 
hosts deny = *

权限说明:


1、二者都不出现时,默认为允许访问;

2、只出现hosts allow: 白名单;但没有被匹配到的主机默认处理,允许;

3、只出现hosts deny:黑名单;出现在名单中的都被拒绝;

4、二者同时出现:先检查hosts allow,匹配到就allow,否则,检查hosts deny,匹配则拒绝;如二者均无匹配,则由默认规则处理,即为允许;

3) 配置密码文件/etc/rsyncd.passwd

文件格式(明文):username:password  (文件权限要设置为600)

[[email protected] ~]# vim /etc/rsyncd.passwd
mylinux:123
[[email protected] ~]# chmod 600 /etc/rsyncd.passwd

4) 配置服务能够启动

[[email protected] ~]# chkconfig rsync on
[[email protected] ~]# service xinetd start     #监听端口tcp/873
Starting xinetd: [  OK  ]
[[email protected] ~]# setenforce 0             #关闭selinux,很关键

2、在客户端做测试

[[email protected] ~]# rsync --list-only rsync://[email protected]/home   #查看列表
Password: 
drwxr-xr-x        4096 2017/06/15 18:06:02 .
-rwxr-xr-x    21111639 2017/06/06 15:50:37 samba-4.6.5.tar.gz
drwxr-xr-x        4096 2017/06/15 18:06:02 mylinux
drwxr-xr-x        4096 2017/06/13 17:28:15 samba-4.6.5

[[email protected] ~]# rsync -avzP --delete [email protected]::home /backups/
Password:                                      #简单同步,不保存历史文档
receiving incremental file list
./
mylinux/
mylinux/.bash_logout
          18 100%   17.58kB/s    0:00:00 (xfer#1, to-check=1013/1018)
mylinux/.bash_profile
         176 100%   85.94kB/s    0:00:00 (xfer#2, to-check=1012/1018)
mylinux/.bashrc
         124 100%   60.55kB/s    0:00:00 (xfer#3, to-check=1011/1018)

sent 45978 bytes  received 453928 bytes  199962.40 bytes/sec
total size is 470170720  speedup is 940.52
[[email protected] ~]# ls /backups/                #备份的文件
mylinux  samba-4.6.5  samba-4.6.5.tar.gz

13.3、inotify简单介绍

inotify是linux内核特性,它监控文件系统并及时项专门的应用程序发出相关事件的警告。如:读、写、删除、备份等。其操作工具为inotify-tools。要使用 inotify,必须具备一台带有2.6.13 或更新内核的 Linux 机器(以前的 Linux 内核版本使用更低级的文件监控器dnotify)。

[[email protected] ~]# uname -a                         #查看内核版本
Linux contos 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
[[email protected] ~]# ls -l /proc/sys/fs/inotify/      #查看是否支持inotify
total 0
-rw-r--r-- 1 root root 0 Jun 15 21:09 max_queued_events  #inotify队列最大长度
-rw-r--r-- 1 root root 0 Jun 15 21:09 max_user_instances #每个用户创建inotify实例最大值
-rw-r--r-- 1 root root 0 Jun 15 21:09 max_user_watches   #要同步的文件包含的目录数

[[email protected] home]# wget                                     #下载 inotify-tools源码包
[[email protected] home]#tar xf inotify-tools-3.14.tar.gz 
[[email protected] home]#cd inotify-tools-3.14
[[email protected] inotify-tools-3.14]./configure --prefix=/usr/local/inotify-tools
[[email protected] inotify-tools-3.14]make && make install

在inotify-tools工具包中有两个工具inotifywait和inotifywatch。


inotifywait:在被监控的文件系统或目录上等待特定文件系统事件(open、close、delete等)。执行后处于阻塞状态,适合脚本中使用。

inotifywatch:收集被监视文件系统使用时数据统计、指文件系统事件发出次数统计。

inotifywait  [-cmrq]  [-e <event> ] [-t <seconds> ] [--format <fmt> ][--timefmt <fmt> ] <file>     #inotifywait语法格式

常用参数:


--timefmt 时间格式

%y年 %m月 %d日 %H小时 %M分钟

--format 输出格式

%T时间 %w路径 %f文件名 %e状态

-m 始终保持监听状态,默认触发事件即退出。

-r 递归查询目录

-q 打印出监控事件

-e 定义监控的事件,可用参数:

open 打开文件

access 访问文件

modify 修改文件

delete 删除文件

create 新建文件

attrb  属性变更

Options:
        -h|--help       Show this help text.
        @<file>         Exclude the specified file from being watched.
        --exclude <pattern>
                        Exclude all events on files matching the
                        extended regular expression <pattern>.
        --excludei <pattern>
                        Like --exclude but case insensitive.
        -m|--monitor    Keep listening for events forever.  Without
                        this option, inotifywait will exit after one
                        event is received.
        -d|--daemon     Same as --monitor, except run in the background
                        logging events to a file specified by --outfile.
                        Implies --syslog.
        -r|--recursive  Watch directories recursively.
        --fromfile <file>
                        Read files to watch from <file> or `-‘ for stdin.
        -o|--outfile <file>
                        Print events to <file> rather than stdout.
        -s|--syslog     Send errors to syslog rather than stderr.
        -q|--quiet      Print less (only print events).
        -qq             Print nothing (not even events).
        --format <fmt>  Print using a specified printf-like format
                        string; read the man page for more details.
        --timefmt <fmt> strftime-compatible format string for use with
                        %T in --format string.
        -c|--csv        Print events in CSV format.
        -t|--timeout <seconds>
                        When listening for a single event, time out after
                        waiting for an event for <seconds> seconds.
                        If <seconds> is 0, inotifywait will never time out.
        -e|--event <event1> [ -e|--event <event2> ... ]
                Listen for specific event(s).  If omitted, all events are 
                listened for.
Exit status:
        0  -  An event you asked to watch for was received.
        1  -  An event you did not ask to watch for was received
              (usually delete_self or unmount), or some error occurred.
        2  -  The --timeout option was given and no events occurred
              in the specified interval of time.
Events:
        access          file or directory contents were read
        modify          file or directory contents were written
        attrib          file or directory attributes changed
        close_write     file or directory closed, after being opened in
                        writeable mode
        close_nowrite   file or directory closed, after being opened in
                        read-only mode
        close           file or directory closed, regardless of read/write mode
        open            file or directory opened
        moved_to        file or directory moved to watched directory
        moved_from      file or directory moved from 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
        delete_self     file or directory was deleted
        unmount         file system containing file or directory unmounted
inotifywatch [ options ] file1 [ file2 ] [ ... ]   #inotifywatch语法格式
Options:
        -h|--help       Show this help text.
        -v|--verbose    Be verbose.
        @<file>         Exclude the specified file from being watched.
        --fromfile <file>
                Read files to watch from <file> or `-‘ for stdin.
        --exclude <pattern>
                Exclude all events on files matching the extended regular
                expression <pattern>.
        --excludei <pattern>
                Like --exclude but case insensitive.
        -z|--zero
                In the final table of results, output rows and columns even
                if they consist only of zeros (the default is to not output
                these rows and columns).
        -r|--recursive  Watch directories recursively.
        -t|--timeout <seconds>
                Listen only for specified amount of time in seconds; if
                omitted or 0, inotifywatch will execute until receiving an
                interrupt signal.
        -e|--event <event1> [ -e|--event <event2> ... ]
                Listen for specific event(s).  If omitted, all events are 
                listened for.
        -a|--ascending <event>
                Sort ascending by a particular event, or `total‘.
        -d|--descending <event>
                Sort descending by a particular event, or `total‘.
Exit status:
        0  -  Exited normally.
        1  -  Some error occurred.
Events:
        access          file or directory contents were read
        modify          file or directory contents were written
        attrib          file or directory attributes changed
        close_write     file or directory closed, after being opened in
                        writeable mode
        close_nowrite   file or directory closed, after being opened in
                        read-only mode
        close           file or directory closed, regardless of read/write mode
        open            file or directory opened
        moved_to        file or directory moved to watched directory
        moved_from      file or directory moved from 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
        delete_self     file or directory was deleted
        unmount         file system containing file or directory unmounted
时间: 2024-11-08 21:46:20

十三、rsync+inotify的使用的相关文章

rsync+inotify的使用注意事项

rsync+inotify是一个比较常用的实时同步解决方案,但是它并不是在所有的场景中都适用的,rsync+inotify比较适用的是在10台以下的一些小规模web集群中实时同步,不过在使用rsync+inotify解决方案和日常使用rsync不同,在rsync+inotify中rsync服务端需要部署多个而客户端只有一个,在rsync的客户端上做为日常内容发布的服务器从而由它把数据推送至各个各个rsync的服务端上.其中用来监控文件系统变化的工具是inotify-tools,在rsync的客户

sersync基于rsync+inotify实现数据实时同步

一.环境描述 需求:服务器A与服务器B为主备服务模式,需要保持文件一致性,现采用sersync基于rsync+inotify实现数据实时同步 主服务器A:192.168.1.23 从服务器B:192.168.1.243 实时同步/var/atlassian目录到从服务器. 二.实施 1.从服务器192.168.1.243 rsync服务搭建 1.1安装软件包 wget http://rsync.samba.org/ftp/rsync/src/rsync-3.1.1.tar.gz tar xf r

rsync+inotify 备份

配置rsync+ inotify 实现实时同步    同步项目实战之rsync篇    1.多种备份方式的介绍    2.rsync实现目录备份    3.配置企业级无交互备份实战    4.配置rsync企业服务器实现实时同步备份方式:        完整备份 rsync 远程同步: rsync(Remote sync)  ==> 做数据备份rsync 客户端好处:优点:支持增量备份       选择性保存:符号链接,硬链接,文件属性,权限及时间等不变.       传输的执行压缩,适用于异地

centos6.5 rsync+inotify

Rsync+Inotify 在客户端安装,首先查看是否支持 [[email protected] ~]# ll /proc/sys/fs/inotify/ 总用量 0 -rw-r–r– 1 root root 0 7月   8 16:40 max_queued_events -rw-r–r– 1 root root 0 7月   8 16:40 max_user_instances -rw-r–r– 1 root root 0 7月   8 16:40 max_user_watches 有这2个

Rsync+Inotify实现文件分发

Linux内核从2.6.13开始支持inotify. Inotify可以监控文件系统的读取,修改,创建等状态.(更多信息请参考网上资料) 通过Rsync+Inotify(inotifywati)可以实现文件的批量分发功能. 1 查看linux是否支持inotify a) 内核至少是2.6.13 uname -r b) 存在/usr/include/sys/inotify.h,说明支持 c) 查看/proc/sys/fs/inotify/ total 0 -rw-r--r-- 1 root roo

配置rsync+inotify进行资源或代码同步

配置rsync+inotify进行资源推送 ------------------------ 主要步骤解析: 1.部署二级资源中转服务器,数据接收端--qqhrnhls,同时也是数据推送端,推送资源到下级站点 2.部署一级资源服务器(中心资源服务器),数据推送端--229服务器/阿里云服务器 3.在二级资源服务上部署rysnc同步,把资源更新到各个站点 1.部署二级资源中转服务器,数据接收端--qqhrnhls,同时也是数据推送端,推送资源到下级站点 二级中心资源服务器有:qqhrnhls.jy

rsync+inotify 实现服务器之间目录文件实时同步(转)

软件简介: 1.rsync 与传统的 cp. tar 备份方式相比,rsync 具有安全性高.备份迅速.支持增量备份等优点,通过 rsync 可 以解决对实时性要求不高的数据备份需求,例如定期的备份文件服务器数据到远端服务器,对本地磁盘定 期做数据镜像等. 随着应用系统规模的不断扩大,对数据的安全性和可靠性也提出的更好的要求,rsync 在高端业务系统中 也逐渐暴露出了很多不足,首先,rsync 同步数据时,需要扫描所有文件后进行比对,进行差量传输.如 果文件数量达到了百万甚至千万量级,扫描所有

CentOS5.8 x86_64下配置rsync+inotify即时同步文件

rsync可以实现触发式的文件同步,但是通过crontab守护进程方式进行触发,同步的数据和实际数据会有差异,而inotify可以监控文件系统的各种变化,当文件有任何变动时,就触发rsync同步,这样就可以解决同步数据的实时性问题.rsync+inotify我在工作中会经常用到,大家部署这种时请注意以下方面: 一.rsync服务器的uid和gid请将nobody:nobody改为www:www,因为是考虑到我们的Nginx服务器是由www:www运行的,而其对应目录很多时候有写日志或其它相关写文

总结笔记rsync+inotify

rsync+inotify实时同步intofy:强大,细粒.异步文件系统  控制文件系统中的添加,删除修改移动 权限等性能:每秒约200个文件原理:rsync server------------推送-----rsync从     inotify服务器对文件监控触发 方法:ls -l /proc/sys/fs/inotify  是否有3个max文件max_queued_events  16384----327679 max_user_instances max_user_watches8192-

rsync+inotify 实现数据的实时备份

我这个人写一些东西难免要发一番感慨,今天做rsync+inotify实现实时备份,做了好长时间没做出来,这段时间我看了好多博文还有一些视频,但自己做的时候还是没做出来,非常郁闷,就拿起书慢慢的看起来,最终我把思路整理好,又重新试验了一遍终于成功了.是的,你百分之九十的时间在实践,而剩下百分之十的时间才能到达成功,坚持加再看一遍很重要. 我先整理一下大致思路,如有时间,我再整理完整的文档出来. 1.先在两台主机里面安装rsync. 2.在服务节点上配置rsync. 3.在内容发布节点上安装inot