• rsync的优点与不足

与传统的cp,scp,tar,备份方式相比,rsync具有安全性高备份迅速支持增量备份的优点,可以满足对实时性要求不高的需求,例如定期备份文件服务器数据到远端服务器,但是,当数据量非常大的时候,单独使用rsync就突显出有些不足,rsync在同步数据时,需要扫描所有文件后进行对比,然后进行差量传输,扫描所有文件是非常耗时的操作,最后只同步了很少的内容,rsync不能实时监测,同步数据。

  • inotify的作用

inotify是一种强大的异步的文件系统事件监控机制。通过inotify可以监控文件系统中添加,删除,修改,移动等各种事件,利用inotify,第三方软件可以监控文件系统下文件的各种变化情况。在linux中的安装包名是inotify-tools

  • 安装查看系统环境

inotify-tools需要2.6.13以上的内核支持,查看内核版本和系统对inotify的支持

[root@localhost ~]#uname -r
3.10.-.el7.x86_64
[root@localhost ~]#ll /proc/sys/fs/inotify/
total
-rw-r--r-- root root Apr : max_queued_events
-rw-r--r-- root root Apr : max_user_instances
-rw-r--r-- root root Apr : max_user_watches
  • 安装inotify
[root@localhost ~]#yum install inotify-tools -y
[root@localhost ~]#inotifywa
inotifywait inotifywatch

安装完inotify后,会生成inotifywait和inotifywatch两个指令,inotifywait用于等待文件或者文件集上的一个特定的事件,可以监听任何文件和目录的设置,并且可以递归地监控整个目录树;

inotifywatch用于收集被监控的文件系统统计数据,包括每个inotify事件发生多少次等信息。

  • inotify相关系统参数

inotify定义了一些系统参数用来限制inotify消耗内存的大小,参数设置文件在/proc/sys/fs/inotify下

  • max_queued_events值:表示调用inotify_init时分配到instances中可排队的event数的最大值,超出这个值的事件被丢弃
  • max_user_instances值:表示每一个real user ID 可以创建的inotify instatnces数量的上限
  • max_user_watches值:表示每个inotify实例可以监控的最大目录数量
  • inotifywait相关参数

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

-r:–recursive,表示递归查询目录

-q:–quiet,表示打印出监控事件

-e:–event,通过这个参数可以指定要监控的事件,常见的事件有modify,delete,create,和attrib等

–timefmt:指定时间的输出格式

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

在上一篇介绍rsync使用的文章基础上,基于原来的系统环境,实现rysnc+inotify的实时同步

【当rsync结合inotify时,原来的server端就变成了客户端了,当server端的文件更新就会向远程主机同步传输数据此时远程的客户端就成了server,,,有点绕】

生产服务器主机A的地址:192.168.214.190  :centos7.4  (rsync+inotify) 本地客户端

备份数据主机B的地址:192.168.214.187     :centos6.9    (rsync)            远程节点服务端

结合工作时,远程的服务节点需要将rsync以守护进程的方式启动,并将rsync加入到自启动文件中

#以守护进程方式启动
[root@yufu ~]# /usr/bin/rsync --daemon --config=/etc/rsync.d/rsyncd.conf
#加入开机自启动
[root@yufu ~]# echo '/usr/bin/rsync --daemon --config=/etc/rsync.d/rsyncd.conf' >> /etc/rc.local

生产服务器只需安装好rsync+inotify,并定义inotifywait监控及同步脚本就好了,(除了在/etc/rsync.d/下添加同步用户的密码文件外,定义密码文件后在同步过程中不需要再客户端输入密码,在脚本中要指定这个文件位置)

echo  fsz… >> /etc/rsync.d/server.pass

在生产服务器主机A的地址:192.168.214.190  :centos7.4  (rsync+inotify)上编写脚本实现自动同步

#/bin/bash
###
##
#
backupdir=/databak
srcdir=/data
bakmod=bak
#备份的用户,不是真正的系统用户
user=feng
host1=192.168.214.187 /usr/bin/inotifywait -mrq --timefmt '%F %T' --format '%T %w%f%e' -e modify,delete,create,attrib $srcdir | while read files
do
/usr/bin/rsync -vzrtopg --delete --progress $srcdir $user@$host1::$bakmod --password-file=/etc/rsync.d/server.pass >> /tmp/rsync.log >&
echo "${files} was rsynced" >> /var/log/rsync.log >&
done

对于脚本内容参数做简单理解:

backupdir=/databak  :远程服务器存放备份文件的目录
srcdir=/data  :本地要备份的数据目录
bakmod=bak  : 远程服务器定义的rsyncd.conf中的模块名称
user=feng   :执行备份的用户,该用户是rsyncd.conf中“auth users”指定的用户
host1=192.168.214.187   :远程主机地址

这个脚本的作用就是同inotify监控文件目录的变化,进而触发rsync进行同步操作

给脚本添加执行权限

[root@localhost data]#chmod  inotifyrsync.sh

指令方式测试同步

#远程上传
[root@localhost data]#rsync -zvrtopg --progress /data feng@192.168.214.187::bak --password-file=/etc/rsync.d/server.pass
sending incremental file list
data/
data/.inotifyrsync.sh.swp
% .00kB/s :: (xfer#, to-check=/)
data/\
% .99kB/s :: (xfer#, to-check=/)
data/access.log
% .91MB/s :: (xfer#, to-check=/)
data/epel-release-latest-.noarch.rpm
% .49kB/s :: (xfer#, to-check=/)
data/fengsuzhou.txt
% .00kB/s :: (xfer#, to-check=/)
data/gudaoyufu.txt
% .00kB/s :: (xfer#, to-check=/)
data/inotifyrsync.sh
% .96kB/s :: (xfer#, to-check=/)
data/lost+found/ sent bytes received bytes 821709.33 bytes/sec
total size is speedup is 17.33

测试下载

#远程下载
[root@localhost data]#rsync -vzrtopg --progress  feng@192.168.214.187::bak /opt/app/ --password-file=/etc/rsync.d/server.pass
receiving incremental file list
./
.inotifyrsync.sh.swp
% .72MB/s :: (xfer#, to-check=/)
data/
data/.inotifyrsync.sh.swp
% .72MB/s :: (xfer#, to-check=/)
data/\
% .91kB/s :: (xfer#, to-check=/)
data/access.log
% .90MB/s :: (xfer#, to-check=/)
data/epel-release-latest-.noarch.rpm
% .51kB/s :: (xfer#, to-check=/)
data/fengsuzhou.txt
% .00kB/s :: (xfer#, to-check=/)
data/gudaoyufu.txt
% .00kB/s :: (xfer#, to-check=/)
data/inotifyrsync.sh
% .02kB/s :: (xfer#, to-check=/)
data/lost+found/ sent bytes received bytes 822154.67 bytes/sec
total size is speedup is 17.33

将脚本放入后台执行

[root@localhost data]#sh /data/inotifyrsync.sh  &
[]

再做最后的总结:被搞得够晕的

客户端:(需要备份数据的那台服务器)

生产服务器只需安装好rsync+inotify

在/etc/rsync.d/下添加同步用户的密码文件,在脚本中要指定这个文件位置

编写inotifywait监控及同步脚本

服务端:(同步数据,存放备份数据的那台服务器)

只需安装rsync,定义配置文件

配置文件中定义 模块名称,备份数据的用户,及数据存放的路径

定义备份用户的密码文件:username:password 格式

必须以守护进程的方式启动

最后再贴上rsync的 rsyncd.conf 配置文件(需要手动编写)

vim /etc/rsync.d/rsyncd.conf

log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock [bak]
path=/databak
uid = root
gid = root
ignore = errors
read only = no
write only = no
host allow = *
max connections =
host deny = 192.168.22.21
list = false
auth users = feng
secrets file = /etc/rsync.d/server.pass

同步测试

在客户端上的备份源目录中创建文件

[root@localhost data]#ls
\ file12.txt file18.txt file4.txt gudaoyufu.txt
access.log file13.txt file19.txt file5.txt inotifyrsync.sh
epel-release-latest-.noarch.rpm file14.txt file1.txt file6.txt lost+found
fengsuzhou.txt file15.txt file20.txt file7.txt zhuhui.txt
file10.txt file16.txt file2.txt file8.txt
file11.txt file17.txt file3.txt file9.txt

在服务端存放备份的目录查看新同步的文件

[root@yufu data]# ls
\ file12.txt file18.txt file4.txt gudaoyufu.txt
access.log file13.txt file19.txt file5.txt inotifyrsync.sh
epel-release-latest-.noarch.rpm file14.txt file1.txt file6.txt lost+found
fengsuzhou.txt file15.txt file20.txt file7.txt zhuhui.txt
file10.txt file16.txt file2.txt file8.txt
file11.txt file17.txt file3.txt file9.txt11111

通过rsync+inotify实现数据实时备份的更多相关文章

  1. 通过rsync+inotify实现数据实时备份同步

    一.环境描述 测试环境 需求:服务器A与服务器B为主备服务模式,需要保持文件一致性,现采用sersync基于rsync+inotify实现数据实时同步 环境描述: 主服务器172.26.7.50 ,从 ...

  2. CentOS 6.5 rsync+inotify实现数据实时同步备份

    CentOS 6.5 rsync+inotify实现数据实时同步备份 rsync    remote sync 远程同步,同步是把数据从缓冲区同步到磁盘上去的.数据在内存缓存区完成之后还没有写入到磁盘 ...

  3. sersync基于rsync+inotify实现数据实时同步

    一.环境描述 需求:服务器A与服务器B为主备服务模式,需要保持文件一致性,现采用sersync基于rsync+inotify实现数据实时同步 主服务器A:192.168.1.23 从服务器B:192. ...

  4. rsync+inotify磁盘数据实时同步

    一.rsync+inotify主服务器部署 1.1安装rsync [root@nginx ~]# cd /usr/src/ [root@nginx src]# tar zxvf rsync-3.0.9 ...

  5. rsync+inotify实现数据实时同步

    rsync rsync是linux系统下的数据镜像备份工具.支持远程同步,本地复制,或者与其他SSH.rsync主机同步. 优点: 1).可以镜像保存整个目录树和文件系统.保存源目录整个目录树和文件系 ...

  6. 实战:rsync+inotify实现数据实时同步

    Linux 内核从 2.6.13 版本开始提供了 inotify 通知接口,用来监控文件系统的各种变化情况,如文件存取.删除.移动等.利用这一机制,可以非常方便地实现文件异动告警.增量备份,并针对目录 ...

  7. rsync+inotify实现server实时备份

    inotify实现对文件夹下文件进行监听的原理: inotify集成到内核中,通过内核提供的接口.使用inotify作为第三方的软件对文件夹变化进行监控. inotifywait命令能够对文件夹中的文 ...

  8. 利用rsync+inotify实现数据实时同步脚本文件

    将代码放在Server端,实现其它web服务器同步.首先创建rsync.shell,rsync.shell代码如下: #!/bin/bash host1=133.96.7.100 host2=133. ...

  9. Centos rsync+inotify 实现数据同步备份

    最近公司做了一

随机推荐

  1. 【ACM】孪生素数问题

    孪生素数问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 写一个程序,找出给出素数范围内的所有孪生素数的组数.一般来说,孪生素数就是指两个素数距离为2,近的不能再 ...

  2. rancher中级(一)(rancher的存储,网络)

    容器的存储机制 参考 http://dockone.io/article/128:http://dockone.io/article/129: Docker镜像是由多个文件系统(只读层)叠加而成.当我 ...

  3. 012 Integer to Roman 整数转换成罗马数字

    给定一个整数,将其转为罗马数字.输入保证在 1 到 3999 之间. 详见:https://leetcode.com/problems/integer-to-roman/description/ cl ...

  4. 004 Median of Two Sorted Arrays 两个有序数组的中位数

    There are two sorted arrays nums1 and nums2 of size m and n respectively.Find the median of the two ...

  5. Python metaclasses

    metaclasses元类:就像对象是类的实例一样,类是它的元类的实例.调用元类可以创建类. metaclass使用type来创建类,type可以被继承生成新的元类. 这个和C#的反射很相似. 下面是 ...

  6. Shell编程中的条件判断(条件测试)

    Shell中的条件判断(测试)类型: 1) 整数测试 2) 字符测试 3) 文件测试 条件测试的表达式:        (注: expression 与 [] 之间空格不能省略) [ expressi ...

  7. 牛客网Java刷题知识点之四种不同的方式创建线程

    不多说,直接上干货! 有4种方式可以用来创建线程: 第一种:继承Thread类,重写run方法 第二种:实现Runnable接口,并实现该接口的run方法(一般我们在编程的时候推荐用这种) 第三种:实 ...

  8. 【密码学】MD5算法原理

    MD5(单向散列算法)的全称是Message-Digest Algorithm 5(信息-摘要算法),经MD2.MD3和MD4发展而来.MD5算法的使用不需要支付任何版权费用. MD5功能:    输 ...

  9. nginx开启HSTS让浏览器强制跳转HTTPS访问

    在上一篇文章中我们已经实现了本地node服务使用https访问了,看上一篇文章 效果可以看如下: 但是如果我们现在使用http来访问的话,访问不了.如下图所示: 因此我现在首先要做的是使用nginx配 ...

  10. POJ 2253 ——Frogger——————【最短路、Dijkstra、最长边最小化】

    Frogger Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Stat ...