inotify+rsync文件实时同步
原文转自http://dl528888.blog.51cto.com/2382721/771533/
之前做了“ssh信任与scp自动传输脚本”的技术文档,此方案是作为公司里备份的方法,但在实际的运行中,由于主服务器在给备份服务器传输的时候,我们的主服务器需要备份的文件是实时、不停的产生的,造成不知道主服务器给备份服务器传输了多少文件,磁盘空间就那么大,做备份的原因:一个是为了保持文件,另外一个是解决主服务器的磁盘饱满问题,但由于不知道备份服务器到底接收了多少文件,所以主服务器里的文件不敢删除(如果没有备份的情况下删除,问题就严重了,我这个是政府的项目,服务器里的文件都是重要的,删错了就走人~~~~(>_<)~~~~ ),所以我就采用了rsync+inotify的方式来实时同时服务器之间的文件,而且传输的过程是加密的,比scp安全多了(即使scp采用ssh信任,用密钥,也不是万无一失的)。
以下是我给公司运维做的备份技术文档,分享给大家,希望对大家有帮助。
先介绍一下rsync与inotify,都在在网上找的资料。先声明下面的rsync与inotify介绍不是我自己写的。
1、rsync
与传统的cp、tar备份方式相比,rsync具有安全性高、备份迅速、支持增量备份等优点,通过rsync可以解决对实时性要求不高的数据备份需求,例如定期的备份文件服务器数据到远端服务器,对本地磁盘定期做数据镜像等。
随着应用系统规模的不断扩大,对数据的安全性和可靠性也提出的更好的要求,rsync在高端业务系统中也逐渐暴露出了很多不足,首先,rsync同步数据时,需要扫描所有文件后进行比对,进行差量传输。如果文件数量达到了百万甚至千万量级,扫描所有文件将是非常耗时的。而且正在发生变化的往往是其中很少的一部分,这是非常低效的方式。其次,rsync不能实时的去监测、同步数据,虽然它可以通过linux守护进程的方式进行触发同步,但是两次触发动作一定会有时间差,这样就导致了服务端和客户端数据可能出现不一致,无法在应用故障时完全的恢复数据。基于以上原因,rsync+inotify组合出现了!
2、inotify
Inotify 是一种强大的、细粒度的、异步的文件系统事件监控机制,linux内核从2.6.13起,加入了Inotify支持,通过Inotify可以监控文件系统中添加、删除,修改、移动等各种细微事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,而inotify-tools就是这样的一个第三方软件。
在上面章节中,我们讲到,rsync可以实现触发式的文件同步,但是通过crontab守护进程方式进行触发,同步的数据和实际数据会有差异,而inotify可以监控文件系统的各种变化,当文件有任何变动时,就触发rsync同步,这样刚好解决了同步数据的实时性问题。
具体大家可以参照http://www.ibm.com/developerworks/cn/linux/l-ubuntu-inotify/index.html来进行学习。
接下面我们来开始进行rsync与inotify的安装、配置、测试。
- [root@nginx ~]# cd /usr/src/
- [root@nginx src]# ll
- total 16
- drwxr-xr-x 2 root root 4096 Jan 26 2010 debug
- drwxr-xr-x 2 root root 4096 Jan 26 2010 kernels
- [root@nginx src]# wget http://rsync.samba.org/ftp/rsync/src/rsync-3.0.9.tar.gz
- [root@nginx src]# tar zxvf rsync-3.0.9.tar.gz
- [root@nginx src]# cd rsync-3.0.9
- [root@nginx rsync-3.0.9]# ./configure --prefix=/usr/local/rsync
- [root@nginx rsync-3.0.9]# make
- [root@nginx rsync-3.0.9]# make install
- [root@nginx rsync-3.0.9]# cd /usr/local/rsync/
- [root@nginx rsync]# echo "rsync-pwd" >/usr/local/rsync/rsync.passwd
- [root@nginx rsync]# chmod 600 rsync.passwd
- password file must not be other-accessible
- continuing without password file
- [root@nginx rsync]# cd /usr/src/
- [root@nginx src]# wget http://cloud.github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
- [root@nginx src]# tar zxvf inotify-tools-3.14.tar.gz
- [root@nginx src]# cd inotify-tools-3.14
- [root@nginx inotify-tools-3.14]# ./configure --prefix=/usr/local/inotify
- [root@nginx inotify-tools-3.14]# make
- [root@nginx inotify-tools-3.14]# make install
- #!/bin/bash
- host=192.168.10.221
- src=/tmp/
- des=web
- user=webuser
- /usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e modify,delete,create,attrib $src \
- | while read files
- do
- /usr/bin/rsync -vzrtopg --delete --progress --password-file=/usr/local/rsync/rsync.passwd $src $user@$host::$des
- echo "${files} was rsynced" >>/tmp/rsync.log 2>&1
- done
- [root@nginx tmp]# chmod 764 rsync.sh
- [root@nginx tmp]# sh /tmp/rsync.sh &
- rsync: failed to connect to 192.168.10.221: Connection refused (111)
- rsync error: error in socket IO (code 10) at clientserver.c(107) [sender=2.6.8]
- [root@nginx tmp]# echo "/tmp/rsync.sh" >> /etc/rc.local
二、备份服务器(client,我这里为nginx-backup)
1、安装rsync(备份服务器只安装rsync)
- [root@nginx-backup ~]# cd /usr/src/
- [root@nginx-backup src]# ll
- total 16
- drwxr-xr-x 2 root root 4096 Jan 26 2010 debug
- drwxr-xr-x 2 root root 4096 Jan 26 2010 kernels
- [root@nginx-backup src]# wget http://rsync.samba.org/ftp/rsync/src/rsync-3.0.9.tar.gz
- [root@nginx-backup src]# tar zxvf rsync-3.0.9.tar.gz
- [root@nginx-backup src]# cd rsync-3.0.9
- [root@nginx-backup rsync-3.0.9]# ./configure --prefix=/usr/local/rsync
- [root@nginx-backup rsync-3.0.9]# make
- [root@nginx-backup rsync-3.0.9]# make install
- [root@nginx-backup rsync-3.0.9]# echo "webuser:rsync-pwd" > /usr/local/rsync/rsync.passwd
- [root@nginx-backup rsync]# chmod 600 rsync.passwd
- uid = root
- gid = root
- use chroot = no
- max connections = 10
- strict modes = yes
- pid file = /var/run/rsyncd.pid
- lock file = /var/run/rsync.lock
- log file = /var/log/rsyncd.log
- [web]
- path = /tmp/
- comment = web file
- ignore errors
- read only = no
- write only = no
- hosts allow = 192.168.10.220
- hosts deny = *
- list = false
- uid = root
- gid = root
- auth users = webuser
- secrets file = /usr/local/rsync/rsync.passwd
- [root@nginx-backup rsync]# /usr/local/rsync/bin/rsync --daemon --config=/usr/local/rsync/rsync.conf
- /usr/local/rsync/bin/rsync: error while loading shared libraries: libiconv.so.2: cannot open shared object file: No such file or directory,
- [root@nginx-backup rsync]# whereis libiconv.so.2
- libiconv.so: /usr/local/lib/libiconv.so.2 /usr/local/lib/libiconv.so
- [root@nginx-backup rsync]# echo "/usr/local/lib/" >> /etc/ld.so.conf
- [root@nginx-backup rsync]# ldconfig
- [root@nginx-backup rsync]# echo "/usr/local/rsync/bin/rsync --daemon --config=/usr/local/rsync/rsync.conf" >> /etc/rc.local
inotify+rsync文件实时同步的更多相关文章
- inotify+rsync文件实时同步报错:usr/local/bin/inotifywait: error while loading shared libraries: libinotifytools.so.0:
解决办法: ln -sv /usr/local/lib/libinotify* /usr/lib/ /usr/lib64/libinotifytools.so.
- 【转】inotify+rsync实现实时同步
[转]inotify+rsync实现实时同步 1.1 什么是实时同步:如何实现实时同步 要利用监控服务(inotify),监控同步数据服务器目录中信息的变化 发现目录中数据产生变化,就利用rsync服 ...
- Rsync+inotify实现文件实时同步#附shell脚本
强烈推荐先仔细看此文 https://segmentfault.com/a/1190000002427568 实验环境 centos 7.3 vm2:192.168.221.128 同步服务器 vm1 ...
- inotify+rsync实现实时同步并邮件通知
服务器之间文件实时同步,监控文件的变化,发送邮件通知,并实时同步文件. 由于人工同步多台服务器的文件比较吃力,可以借助这样一套软件,自动化的实现这样的工作. 并且可以事实监控变化发送邮件给系统管理人员 ...
- Rsync + inotify 实现文件实时同步
Rsync 用来实现触发式的文件同步. Inotify-tools是一套组件,Linux内核从2.6.13版本开始提供了inotify通知接口,用来监控文件系统的各种变化情况,如文件存取.删除.移动等 ...
- Centos 6.5配置rsync+inotify实现文件实时同步
1.安装rsync(两台机器执行相同的步骤)yum install gcc yum install rsyncd xinetd -y因为rsync是由xinetd启动的,所以需要修改一个配置vim / ...
- rsync+inotify实现文件实时同步
一.相关组件简介 1.rsync 与传统的cp.tar备份方式相比,rsync具有安全性高.备份迅速.支持增量备份等优点,通过rsync可以解决对实时性要求不高的数据备份需求,例如定期的备份文件服务器 ...
- inotify+rsync实现实时同步部署
1.1.架构规划 1.1.1架构规划准备 服务器系统 角色 IP Centos6.7 x86_64 NFS服务器端(NFS-server-inotify-tools) 192.168.1.14 Cen ...
- inotify +rsync进行实时同步
1.安装rpm -ivh http://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpmyum -y install ino ...
随机推荐
- 泰乐事(Telos)白皮书中文版 <零> 封面及目录
<泰乐事白皮书> 一个可持续发展的去中心化EOSIO网络 作者:道格拉斯·合恩 泰乐事(Telos)—— 事物的终极目标. Telos一词来源于希腊语ΤΈΛΟΣ. “一颗橡果的终极目标是成 ...
- 【C/C++】缓冲区设计--环形队列
原文链接:http://blog.csdn.net/billow_zhang/article/details/4420789 在程序的两个模块间进行通讯的时候,缓冲区成为一个经常使用的机制. 如上图, ...
- python 使用 RabbitMQ
一.RabbitMQ消息队列介绍 RabbitMQ是在两个独立得python程序,或其他语言交互时使用. RabbitMQ:erlang语言 开发的. Python中连接RabbitMQ的模块:pik ...
- windows 下安装ElasticSearch方法
1.https://www.oracle.com/technetwork/java/javase/downloads/jdk12-downloads-5295953.html 在此页面下载安装JDK1 ...
- redis事务、并发及应用场景
目录 事务概念 事务命令 乐观锁 悲观锁 并发控制及过期时间 队列 队列防丢失 阻塞队列 时间区间控制 持久化 RDB AOF 命令追加 文件写入.同步 RDB.AOF优缺点 RDB优缺 AOF优缺 ...
- Sql Server\ MySql 日期
------------------MS Sql Server------------------ declare @ctrBeginTime =null; if(@ctrBeginTime Is N ...
- 【学习笔记】RMQ-Range Minimum/Maximum Query (区间最小/最大值)
RMQ是一类询问区间最小/最大值的问题. 这类问题一般分成两类:静态区间(无修改),动态区间(带修改). 对于动态区间查询最大/最小,我们显然可以用线段树来解决…… 那么对于静态区间查询最大/最小的问 ...
- golang之数组与切片
数组 数组可以存放多个同一类型数据,数组也是一种数据类型,在Go中,数组是值类型. 数组的定义: var 数组名 [数组大小]数据类型 var a [5]int 赋初值 a[0] = 1 a ...
- 一个无法解析的外部命令and无法解析的外部符号
出现错误: 解决: 因为修改了函数定义的参数,但是没有修改函数声明的参数 把参数统一一下就行了
- shell习题第26题:监控mysql服务
[题目要求] 假设mysql密码是123456. 写脚本监控mysql服务是否正常,比如是否可以执行show processlist,并检测一下当前的mysql服务是主还是从.如果是从,请判断他的主从 ...