手机版
你好,游客 登录 注册
背景:
阅读新闻

rsync+inotify实现Git数据实时同步备份

[日期:2014-10-22] 来源:Linux社区  作者:pangge [字体: ]

定时备份和实时备份

      说到备份,无疑于定时备份和实时同步备份。定时备份可以通过脚本或者Crontab来实现,而实时同步备份可以通过某些接口监控文件的各种变化情况来实现的(比如内核接口inotify);通过对比可以发现对数据信息要求高的环境使用实时同步备份可以更好更有利的保护数据的安全性。

软件介绍之rsync

rsync说明

      rsync 远程同步,同步是把数据从缓冲区同步到磁盘上去的、数据在内存缓存区完成之后还没有写入到磁盘中去、所以有时候要同步到磁盘中去的,而rsync说白了和复制差不多、能将一个文件从一个地方复制到另外一个地方的、但是他也可以实现跨主机复制,兼具了cp和scp的功能,但是在跨主机时不具备scp的加密功能。
      rsync有一个特点,就是当你用rsync复制或跨主机复制时如果另一端也有一个同名的文件,他会先对比两个数据的md5码是不是一致,如果不一致就会复制,并覆盖,如果一致他将不会复制,所以这是一个快速复制工具,尤其是同步目录时,特别好用。

利用inotifywait监控主机文件和目录 http://www.linuxidc.com/Linux/2013-03/81075.htm

利用inotify+rsync实现Linux文件批量更新 http://www.linuxidc.com/Linux/2012-01/52132.htm

inotify-tools+rsync实时同步文件安装和配置 http://www.linuxidc.com/Linux/2012-06/63624.htm

rsync同步完整配置 http://www.linuxidc.com/Linux/2013-06/85781.htm

CentOS 6.5下Rsync远程同步 http://www.linuxidc.com/Linux/2014-05/101084.htm

rsync常用选项 

  • -a    归档,复制时可以保存原有的属主属组等属性信息,甚至包含一点额外的属性(如访问控制列表)
  • -v    详细输出模式、显示详细过程的
  • -q    静默模式,尽可能输出少的信息
  • -r    递归复制
  • -c    打开校验开关,强制对文件传输进行校验
  • -b    创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新命名为~filename。可以使用--suffix选项指定不同的备份文件前缀。可以使用--backup-dir将备份文件(~filename)存放在此目录下
  • -p    保留文件的权限
  • -t    保留文件的时间戳
  • -l    保留文件的符号链接
  • -g    保留文件的属组
  • -o    保留文件的属主
  • -n    显示哪些文件将被传输
  • -W    拷贝文件,不进行增量检查
  • --delete      删除那些DST中SRC没有的文件
  • --exclude    指定排除不需要传输的文件模式
  • --progress    在传输时显示传输过程(进度条)
  • --stats      显示状态
  • --password-file=FILE    指定从FILE中得到密码
  • --config=FILE            指定其他的配置文件,不使用默认的rsyncd.conf

软件介绍之inotify

inotify介绍

      Inotify 是一个Linux特性,是一种强大的、细粒度的、异步的文件系统监控机制,linux内核从2.6.13起便加入了Inotify支持,通过Inotify可以监控文件系统中添加、修改、移动等各种细微事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,而Inotify-tools就是这样的一个第三方软件。Inotify反应灵敏,用法简单,并且比使用Crontab轮询高效很多。

inotify常见监控事件

  • IN_ACCESS:    文件被访问
  • IN_MODIFY:    文件被修改
  • IN_ATTRIB:    文件属性被修改
  • IN_CLOSE_WRITE:    以可写方式打开的文件被关闭
  • IN_CLOSE_NOWRITE:  以不可写方式打开的文件被关闭
  • IN_OPEN:      文件被打开
  • IN_MOVED_FROM:      文件被移出监控的目录
  • IN_MOVED_TO:        文件被移入监控着的目录
  • IN_CREATE:    在监控的目录中新建文件或子目录
  • IN_DELETE:    文件或目录被删除
  • IN_DELETE_SELF,    自删除,即一个可执行文件在执行时删除自己
  • IN_MOVE_SELF,      自移动,即一个可执行文件在执行时移动自己

inotify-tools介绍

      inotify-tools是一套组件,它包括一个C库和几个命令行工具,这些命令行工具可用于通过命令行或脚本对某文件系统的事件进行监控。inotify-tools提供的两个命令行工具(inotifywait,inotifywatch)就是可以监控文件系统下文件的各种变化情况。

工具一--inotifywait命令介绍:

      inotifywait:通过inotifyAPI等待被监控文件上相应事件并返回监控结果,默认情况下,正常的结果返回至标准输出,诊断类的信息则返回至标准错误输出。他可以监控对应监控对象上指定的事件后退出,也可以进行持续的监控。
      inotifywait尤其适合用于在脚本中等待某事件的发生,并可基于特定的事件执行相应操作。如将其用于脚本中监控某指定目录中的文件上的修改、新建、删除、属性信息的改变,而后使用rsync命令将事件对应的文件同步到其他主机上。

工具一--inotifywait之常用选项介绍:

-m          inotifywait的默认动作是在监控至指定文件的特定事件发生一次后就退出了,而是要此选项则可实现持续性的监控。

-r          递归监控指定目录下的所有文件,包含新建的文件或子目录;如果要监控的目录中文件数量巨大,则通常需要修改/proc/sys/fs/inotify/max_users_watchs内核参数,因为其默认为8192.

-e<event>  指定要监控的特定事件,默认是监控所有的事件,包括access,modify,attrib,close_write,close_nowirte,close,open,moved_to,moved_from,move,create,delete,delete_selt等;

--timefmt <fmt>    当在--format选项中使用%T时,--timefrt选项则可以用来自定义的符合strftime规范的时间格式,此时间格式可用的格式符可以通过strftime的手册页获取;--timefrt后常有的参数是'%d/%m/%y %H:%M';

--format <fmt>      自定义inotiywait的输出格式,如--format'%T %w %f';常有的选项如下:

        %w        显示被监控文件的文件名;

        %f        如果发生某些事件对象是目录,则显示被监控目录的名字;默认显示为空串;

        %T        使用–timefmt选项中自定义的时间格式;


工具二--inotifywatch命令介绍:

通过inotifyAPI收集被监控文件或目录的相关事件并输出统计信息。

配置rsyncd+inotify实现实时同步

环境介绍

目标主机-->rsync服务器端:CentOS 6.5

源文件主机-->rsync客户端:Ubuntu 12.04

配置rsync服务器端:

本次环境中采用rsync守护进程的方式进行数据同步。

安装rsync相关程序包

###rsync程序系统默认会安装,若没有安装可在此安装###

[root@mon-zabbix ~]# yum -y install rsync

###rsync服务通常基于超级守护进程xinetd管理的方式来实现因此需要安装xinetd###

[root@mon-zabbix ~]# yum -y install xinetd

提供rsync配置文件

###创建配置文件目录###

[root@mon-zabbix ~]#mkdir -p /etc/rsyncd

###创建rsync主配置文件###

[root@mon-zabbix ~]#touch /etc/rsyncd/rsyncd.conf

###这个配置文件有两部分组成,一是全局定义,二是定义rsync共享目录###

[root@mon-zabbix ~]# cat /etc/rsyncd.conf

# Global Settings 全局定义

uid =root        #使用哪个用户运行或获取数据

gid = root        #用户都以来宾账号的方式运行

use chroot = no      #在服务运行时要不要把他锁在家目录中

max connections = 10    #作为服务器端最大并发连接数

strict modes = yes      #表示是否工作在严格模式下,严格检查文件权限等相关信息

pid file = /var/run/rsyncd.pid      #定义pid文件路径

log file = /var/log/rsyncd.log      #定义日志文件存放路径的

# Directory to be synced            #定义共享目录

[Git_rsync]        #要同步的目录名称,多个目录名称不能重名

path = /data1/gitbackup/git/        #定义目录的路径

list = false            #是否允许用户列出文件列表

read only = no          #如果打算让别人仅仅是来拉取数据的,yes就可以了,如果打算让别人推送过来做备份的那就为no,表示客户端是否可以推送的

write only = no          #只允别人在里面写数据,但不可以拉取数据

ignore errors = yes      #表示如果中间同步过程有一个文件出错了是要继续同步还是中止同步,yes表示继续同步,no表示中止同步

hosts allow = 10.171.215.112          #白名单,那些主机可以访问

auth users = git        #做用户验证(认证)的,只允许那个用户来同步

secrets file = /etc/rsyncd/rsyncd.secrets      #存放验证(认证)用户的密码的

###由于守护进程程序xinetd是读取默认rsync的配置(/etc/rsyncd.conf)###

[root@mon-zabbix ~]#ln -sv /etc/rsyncd/rsyncd.conf /etc/rsyncd.conf

提供rsync认证用户密码文件

[root@mon-zabbix ~]#vim /etc/rsyncd/rsyncd.secrets

git:hui1234        #其中冒号前的是用户名,冒号后的是对应用户的密码

###由于此密码文件是明文显示,所以文件权限设为600###

[root@mon-zabbix ~]#chmod 600 /etc/rsyncd/rsyncd.secrets

设置rsync开机自启动

[root@mon-zabbix ~]#chkconfig rsync on

启动rsync服务

[root@mon-zabbix ~]#service xinetd start

查看rsync监听信息

[root@mon-zabbix ~]# netstat -tanlp | grep xinetd

tcp        0      0 0.0.0.0:873                0.0.0.0:*                  LISTEN      27400/xinetd 

默认情况下,rsyncd监听的端口为TCP:873

更多详情见请继续阅读下一页的精彩内容http://www.linuxidc.com/Linux/2014-10/108298p2.htm

linux
相关资讯       inotify  rsync同步 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款