rsync使用(三)

一、rsync的不足

随着应用系统规模的不断扩大,对数据的安全性和可靠性也提出的更好的要求,rsync在高端业务系统中也逐渐暴露出了很多不足,首先,rsync同步数据时,需要扫描所有文件后进行比对,进行差量传输。如果文件数量达到了百万甚至千万量级,扫描所有文件将是非常耗时的。而且正在发生变化的往往是其中很少的一部分,这是非常低效的方式。其次,rsync不能实时的去监测、同步数据,虽然它可以通过crontab方式进行触发同步,但是两次触发动作一定会有时间差,这样就导致了服务端和客户端数据可能出现不一致,无法在应用故障时完全的恢复数据。基于以上原因,rsync+inotify组合出现了!

二、inotify简介

Inotify 是一种强大的、细粒度的、异步的文件系统事件监控机制,linux内核从2.6.13起,加入了Inotify支持,通过Inotify可以监控文件系统中添加、删除,修改、移动等各种细微事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,而inotify-tools就是这样的一个第三方软件。

三、安装inotify工具inotify-tools

1、检测系统内核能否支持inotify特性

[[email protected] ~]# uname -r
2.6.32-504.el6.i686
[[email protected] ~]# ll /proc/sys/fs/inotify
总用量 0
-rw-r--r-- 1 root root 0 8月   4 21:35 max_queued_events
-rw-r--r-- 1 root root 0 8月   4 21:35 max_user_instances
-rw-r--r-- 1 root root 0 8月   4 21:35 max_user_watches

验证机器是否能支持inotify特性只要内核版本在2.6.13之上,同时在查看系统中有上面三个文件就可以说明该系统默认支持inotify,之后就可以安装inotify-tools工具了。

2、关于/proc/sys/fs/inotify目录内文件说明

  • /proc/sys/fs/inotify/max_queued_evnets      表示调用inotify_init时分配给inotify instance中可排队的event的数目的最大值,超出这个值的事件被丢弃,但会触发IN_Q_OVERFLOW事件。
  • /proc/sys/fs/inotify/max_user_instances       表示每一个real user ID可创建的inotify instatnces的数量上限。
  • /proc/sys/fs/inotify/max_user_watches         表示每个inotify instatnces可监控的最大目录数量。如果监控的文件数目巨大,需要根据情况,适当增加此值的大小。

3、安装inotify工具

[[email protected] ~]# yum install inotify-tools

inotify-tools安装完成后,会生成inotifywait和inotifywatch两个指令,可以用 rpm -ql inotify-tools 来查询安装命令的路径及相关文件。其中,inotifywait用于等待文件或文件集上的一个特定事件,它可以监控任何文件和目录设置,并且可以递归地监控整个目录树。 inotifywatch用于收集被监控的文件系统统计数据,包括每个inotify事件发生多少次等信息。

4、inotifywait命令常用选项简单说明及举例

-m,即--monitor,表示始终保持事件监听状态。

-r, 即--recursive,表示递归查询目录。

-q, 即--quiet,表示打印出监控事件。

-e,即--event,通过此参数可以指定要监控的事件,常见的事件有modify、delete、create、attrib等。

--timefmt:指定时间的输出格式。

--format:指定变化文件的详细信息

持续监听/tmp目录及其子目录的文件变化,监听事件包括文件被修改、删除、创建、移动、属性更改,显示到屏幕:

[[email protected] ~]# /usr/bin/inotifywait -mrq --timefmt ‘%Y/%m/%d-%H:%M:%S‘ --format ‘%T %w %f‘ >  -e modify,delete,create,move,attrib /tmp/
2015/08/05-19:46:17 /tmp/ a
2015/08/05-19:46:17 /tmp/ a
2015/08/05-19:46:39 /tmp/ a
2015/08/05-19:47:14 /tmp/ a

上述输出信息是另开一个终端,然后在/tmp目录下做些文件被修改、删除、创建、移动、属性更改的操作后的输出结果。

四、rsync+inotify应用举例

1、应用描述

为了保证内容发布节点即主节点的机器的文件和服务节点1和服务节点2的数据是一至的,这里使用rsync来进行文件同步,为了保证能达到实时同步的效果,这里就需要inotify,即:使用inotify监视/data目录内文件的变化,如果文件有变动,那么就启动rsync,将文件实时同步到两个服务节点。

2、实验环境介绍

hostname IP 系统版本 数据目录
主节点 webserver 192.168.1.20 CentOS  6.6 /data/web
服务节点1 web1 192.168.1.110 CentOS  6.6 /data/web
服务节点2 web2 192.168.1.8 CentOS  6.6 /data/web

3、配置服务节点的rsyncd.conf文件

web1节点rsyncd.conf配置如下:

[[email protected] ~]# cat /etc/rsyncd.conf
uid = nobady
gid = nobady
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

[web1]
path = /data/web/
comment = web1 file
ignore errors
read only = no
weite only = no
hosts allow = 192.168.1.20
hosts deny = *
list = false
uid = root
gid = root
auth users = web1user
secrets file = /etc/web1.passwd
[[email protected] ~]# cat /etc/web1.passwd
web1user:redhat
[[email protected] ~]# chmod 600 /etc/web1.passwd

web2节点rsyncd.conf配置如下:

[[email protected] ~]# cat /etc/rsyncd.conf 
uid = nobady
gid = nobady
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

[web2]
path = /data/web/
comment = web2 file
ignore errors
read only = no
weite only = no
hosts allow = 192.168.1.20
hosts deny = *
list = false
uid = root
gid = root
auth users = web2user
secrets file = /etc/web2.passwd
[[email protected] ~]# cat /etc/web2.passwd
web2user:redhat
[[email protected] ~]# chmod 600 /etc/web2.passwd

4、安装守护进程xinetd并启动rsync后台服务

首先直接在两个从节点yum安装xinetd软件包,然后在修改xinetd关于rsync的配置文件:

[[email protected] ~]# vim /etc/xinetd.d/rsync
# default: off
# description: The rsync server is a good addition to an ftp server, as it #       allows crc checksumming etc.
service rsync
{
        disable = no   //默认的为yes将其改为no
        flags           = IPv6
        socket_type     = stream
        wait            = no
        user            = root
        server          = /usr/bin/rsync
        server_args     = --daemon
        log_on_failure  += USERID
}
[[email protected] ~]# /etc/init.d/xinetd start
正在启动 xinetd:                                          [确定]
[[email protected] web]# ss -tnl |grep 873
LISTEN     0      64                       :::873                     :::*

由于两台从节点的机器都需要执行上述操作,这里就只写一个,同时也可以使用别的方法启动rsync后台服务这里就不在介绍了。

5、创建内容发布节点脚本

配置内容发布节点的主要工作是将生成的静态网页实时的同步到集群中两个个服务节点,这个过程可以通过一个shell脚本来完成,脚本内容大致如下:

[[email protected] ~]# cat rsync.sh 
#!/bin/bash
host1=192.168.1.110
host2=192.168.1.8
src=/data/web/
dst1=web1
dst2=web2
user1=web1user
user2=web2user
/usr/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=/etc/rsync.passwd $src [email protected]$host1::$dst1
  /usr/bin/rsync -vzrtopg --delete --progress --password-file=/etc/rsync.passwd $src [email protected]$host2::$dst2
   echo "${files} was rsynced" >>/tmp/rsync.log 2>&1
done
[[email protected] ~]# mv rsync.sh /data/web/
[[email protected] ~]# chmod +x /data/web/rsync.sh 
[[email protected] ~]# cat /etc/rsync.passwd 
redhat
[[email protected] ~]# chmod 600 /etc/rsync.passwd

6、测试rsync+inotify组合是否能实时同步

[[email protected] web]# /data/web/rsync.sh &
[[email protected] web]# ps aux |grep rsync.shroot      
1178  0.0  0.0   6676   816 pts/0    S    21:24   0:00 /bin/bash /data/web/rsync.shroot  1275  0.0  0.0   5976   748 pts/0    S+   22:05   0:00 grep rsync.sh

通过上面可以看到rsync.sh以在后台运行了,下面可以将文件复制到/data/web/目录下了来进行测试。

[[email protected] ~]# ls /tmp/shell/
cpcmd.sh  cpcom.sh  jingxiang.sh
[[email protected] ~]# cp  /tmp/shell/* /data/web/

查看两台从节点机器/data/web/目录:

[[email protected] web]# ls
cpcmd.sh  cpcom.sh  jingxiang.sh   rsync.sh  
[[email protected] web]# ls
cpcmd.sh  cpcom.sh  jingxiang.sh   rsync.sh

通过上面的验证可以得到搭建的rsync+inotify组合进行文件实时同步环境以OK,然而有时会遇到这样的情况:向inotify监控的目录(这里是/web/web/)写入一个很大文件时,由于写入这个大文件需要一段时间,此时inotify就会持续不停的输出该文件被更新的信息, 这样就会持续不停的触发rsync去执行同步操作,占用了大量系统资源,那么针对这种情况,最理想的做法是等待文件写完后再去触发rsync同步。 在这种情况下,可以修改inotify的监控事件,即:“-e close_write,delete,create,attrib”。

参考:高俊峰《高性能Linux服务器构建实战:运维监控、性能调优与集群应用》

时间: 2024-10-13 15:53:25

rsync使用(三)的相关文章

rsync存储服务器-全网备份

一.rsync功能介绍: 复制 (同步)的工具 全量及增量 本地和远程 Rsync英文全称为Remotesynchronization 本地复制cp(全量备份),rsunc也有此功能(增量) 远程复制scp(全量备份),rsync也有此功能(增量) 删除工具rm,rsync也有此功能 二. Rsync的特性 支持拷贝特殊文件如链接文件,设备等 可以有排除指定文件或目录同步的功能,相当于打包命令tar的排除功能 可以做到保持原文件或目录的权限.时间.软硬链接.属主.组等所有属性均不改变  - p

以rsync的daemon工作模式传输数据

一.简介 rsync主要有三种工作方式: 1.单个主机本地之间的数据传输(类似于cp命令的功能) 2.借助rcp,ssh等通道来传输数据(类似于scp命令的功能) 3.以守护进程(socket)的方式传输数据(rsync自身的重要功能) 这里描述的是以第三种模式处理. 此例子准备了两台机器,分别为服务端10.0.0.41-backup,客户端10.0.0.100-oldboy. 二.在服务端启动及检查rsync服务 [[email protected]]# rsync --deamon #启动服

部署rsync的过程

1.1 守护进程部署分为两部分: 1.1.1 服务端的部署--rsync 第一个里程碑:查看有没有这个软件 rpm -qa rsync 第二个里程碑:安装rsync软件 yum install -y rsync   第三个历程碑:编写配置文件(编写好配置文件,后续操作步骤可以按照配置文件进行) cat >/etc/rsyncd.conf<<EOF #created by HQ at 2017 ##rsyncd.conf start## uid = rsync gid = rsync us

rsync数据备份解决方案

rsync命令是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件.rsync使用所谓的“rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快. 一.项目规则: 1.系统环境 [[email protected] ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) [[email protected] ~]# uname -r

2-3-2 rsync+inotify备份同步数据

RSYNC = Remote Sync 远程同步 高效,一定要结合shell 官网:https://rsync.samba.org Author: Andrew Tridgell, Wayne Davison, and others Andrew Tridgell是Samba项目的领导者和主要开发人员,同时还在参与开发rsync\Linux Kernel. 与SCP的比较:scp=无法备份大量数据,类似windows的复制 rsync=边复制 ,边统计,边比较 Rsync特性和优点 可以镜像保存

Linux Rsync

一.Rsync介绍 1.什么是Rsync Rsync 即Remote Rynchronization,是一款开源的.快速的.多功能的.可实现全量或增量的本地或者远程数据镜像同步复制.备份的优秀工具. 类似于scp命令,但是优于scp,可以做增量的备份.Rsync还可以在本地主机的不同分区或目录之间全量及增量的复制数据,这类似与cp命令,同样优于cp命令(增量). Rsync 是一个远程数据同步工具,可通过 LAN/WAN 快速同步多台主机间的文件. Rsync 使用所谓的“Rsync 演算法”来

rsync的配置使用

rsync一般情况下会系统便会有这个软件,如果没有请自行安装. rsync的三种工作模式: 1.单个主机本地进行数据传输   类似与cp命令   另外rsync还有删除功能 2.借助与rcp,ssh通道来进行传输       类似与scp功能 rsync -avz /etc/hosts -e ssh    192.168.12.246:/etc/init.d/ -a:保持文件自身属性       -z:压缩传输         -e:使用通信协议       -v:输出给出进度提示 将 本地的/

linux rsync +inotify 实现 实时同步

前言:     rsync可以实现触发式的文件同步,但是通过crontab守护进程方式进行触发,同步的数据和实际数据会有差异,而inotify可以监控文件系统的各种变化,当文件有任何变动时,就触发rsync同步,这样刚好解决了同步数据的实时性问题. 一.基本环境 系统:CentOS 2.6.32-220.el6.x86_64软件包版本:rsync-3.0.6-12.el6.x86_64                    inotify-tools-3.14 下载链接:百度   inotify

rsync+inotify实现数据同步

rsync:Remote Sync,是类Unix系统下的数据镜像备份工具.通过rsync可以解决对实时性要求不高的数据进行备份需求:例如:指定的备份文件服务器数据到指定的远端服务器,对本地磁盘定期做数据镜像等. inotify:inotify是一种文件变化通知机制:通过inotify可以在监控文件系统中添加.删除.修改.移动等各种操作 准备环境: 主服务器(inotify-Master) IP:172.18.42.201 从服务器(inotify-Slave) IP:172.18.42.200

Rsync+inotify 实现实时同步数据文件

什么是Rsync? rsync可以实现增量备份,配合inotify可以实现时事的数据备份 Rsync的三种工作模式 1)本地备份,相当于 cp 命令 将 /etc/hosts 文件拷贝到 /tmp/ 目录下 rsync -avz /etc/hosts /tmp/ 删除一个目录 先新建一个空目录,然后使用 rsync 命令同步 mkdir /zhao 添加 --delete参数,目录 zhao 为空 rsync --delete /zhao/ /tmp/ 命令解释:以前面的目录为准,前面目录有啥后