zoukankan      html  css  js  c++  java
  • rsync与inotify 数据同步

    发布:thebaby   来源:脚本学堂     【  
    本文介绍下,在linux系统中,使用rsync与inotify实现数据同步的一个实例,有研究文件同步的朋友可以作个参考。
    本文转自:http://www.jbxue.com/article/13934.html

    本节内容:
    rsync与inotify数据同步

    一、rsync
    它是Linux系统下文件同步可数据传输的工具,采用rsync算法使客户机与服务器,主服务器与备份服务器数据同步。rsync也能实现中断后恢复传输。rsync支持增量备份。

    二、rsync有4种模式
       1.本地模式。
       2.远程shell模式
       3.查询模式
       4.C/S模式

    安装rsync:
     

    复制代码代码示例:
    tar xvf rsync-3.0.9.tar.gz  
    cd rsync-3.0.9 
    ./configure  
    make && make install 
     

    rsync --help 查看选项
    -v, --verbose               ##详细模式
    -r, --recursive             ##递归
    -u, --update                ##更新
    -t, --times                 ##保持时间
    -z, --compress              ##启用压缩
    -o, --owner                 ##保持属主
    -g, --group                 ##保持属组
    -p, --perms                 ##保持权限
    --delete                    ##以前边目录为准,同步
    --progress                  ##显示传输过程
    --exclude=PATTERN           ##不同步模式匹配的文件
    --password-file=FILE        ##密码文件位置
    1、本地模式
     

    复制代码代码示例:
    rsync -rv /etc/passwd .  ##拷贝passwd 到当前目录 
     

    2、远程shell模式
     

    复制代码代码示例:
    rsync -rv /etc/passwd 172.16.1.3:/tmp  ##把passwd拷贝到远程主机上 
     

    3、列表模式
     

    复制代码代码示例:
    rsync -r 172.16.1.3:/tmp ##查看远程目录下的文件 
     

    前三种模式都可以用ssh来实现,本节研究第四种。
     
    规划:
    Master:172.16.1.2
    Slave:172.16.1.2
    一、Master上安装配置rsync
    1.1 安装就不说了,刚才那样就行
    1.2 配置rsync
    安装时生成配置文件样例在/usr/local/share/man/man5下,叫rsyncd.conf.5 拷备到/etc/下叫rsyncd.conf,rsyncd.conf文件由多个模块组成,包含全局参数和模块参数,前面的是注释,主要内容有:
          

      uid = nobody             ##全局配置开始,指文件传输时模块进程的uid 
            gid = nobody             ##同上gid 
            use chroot = no          ##是否让进程离开工作目录 
            max connections = 4      ##最大并发数 
            syslog facility = local5 ##记录日志的facility 
            pid file = /var/run/rsyncd.pid  ##pid位置 
            [ftp]                    ##模块配置开始 
            path = /var/ftp/pub      ##需要备份的目录,必须指定, 
            comment = whole ftp area  ##注释 
            read only = no           ##客户端是否只读 
            write only = no          ##是否只能写 
            hosts allow = *          ##允许同步主机 
            hosts deny = 192.168.0.0/24 ##禁止访问的主机 
            list = yes               ##是否允许列出所有模块 
            uid = root                
            gid = root 
            auth users = slave       ##可以连接该模块的user 
            secrets file = /etc/rsync.pass  ##密码文件在哪,需要自己建立

    1.3 建立密码文件 /etc/rsync.pass 如下格式,并确保权限为600或400
     

    复制代码代码示例:
    slave:helloworld

    1.4 启动守户进程
     

    复制代码代码示例:
    rsync --daemon   ##启动守护进程 
    netstat -tlnp |grep rsync 查看是否启动,查看监听端口

    二、slave端rsync设置
    2.1 安装rsync 看上方

    2.2 不需要配置文件,直接运行命令即可,为了不用输入密码,建立密码文件,并确保权限为600
    echo "helloworld" >/root/rsync.pass.slave

    2.3 rsync的选项过多,我们把它写到一个脚本中,需要的时候运行即可
    vi /root/rsync.sh 
     

    复制代码代码示例:
    #!/bin/bash 
    /usr/local/bin/rsync -vzrtogpg --delete --progress  
    slave@172.16.1.2::ftp /var/ftp/pub --password-file=/root/rsync.pass.slave  
     

    chmod +x /root/rsync.sh ##修改权限

    三、测试
    在master的目录中添加文件,查看是否能同步
    cp /etc/passwd /var/ftp/pub  
    slave运行脚本测试
    sh /root/rsync.sh 
    查看/var/ftp/pub 中是否多了个文件

    四、客户端创建备份策略,每隔5秒同步一次
    cron只能精确到分,下面用脚本实现每5秒同步一次。
    vi cron.sh 
     

    复制代码代码示例:
    #!/bin/bash 
    for ((i=1;i<=12;i++));do 
    echo "*/1 * * * * /root/rsync.sh" >> /var/spool/cron/root 
    sleep 5 
    done 
     

    再次在/var/ftp/pub中添加文件,看是否能正常同步。
     
    这种方式有个弊端,就是客户端每隔5秒须同步一次,这样的频率是十分浪费资源的,间隔时间长的话数据又不能保持一致,rsync每次同步都需要比对文件更改,如果文件多了,这样是非常低效的,所以我们得用更高效的方法,那就是inotify。

    inotify是什么?

    inotify 是一种强大的,细粒度的异步文件系统事件监控机制。通过inotify可以监控文件系统中的添加、删除、修改等,利用这个内核接口,第三方的软件可以监控文件系统的变化,从而触发rsync的同步操作,我们用inotify-tools来实现这个功能。

    思路:inotify-tool应该装在需要被监控的主机上,假如我们把它安装在master上,监控自己的文件系统,当文件系统发生变化时,它应该通知客户端来同步,比如:
     

    复制代码代码示例:
    ssh 172.16.1.3 '/root/rsync.sh'  
     

    前提双机ssh互信。
    还有一种做法可能比这个好些,把inotify-tool安装在slave上,来监控slave的文件系统,当slave中文件系统有变化时,就把自己的数据同步到master上去,不过好想两者角色调转了。

    五、尝试第一种思路
    5.1 master上安装notify-tools
    下载:
     

    复制代码代码示例:
    # wget http://cloud.github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz 
    tar xvf inotify-tools-3.14.tar.gz  
    cd inotify-tools-3.14 
    ./configure 
    make && make install 

    5.2 生成了两个执行程序 usr/local/bin/inotifywait  /usr/local/bin/inotifywatch,inotifywait用来监控文件系统的更改,inotifywatch用来统计更改文件系统事件的。

    5.3 inotifywait的一些参数 
    -m  --monitor     ##始终监控 
    -r  --recursive   ##递归的 
    -q  --quiet       ##打印监控事件 
    -e  --event       ##指出要监控的事件,有:modify,delete,create,attrib等  

    5.4 运行 inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%e' -e modify,delete,create,attrib /var/ftp/pub 往/var/ftp/pub中添加一个文件,查看有没有输出,如果有,代表一切正常。  
    --timefmt  时间格式 
    --format   变化文件的详细信息

    5.5 用脚本来实现,当/var/ftp/pub/中文件有变化时,让slave同步  
    vi inotify_slave.sh 
     

    复制代码代码示例:
    #!/bin/bash 
    inotifywait -mrq --timefmt '%d/%m%y %H%M' --format '%T %w%f%e'
    -e modify,delete,create,attrib /var/ftp/pub  | while read files  
    do 
         ssh 172.16.1.3 '/root/rsync.sh'    ##双机互信已经做好
    done

    5.6 测试
    运行脚本,在/var/ftp/pub中添加文件测试
     

    复制代码代码示例:
    sh inotify_slave.sh &  
    cp -R /etc/rc.d/init.d /var/ftp/pub 
     

    查看slave中文件是否同步

    六、另一种思路,在slave上安装inotify_tools
    6.1 安装就不赘述了
     
    6.2 结束master上运行的脚本

    6.3 写个脚本来监控slave的/var/ftp/pub,当/var/ftp/pub文件系统发生变化,立刻同步到master上,这样一来slave就成了真正的master,master变成了slave
    vi inotify_to_master.sh 
     

    复制代码代码示例:
    #!/bin/bash 
    inotifywait -mrq --timefmt '%d/%m%y %H%M' --format '%T %w%f%e'
    -e modify,delete,create,attrib /var/ftp/pub/  | while read files 
    do 
     rsync -vzrtogpg --delete --progress  /var/ftp/pub slave@172.16.1.2::ftp
    --password-file=/root/pass.rsync
    done
     

    6.4 往slave的/var/ftp/pub中添加文件,运行测试
     

    复制代码代码示例:
    sh inotify_to_master.sh & 
    cp -R /etc/yum /var/ftp/pub

    查看master中是否同步.

    总结:到此rsync实验完毕,rsync对数据备份挺有用的,尤其是一些资金不足的公司,可替代共享存储。

    您可能感兴趣的文章:
    linux rsync同步备份的安装与配置
    Linux下架设rsync服务器的案例分享
    rsync同步排除多个文件的方法
    linux下rsync服务配置一例
    使用rsync备份文件的方法浅析
    rsync同步时排除文件的方法
    有关rsync安装与配置的实例教程
    有关rsync服务器端配置及客户端的使用
    学习rsync服务端与客户端的配置
    使用rsync的exclude选项
    rsync文件同步配置一例
    文件同步工具rsync配置
    linux rsync同步设置指南

  • 相关阅读:
    Python中的类(上)
    Django REST Framework API Guide 07
    Django REST Framework API Guide 06
    Django REST Framework API Guide 05
    Django REST Framework API Guide 04
    Django REST Framework API Guide 03
    Django REST Framework API Guide 02
    Django REST Framework API Guide 01
    Django 详解 信号Signal
    Django 详解 中间件Middleware
  • 原文地址:https://www.cnblogs.com/linuxnotes/p/3455054.html
Copyright © 2011-2022 走看看