设为首页 收藏本站
查看: 320|回复: 0

[经验分享] 利用rsync+inotify实现数据同步

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-7-11 10:10:12 | 显示全部楼层 |阅读模式
利用rsync+inotify实现数据同步

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

二.rsync的模式:
   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.18.0.1 : /tmp  //把passwd拷贝到远程主机上
3.列表模式
   rsync -r 172.18.0.6:/tmp ##查看远程目录下的文件
  以上三种模式都可以用ssh来实现。

  规划:
   Master:172.18.1.1
   Slave:172.16.1.1
Master上安装配置rsync
  1.1 安装
     tar xvf rsync-3.0.9.tar.gz  
     cd rsync-3.0.9 ./configure  
     make && make install
  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(rw-------)或400(r--------)
    slave:helloworld
1.4 启动守护进程
    rsync --daemon   ##启动守护进程
    netstat -tlnp |grep rsync 查看是否启动,查看监听端口

三、slave端rsync设置
3.1 安装rsync
     tar xvf rsync-3.0.9.tar.gz  
     cd rsync-3.0.9 ./configure  
     make && make install
3.2 不需要配置文件,直接运行命令即可,为了不用输入密码,建立密码文件,并确保权限为600
     echo "helloworld" >/root/rsync.pass.slave
3.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  //修改权限

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

2、客户端创建备份策略,每隔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。
3、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上安装inotify-tools
下载:http://cloud.github.com/download ... y-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 安装
   tar xvf inotify-tools-3.14.tar.gz  
   cd inotify-tools-3.14 ./configure
    make && make install
  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中是否同步。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-242464-1-1.html 上篇帖子: Redhat使用CentOS的yum 下篇帖子: 通过xrdp协议远程连接 ubuntu虚拟机
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表