经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » Linux/Shell » 查看文章
Redhat6,rsync+inotify实时备份
来源:cnblogs  作者:道观猫  时间:2021/4/19 8:49:56  对本文有异议

rsync是linux系统下文件同步和数据传输工具,

他有四种应用模式:1.本地模式2.远程shell模式3.rsync列表模式4.服务器模式

这里我们搭建的是服务器模式,这种模式是基于C/S模式,需要rsync在后台启用一个守护进程,这个进程在rsync服务器端永久进行,用于接收文件传输请求。

 

举个例子,假设有个网站,数据每天会更新,为保数据安全,建立一个远程容灾系统。但,rsync需要触发才能更新,虽然可以使用linux守护进程crontab定时触发,但两次触发动作是有一定时间差,可能导致服务端与客户端数据不一致,无法在出现灾害时,完全恢复数据。

在这里我们用到inotify工具,它是一个异步的文件监控文件系统,监控文件系统的各种变化,当文件有任何变化,就会触发rsync同步,这刚好解决数据实时同步问题。

节点名称

用途

IP

网页路径

server

内容发布节点

193.168.0.20

/webdata

web2

服务节点

193.168.0.22

/web2data

web3

服务节点

193.168.0.23

/web3data

inotify是用来监控文件系统的,所以一定安装在内容发布节点,服务节点无需安装,只需安装rsync。

1.在服务器节点上配置rsync

  1. [root@web2 ~]# tar xzf apt/rsync-3.0.4.tar.gz
  2. [root@web2 ~]# cd rsync-3.0.4/
  3. [root@web2 rsync-3.0.4]# ./configure
  4. [root@web2 rsync-3.0.4]# make && make install

1.2.安装好rsync时没有rsyncd.con配置文件的,我们自行建一个就好

web2节点的rsyncd.conf

  1. [root@web2 ~# vim /etc/rsyncd.conf
  2. uid = nobody
  3. gid = nobody
  4. use chroot = no
  5. max connections = 10
  6. strict modes = yes
  7. pid file = /var/run/rsyncd.pid
  8. lock file = /var/run/rsync.lock
  9. log file = /var/log/rsyncd.log
  10.  
  11. [web2]
  12. path = /web2data
  13. comment = web2 file
  14. ignore errors
  15. read only = no
  16. write only = no
  17. hosts allow = *
  18. list = false
  19. uid = root
  20. gid = root
  21. auth users = web2user
  22. secrets file = /etc/web2.pass

1.3.web3节点的rsyncd.conf

  1. [root@web3 ~# vim /etc/rsyncd.conf
  2. uid = nobody
  3. gid = nobody
  4. use chroot = no
  5. max connections = 10
  6. strict modes = yes
  7. pid file = /var/run/rsyncd.pid
  8. lock file = /var/run/rsync.lock
  9. log file = /var/log/rsyncd.log
  10.  
  11. [web3]
  12. path = /web3data
  13. comment = web3 file
  14. ignore errors
  15. read only = no
  16. write only = no
  17. hosts allow = *
  18. list = false
  19. uid = root
  20. gid = root
  21. auth users = web3user
  22. secrets file = /etc/web3.pass

auth user 是定义的用户,与linux系统用户无关,用来连接该模块的用户名。

secretes file 是指定包含“用户名:密码”格式文件,用户名就是auth user定义的用户名

  1. [root@web2 ~]# more /etc/web2.pass
  2. web2user:admin
  3. [root@web2 ~]# chmod 600 /etc/web2.pass
  4.  
  5. [root@web3 ~]# more /etc/web3.pass
  6. web3user:admin
  7. [root@web3 ~]# chmod 600 /etc/web3.pass

1.4.启动rsync守护进程(web2,web3)

  1. [root@web2 ~]# /usr/local/bin/rsync daemon
  2. [root@web2 ~]# ps -ef |grep rsync
  3. root 38588 1 0 Mar23 ? 00:00:00 /usr/local/bin/rsync --daemon
  4. [root@web2 ~]# echo "/usr/local/bin/rsync --daemon" >> /etc/rc.local #加入自启动文件

2.配置内容发布点

2.1.发布点主要是将静态文件实时同步到两个服务器节点,这个过程我们用一个shell脚本实现

  1. #!/bin/bash
  2. host1=193.168.0.22
  3. host2=193.168.0.23
  4.  
  5. src=/webdata/
  6. dst1=web2
  7. dst2=web3
  8. user1=web2user
  9. user2=web3user
  10.  
  11. /usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e close_write,delete,cre
  12. ate,attrib $src | while read files
  13. do
  14. /usr/local/bin/rsync -vzrtopg --delete --progress --password-file=/etc/server.pass $src $user1@$h
  15. ost1::$dst1
  16. /usr/local/bin/rsync -vzrtopg --delete --progress --password-file=/etc/server.pass $src $user2@$h
  17. ost2::$dst2
  18. echo "${files} was rsynced" >> /tmp/rsync.log 2>&1
  19. done

2.2.连接备份模块密码

  1. [root@redhat6 ~]# more /etc/server.pass
  2. admin

2.3.这里为了方便把shell脚本就放在webdata目录下,命名为inotify.sh,并给予执行权限,放到后台运行

  1. [root@redhat6 ~]# chmod 755 /webdata/inotify.sh
  2. [root@redhat6 ~]# nohup /webdata/inotify.sh &

2.4.加入系统自启动文件

  1. [root@redhat6 ~]# echo "/webdata/inotify.sh &" >> /etc/rc.local

完成所有配置后,就可以在网站发布节点添加,删除,写入文件了,会看到2个服务器节点

跟随发布节点跟更新文件。(初次如果没出现同步,稍等片刻,内容发布节点需要跟服务器节点模块对接,出现同步后,后面的更新就会快多了。)

 

  • 有时候会遇到这样情况:向inotify监控目录写入一个很大的文件,当写入文件需要一段时间,inotify会持续不断输出该文件被更新的信息,这样就会持续触发rsync同步,占用大量系统资源,针对这样情况,最好方法是等待文件完全写入完,再触发更新,可以修改“-e close_write,delete,create,atrrib”

 

原文链接:http://www.cnblogs.com/daoguanmao/p/rsync-inotify.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号