阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

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

207次阅读
没有评论

共计 11521 个字符,预计需要花费 29 分钟才能阅读完成。

定时备份和实时备份

      说到备份,无疑于定时备份和实时同步备份。定时备份可以通过脚本或者 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

配置 rsync 客户端

确保内核支持 inotify

      客户端 (源主机) 需要实时监控指定目录中的所有文件与文件改变相关的事件,并在事件发生时将改变的数据同步到目录主机,因此,源主机需要确保内核支持 inotify,并安装 inotify-tools 和 rsync。
判断内核是否支持 inotify 方法有如下:

### 确保内核版本高于 2.6.13,低于则需重新编译内核 ###

root@mon11:~# uname -r

3.2.0-64-generic

### 查看内核是否默认支持 inotify—API###

root@mon11:~# ll /proc/sys/fs/inotify/

-rw-r–r– 1 root root 0 Sep 18 18:06 max_queued_events

-rw-r–r– 1 root root 0 Oct 20 10:24 max_user_instances

-rw-r–r– 1 root root 0 Sep 18 18:06 max_user_watches

 

### 既然说到了这里就简单介绍一下这三个分别有什么作用?###

max_queued_events        表示调用 inotify_init 时分配给 inotify instance 中可排队的 event 的数目的最大值,超出这个值的事件被丢弃

max_user_instances      表示每一个 real user ID 可创建的 inotify instatnces 的数量上限

max_user_watches        表示每个 inotify instatnces 可监控的最大目录数量。如果监控的文件数目巨大,需要根据情况,适当增加此值的大小,例如:echo “9000000” > /proc/sys/fs/inotify/max_user_watches

安装相关程序包:

    这里我采用的是源码编译安装

源码包下载地址

http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz

源码安装过程

root@mon11:~# tar xf inotify-tools-3.14.tar.gz

root@mon11:~# cd inotify-tools-3.14/

root@mon11:~/inotify-tools-3.14#./configure

root@mon11:~/inotify-tools-3.14# make

root@mon11:~/inotify-tools-3.14# make install

安装完成会生成两个二进制文件:

root@mon11:~# ll /usr/local/bin/inotify*

-rwxr-xr-x 1 root root 56956 Oct 16 17:54 /usr/local/bin/inotifywait*

-rwxr-xr-x 1 root root 53306 Oct 16 17:54 /usr/local/bin/inotifywatch*

创建密码文件

    为源主机的 rsync 提供通过 git 用户同步文件目标主机的密码文件

root@mon11:~# touch /etc/rsync.passwd

root@mon11:~# echo ‘huilian123’ > /etc/rsync.passwd

root@mon11:~# chmod 600 /etc/rsync.passwd

创建监控脚本

  通过 inotifywait 监控目标文件上的相应事件,并在事件触发时启动同步

root@mon11:/data/rsyncd# vim inotifyrsync.sh

#!/bin/bash

host=10.168.23.101

src=/home/git/

dst=Git_rsync

user=git

/usr/local/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 -avzP –exclude”.gitolite/logs/*” –progress –password-file=/etc/rsync.passwd $src $user@$host::$dst &>/dev/null && \

echo “${files} was rsynced” >> /data/rsyncd/rsync.log 2>&1

done

root@mon11:/data/rsyncd#chmod 755 inotifyrsync.sh

root@mon11:/data/rsyncd# bash inotifyrsync.sh &

设置开机自启动

root@mon11:/data/rsyncd# echo ‘bash /data/rsyncd/inotifyrsync.sh &’ >> /etc/rc.local

结果展示

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

Rsync 的详细介绍:请点这里
Rsync 的下载地址:请点这里

定时备份和实时备份

      说到备份,无疑于定时备份和实时同步备份。定时备份可以通过脚本或者 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

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-20发表,共计11521字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中