rsync+inotify实现服务器之间文件实时同步

原文转自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的安装、配置、测试。

下面是2个服务器的结构,分别为主机名、ip、状态、内核、位数、同步的目录,并将2台服务器均是redhat5.4发行版本。

一、主服务器(server端,我这里是nginx)
其中主服务器需要安装rsync与inotify,主服务器作为server,向备份服务器client传输文件
1、安装rsync
  1. [root@nginx ~]# cd /usr/src/  
  2. [root@nginx src]# ll  
  3. total 16  
  4. drwxr-xr-x 2 root root 4096 Jan 26  2010 debug  
  5. drwxr-xr-x 2 root root 4096 Jan 26  2010 kernels  
  6. [root@nginx src]# wget  http://rsync.samba.org/ftp/rsync/src/rsync-3.0.9.tar.gz  
  7. [root@nginx src]# tar zxvf rsync-3.0.9.tar.gz  
  8. [root@nginx src]# cd rsync-3.0.9  
  9. [root@nginx rsync-3.0.9]# ./configure --prefix=/usr/local/rsync  
  10. [root@nginx rsync-3.0.9]# make  
  11. [root@nginx rsync-3.0.9]# make install  
2、建立密码认证文件
  1. [root@nginx rsync-3.0.9]# cd /usr/local/rsync/  
  2.  
  3. [root@nginx rsync]# echo "rsync-pwd" >/usr/local/rsync/rsync.passwd   
  4.  
其中rsync-pwd可以自己设置密码,rsync.passwd名字也可以自己设置

 

  1. [root@nginx rsync]# chmod 600 rsync.passwd 
无论是为了安全,还是为了避免出现以下错误,密码文件都需要给600权限
  1. password file must not be other-accessible  
  2. continuing without password file  
3、安装inotify
  1. [root@nginx rsync]# cd /usr/src/  
  2. [root@nginx src]# wget http://cloud.github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz  
  3. [root@nginx src]# tar zxvf inotify-tools-3.14.tar.gz  
  4. [root@nginx src]# cd inotify-tools-3.14  
  5. [root@nginx inotify-tools-3.14]# ./configure --prefix=/usr/local/inotify  
  6. [root@nginx inotify-tools-3.14]# make  
  7. [root@nginx inotify-tools-3.14]# make install  
4、创建rsync复制脚本
此项功能主要是将server端的目录/tmp里的内容,如果修改了(无论是添加、修改、删除文件)能够通过inotify监控到,并通过rsync实时的同步给client的/tmp里,下面是通过shell脚本实现的。
  1. #!/bin/bash  
  2. host=192.168.10.221  
  3. src=/tmp/         
  4. des=web 
  5. user=webuser 
  6. /usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e modify,delete,create,attrib $src \  
  7. | while read files  
  8. do  
  9. /usr/bin/rsync -vzrtopg --delete --progress --password-file=/usr/local/rsync/rsync.passwd $src $user@$host::$des  
  10. echo "${files} was rsynced" >>/tmp/rsync.log 2>&1  
  11. done  
注意:经过1楼的提示,我发现如果把rsync.log的放到tmp(备份的目录)或发送一直复制的问题,所以建议各位吧rsync的日志放到其他的目录下(非备份目录)。
其中host是client的ip,src是server端要实时监控的目录,des是认证的模块名,需要与client一致,user是建立密码文件里的认证用户。
把这个脚本命名为rsync.sh,放到监控的目录里,比如我的就放到/tmp下面,并给予764权限
  1. [root@nginx tmp]# chmod 764 rsync.sh 
然后运行这个脚本
  1. [root@nginx tmp]# sh /tmp/rsync.sh & 
请记住,只有在备份服务器client端的rsync安装并启动rsync之后,在启动rsync.sh脚本,否则有时候会满屏出现:
  1. rsync: failed to connect to 192.168.10.221: Connection refused (111)  
  2. rsync error: error in socket IO (code 10) at clientserver.c(107) [sender=2.6.8]  
我们还可以把rsync.sh脚本加入到开机启动项里
  1. [root@nginx tmp]# echo "/tmp/rsync.sh" >> /etc/rc.local 

二、备份服务器(client,我这里为nginx-backup

1、安装rsync(备份服务器只安装rsync

  1. [root@nginx-backup ~]# cd /usr/src/  
  2. [root@nginx-backup src]# ll  
  3. total 16  
  4. drwxr-xr-x 2 root root 4096 Jan 26  2010 debug  
  5. drwxr-xr-x 2 root root 4096 Jan 26  2010 kernels  
  6. [root@nginx-backup src]# wget  http://rsync.samba.org/ftp/rsync/src/rsync-3.0.9.tar.gz  
  7. [root@nginx-backup src]# tar zxvf rsync-3.0.9.tar.gz  
  8. [root@nginx-backup src]# cd rsync-3.0.9  
  9. [root@nginx-backup rsync-3.0.9]# ./configure --prefix=/usr/local/rsync  
  10. [root@nginx-backup rsync-3.0.9]# make  
  11. [root@nginx-backup rsync-3.0.9]# make install  
2、建立用户与密码认证文件
  1. [root@nginx-backup rsync-3.0.9]# echo "webuser:rsync-pwd" > /usr/local/rsync/rsync.passwd 
请记住,在server端建立的密码文件,只有密码,没有用户名;而在备份服务端client里建立的密码文件,用户名与密码都有。
  1. [root@nginx-backup rsync]# chmod 600 rsync.passwd 
需要给密码文件600权限
3、建立rsync配置文件
  1. uid = root 
  2. gid = root 
  3. use chroot = no 
  4. max connections = 10 
  5. strict modes = yes 
  6. pid file = /var/run/rsyncd.pid  
  7. lock file = /var/run/rsync.lock  
  8. log file = /var/log/rsyncd.log  
  9. [web]  
  10. path = /tmp/  
  11. comment = web file  
  12. ignore errors  
  13. read only = no 
  14. write only = no 
  15. hosts allow = 192.168.10.220  
  16. hosts deny = *  
  17. list = false 
  18. uid = root 
  19. gid = root 
  20. auth users = webuser 
  21. secrets file = /usr/local/rsync/rsync.passwd  
其中web是server服务端里的认证模块名称,需要与主服务器里的一致,以上的配置我的自己服务器里的配置,以供参考。
把配置文件命名为rsync.conf,放到/usr/local/rsync/目录里
启动rsync
  1. [root@nginx-backup rsync]# /usr/local/rsync/bin/rsync --daemon --config=/usr/local/rsync/rsync.conf 
如果出现以下问题:
  1. /usr/local/rsync/bin/rsync: error while loading shared libraries: libiconv.so.2: cannot open shared object file: No such file or directory, 
可以采用下面方法解决
  1. [root@nginx-backup rsync]# whereis libiconv.so.2  
  2. libiconv.so: /usr/local/lib/libiconv.so.2 /usr/local/lib/libiconv.so  
找到所需模块所在的目录,然后把此目录添加到/etc/ld.so.conf里,并更新库文件
  1. [root@nginx-backup rsync]# echo "/usr/local/lib/" >> /etc/ld.so.conf  
  2.  [root@nginx-backup rsync]# ldconfig  
我们可以把rsync脚本加入到开机启动项里
  1. [root@nginx-backup rsync]# echo "/usr/local/rsync/bin/rsync --daemon --config=/usr/local/rsync/rsync.conf" >> /etc/rc.local 
现在rsync与inotify在server端安装完成,rsync在备份服务器client端也安装完成
下面是server端的tmp文件情况

下面是client端tmp的文件情况

接下来我们来做一下测试,在server里创建个test-rsync文件,看看client是否能收到

在看client端是否有test-rsync文件,同时client端的tmp目录文件是否与server端的文件完全一致

可以看到在client端,已经收到了test-rsync文件,而且client的tmp里的文件与server里tmp的文件完全相同、文件数目一致。
现在rsync与inotify的搭建与配置完成了,并实现了服务器直接数据的实时同步;大家可以根据自己的需要来进行相应的配置。
BTW:在rsync+inotify这种备份方法的时候,我公司遇到了一个问题,那就是主服务已经给备用服务同步完数据了,但主服务器磁盘看见满了,需要把已经备份的文件删除,但同时在备份服务器里保留主服务器里的文件,也就是说主服务器里删除文件的时候,备份服务器里不跟着删除文件,我查看了很多英文文档,测试了很多遍,最后找到了一个解决方法,那就是在主服务器里,把rsync.sh这个脚本里第9行的--delete参数给去掉,就可以解决这个问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/576042.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

总结一下HtmlAgilityPack

参考&#xff1a;http://www.cnblogs.com/yukaizhao/archive/2011/07/25/xpath.html 关于 XPath Axes&#xff0c;child和descendant的区别在于child只包含下一级的子节点&#xff0c;而descendant包含所有的子节点&#xff0c;下一级&#xff0c;再下一级&#xff0c;再下一级…

vmware workstation克隆linux后修改网卡为eth0方法

原文出自http://www.2cto.com/os/201306/222812.htmlvmware workstation克隆linux后修改网卡为eth0方法场景&#xff1a; vmware workstation 8, guest OS:CentOS 6.2. Host OS:windows 7 问题&#xff1a; 克隆RHEL 6.3 后网卡名字有两个eth0和eth1,实际起作用的是eth1,eth0是…

zabbix监控特定进程

原文出自http://www.2cto.com/os/201405/302249.html 由于一些服务器上跑着一些重要程序&#xff0c;需要对它们进行监控&#xff0c;公司用的是zabbix监控&#xff0c;之前都是在zabbix中添加自定义脚本对特定程序进行监控&#xff0c;最近看了zabbix的官方文档&#xff0c;发…

linux简单几个小命令

踢除其他用户]pkill -kill -t tty 退除所有人[查看系统版本]cat /etc/issue | awk {if(NR1)print $1 FS $3}//NR:行数 FS:空格[快速删除]rsync --delete-before -a -H -v --progress --stats[查看逻辑CPU个数]cat /proc/cpuinfo |grep "processor"|sort -u|wc -l[查看…

OMA 设备管理的通知发起的会话OMA Device Management Notification Initiated Session

介绍 一些设备不能持续侦听是否有需要连接的服务器。有的设备基于安全考虑不希望“开放一个端口”&#xff08;比如主动接受连接&#xff09;。无论如何&#xff0c;大多数设备可以接受未经请求的信息&#xff0c;有时也叫做“通知”。比如一些手持设备可以接收SMS文本短信息。…

zabbix中常用到的几个key:

1、监控端口的&#xff1a;net.tcp.port[,3306]/usr/local/zabbix/bin/ -s192.168.8.120 -knet.tcp.port[,3306] 返回1为192.168.8.120的端口3306存在&#xff0c;0为不存在2、监控进程的&#xff1a;proc.num[mysqld]/usr/local/zabbix/bin/zabbix_get -s192.168.8.120 -kproc…

【zabbix个性化监控之一】TCP连接数

一、在被监控端上设置 主要命令&#xff1a; netstat -an | awk /^tcp/ {S[$NF]} END {for(a in S) print a, S[a]}1netstat -an | awk /^tcp/ {S[$NF]} END {for(a in S) print a, S[a]}输出内容&#xff1a; TIME_WAIT 100 CLOSE_WAIT 5 FIN_WAIT1 6 ESTABLISHED 161 S…

石头剪刀布 -2013编程之美全国测试赛 每日一练

Description&#xff1a;石头剪刀布是常见的猜拳游戏。石头胜剪刀&#xff0c;剪刀胜布&#xff0c;布胜石头。如果两个人出拳一样&#xff0c;则不分胜负。 一天&#xff0c;小A和小B正好在玩石头剪刀布。已知他们的出拳都是有规律的&#xff0c;比如&#xff1a;“石头-布-石…

CentOS 6.4下PXE+Kickstart无人值守安装操作系统

原文出自http://http://www.cnblogs.com/mchina/p/centos-pxe-kickstart-auto-install-os.html 一、简介 1.1 什么是PXE PXE(Pre-boot Execution Environment&#xff0c;预启动执行环境)是由Intel公司开发的最新技术&#xff0c;工作于Client/Server的网络模式&#xff0c;支持…

CSS3属性box-shadow使用教程

CSS3的box-shadow属性可以让我们轻松实现图层阴影效果。我们来实战详解一下这个属性。 1. box-shadow属性的浏览器兼容性 先来看一个这个属性的浏览器兼容性: Opera: 不知道是从哪个版本开始支持的&#xff0c;我在发这篇文章测试的时候&#xff0c;正好更新了Opera到最新的10.…

实战Zabbix-Server数据库MySQL的libdata1文件过大

原文出自http://www.linuxidc.com/Linux/2014-12/110353.htm zabbix自动清理30天前的数据 zabbix属于一个细度化的监控工具&#xff0c;其入库数据随着细度的增加相应的入库数据量也会较大&#xff0c;当数据量到一定时候的时候其反映速度会比较慢&#xff0c;尽管其监控服务在…

RadioButtonList Enabled=false 文字背景

RadioButtonList有个属性RepeatLayout"Flow"&#xff0c;可以防止控件与前面的文本换行&#xff0c;但是&#xff0c;使用这个属性之后&#xff0c;有个奇怪的问题&#xff0c;RadioButtonList 在Enabledfalse时&#xff0c;文字成灰色&#xff0c;在打印时&#xff…

我的LAMP源码编译安装linux+Apache+mysql+php

httpd-2.2.17.tar.gz mysql-5.1.51.tar.gz php-5.2.17.tar.gz mysql的安装 #安装需要的库 yum -y install ncurses ncurses-devel #创建MySQL用户及用户组 groupadd mysql useradd -g mysql -s /sbin/nologin mysql cp /home/root/mysql-5.1.41.tar.gz /usr/local/src c…

编译php,ldap问题

今天在ubunte上安装php&#xff0c;ldap模块一直报错&#xff1a; configure: error: Cannot find ldap libraries in /usr/lib. 网上都说解决方法&#xff1a; cp -frp /usr/lib64/libldap* /usr/lib/ 结果我的/usr目录下 根本就没有lib64 还是找找libldap.so在哪吧 执行&…

mysql 5.7.13 安装配置方法图文教程(linux)

原文出自&#xff1a;http://www.jb51.net/article/87160.htm 1系统约定 安装文件下载目录&#xff1a;/data/software Mysql目录安装位置&#xff1a;/usr/local/mysql 数据库保存位置&#xff1a;/data/mysql 日志保存位置&#xff1a;/data/log/mysql 2下载mysql 在官网&am…

hasOwnProperty和isPrototypeOf

hasOwnProperty和isPrototypeOf hasOwnProperty&#xff1a;是用来判断一个对象是否有你给出名称的属性或对象,此方法无法检查该对象的原型链中是否具有该属性&#xff0c;该属性必须是对象本身的一个成员。 isPrototypeOf是用来判断要检查其原型链的对象是否存在于指定对象实…

linux下防火墙加白名单

在linux系统中安装yum install iptables-services 然后 vi /etc/sysconfig/iptables # Generated by iptables-save v1.4.7 on Sun Aug 28 12:14:02 2016*filter:INPUT ACCEPT [0:0]:FORWARD ACCEPT [0:0]:OUTPUT ACCEPT [0:0]-N whitelist-A whitelist -s 8.8.8.8 -j ACCEPT-…

Linux LVM硬盘管理及LVM扩容

原文出自http://www.cnblogs.com/gaojun/archive/2012/08/22/2650229.html 一、LVM简介 LVM是 Logical Volume Manager(逻辑卷管理)的简写&#xff0c;它由Heinz Mauelshagen在Linux 2.4内核上实现。LVM将一个或多个硬盘的分区在逻辑上集合&#xff0c;相当于一个大硬盘来使用&…

android系统框架()

Android系统框架介绍: 1.大体框架: -src目录: 主要是完成java代码的编写 -assets目录: 资源目录 -res目录: 存储图片,布局文件和字符串,菜单等文件 -bin目录: 输出文件夹,如生成的APK文件 -project.properties: 工程属性文件配置 -gen目录: 系统自动生成的源代码目录 R.java默认…

zabbix服务端远程执行命令

执行一些命令或者脚本就行了。 但zabbix远程执行命令需要客户端的zabbix用户要有sudo权限&#xff0c;zabbix的客户端要改的地方是配置文件里 EnableRomoteCommands1 然后要更改的是visudo里的给zabbix用户赋予权限 zabbix ALLNOPASSWD:ALL 然后把defaults requiretty注释掉。…