在实际生产环境当中,我们总会遇见需要把一些重要数据进行备份,且随着应用系统规模的增大,对数据的安全性、可靠性、时效性要求还是比较高的,

因此我自己有在用rsync+inotify来实现数据实时同步备份,下面记录下操作步骤,以防日后自己忘记。

实验背景:

操作系统          IP         机器名        角色

CentOS 7.2       172.16.22.1     nginx01        数据源(服务器端)

CentOS 7.2       172.16.22.7     nginx02        备份地(客户端)

一、rsync的安装

在服务器端与客户端都安装rsync

[root@nginx01 ]# yum install -y rsync
[root@nginx02 ]# yum install -y rsync

分别启动服务器端和客户端的rsync守护进程

[root@nginx01 ]# /usr/bin/rsync --daemon
[root@nginx02 ]# /usr/bin/rsync --daemon

二、安装inotify

因为inotify是一种强大的、细粒度的、异步文件系统事件监控机制,从Linux内核2.6.13版本起,加入了对inotify的支持。

inotify可以监控文件系统的各种变化,当文件出现任何变动时,就会触发rsync同步,恰好解决了数据实时同步的问题。

inotify只需要安装在服务器端即可。

[root@nginx01 ]# uname -r
3.10.0-327.el7.x86_64
[root@nginx01 ]# ll /proc/sys/fs/inotify
total 0
-rw-r--r--. 1 root root 0 Jun 12 13:43 max_queued_events
-rw-r--r--. 1 root root 0 Jun 12 13:43 max_user_instances
-rw-r--r--. 1 root root 0 Jun 12 13:43 max_user_watches

如果出现了上面的3项内容,说明系统默认支持inotify,那么我们就可以安装inotify-tools了。

我们可以到http://inotify-tools.sourceforge.net 下载相应版本的inotify-tools,我发现最新的也就是2010年出的inotify-tool-3.1.14

下载完毕后,进行安装

先解压

[root@nginx01 ]# tar -xf inotify-tools-3.14.tar.gz

进入解压后的安装包目录里

[root@nginx01 ]# cd inotify-tools-3.14

进行检查编译,并制定安装路径

[root@nginx01 inotify-tools-3.14 ]# ./configure --prefix=/data0/inotify

进行make编译安装

[root@nginx01 inotify-tools-3.14 ]# make && make install

安装完毕,查看是否生成了inotifywait、inotifywatch这两个指令

[root@nginx01 ]# ll /data0/inotify/bin/inotifywa*
-rwxr-xr-x. 1 root root 60892 Jun 12 13:45 /data0/inotify/bin/inotifywait
-rwxr-xr-x. 1 root root 55183 Jun 12 13:45 /data0/inotify/bin/inotifywatch

注:inotifywait --用于等待文件或者文件集上的一个特定时间,可以监控任何文件和目录设定,并且可递归监控整个目录树;inotifywatch--用于收集被监控的文件系统统计数据,包括每个inotify事件发生的次数等相关信息。关于它们的用法可以使用 /data0/inotify/bin/inotifywait --help、/data0/inotify/bin/inotifywatch --help的方式来了解

三、inotify的相关参数

inotify定义了一些接口参数,可以用来限制inotify消耗kernel memory的大小,所以我们要根据实际应用的需求,来调节其大小。

[root@nginx01 ]# ll /proc/sys/fs/inotify
total 0
-rw-r--r--. 1 root root 0 Jun 12 13:43 max_queued_events
-rw-r--r--. 1 root root 0 Jun 12 13:43 max_user_instances
-rw-r--r--. 1 root root 0 Jun 12 13:43 max_user_watches

/proc/sys/fs/inotify/max_queued_events --表示调用inotify_init时分配至inotify instance中可以排队的最大事件数,一旦超过这个值,事件就会被抛弃,但是会触发IN_Q_OVERFLOW事件

/proc/sys/fs/inotify/max_user_instances --表示每一个real user ID 可创建的inotify instances数量的最大上限

/proc/sys/fs/inotify/max_user_watches --表示每个inotify实例相关联的watches的上限,也就是每个inotify实例可监控的最大目录数量,如果你所需要监控的数量巨大,可以适当增大它。

我就随便增大了我的上述设定值

[root@nginx01 ]# echo 32768 > /proc/sys/fs/inotify/max_queued_events
[root@nginx01 ]# echo 1024 > /proc/sys/fs/inotify/max_user_instances
[root@nginx01 ]# echo 90000000 > /proc/sys/fs/inotify/max_user_watches

四、配置双机ssh信任

使用rsync同步有两种方式可以实现:

一:使用rsync用户、密码

二:使用机器上的用户,无需输密码即可实现

我为了贪图方便选择后者

在数据源、备份机上创建RSA密钥

以下操作在两台机器上都要执行,下列提供其中一台的为例

1.使用root用户登入机器

2.在root用户的主目录下创建.ssh目录,并设置正确的权限

[root@nginx01 ]# mkdir ~/.ssh
[root@nginx01 ]# chmod 700 ~/.ssh

3.使用ssh-keygen命令生成第2版的SSH协议的RSA密钥

[root@nginx01 ]# ssh-keygen -t rsa

接下来的动作就是根据提示保存私钥(key)和公钥(public key)的位置时,使用默认值。如果需要私钥密码(passphrase), 则输入一个私钥密码(如果使用私钥密码,在利用ssh执行远程命令是需要输入私钥密码)

我是为了方便,直接回车就好!

添加密钥到授权的密钥文件中

1.使用root用户登入机器

2.在数据源机器上执行下列操作

[root@nginx01 ]# cd ~/.ssh
[root@nginx01 ./ssh]# ssh 172.16.22.7 cat /root/.ssh/id_rsa.pub >> authorized_keys
[root@nginx01 ./ssh]# ssh 172.16.22.1 cat /root/.ssh/id_rsa.pub >> authorized_keys
[root@nginx01 ./ssh]# scp authorized_keys 172.16.22.7:/root/.ssh/
[root@nginx01 ./ssh]# chmod 600 /root/.ssh/authorized_keys

3.在备份机上执行

[root@nginx02 ]# chmod 600 /root/.ssh/authorized_keys

4.分别在两台机器上进行测试

[root@nginx01 ]# ssh 172.16.22.1 date
Tue Jun 13 20:39:56 CST 2017
[root@nginx01 ]# ssh 172.16.22.7 date
Tue Jun 13 20:39:57 CST 2017
[root@nginx02 ]# ssh 172.16.22.1 date
Tue Jun 13 20:39:57 CST 2017
[root@nginx02 ]# ssh 172.16.22.7 date
Tue Jun 13 20:39:58 CST 2017

在第一次执行的时候,可能会要输入密码信息,再次执行的时候,你会发现不需要输入密码信息就能够显示系统日期,这就说明ssh互相信任配置成功!

五、实现实时同步

因为inotifywait是一个监控等待事件,所以我们可以使用shell脚本来配合使用它。

常用的inotifywait参数:

-m --monitor 表示始终保持事件的监听状态

-r --recursive 表示递归查询目录

-q --quit 表示打印出监控事件

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

下面是我的一个实时同步脚本,仅供参考:

[root@nginx01 ]# vim  /data0/webscripts/inotify.sh
#!/bin/bash
SRC=/data0/nginx/res/home/
DST=root@172.16.22.7:/data0/nginx/res/home/
/data0/inotify/bin/inotifywait -mrq -e modify,delete,create,attrib ${SRC} | while read  a b c do /usr/bin/rsync  -ahqzt --delete $SRC $DST
done

让同步脚本具有可执行权限

[root@nginx01 ]# chmod +x /data0/webscripts/inotify.sh

在后台执行实时备份的脚本操作

[root@nginx01 ]# sh /data0/webscripts/inotify.sh &

在备份的同时,你可以去到你的备份机上备份目录里查看它是不是一直在变大,直到和数据源目录一样大呢

如果你的备份目录比较大,从数字上可能不是那么好辨认的话,建议使用查看目录文件数量的方式来比对确认

如在数据源目录查看后,在去备份目录看是否一致。

[root@nginx01 ]# find /data0/nginx/res/home -type f | wc -l
30777
[root@nginx02 ]# find /data0/nginx/res/home -type f | wc -l
30777

到这里配置完成,测试成功

转载于:https://blog.51cto.com/10803382/1935139

rsync+inotify实现数据实时同步备份相关推荐

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

    Rsync (Rmote sync)是一款非常好的数据同步工具,能够通过对比同步双方的数据变动,实现增量同步,还可以通过LAN/WAN实现远程多台主机间文件的同步,还能结合crond任务计划来执行自动 ...

  2. Centos7.x Rsync+Inotify实现数据实时同步

    一.概述 rsync是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件.它使用所谓的"Rsync演算法"来使本地和远程两个主机之间的文件达到同步,这个算法只传送两 ...

  3. Linux下Rsync+Inotify-tools实现数据实时同步

    说明: 操作系统:CentOS 5.X 源服务器:192.168.21.129 目标服务器:192.168.21.127,192.168.21.128 目的:把源服务器上/home/www.osyun ...

  4. Linux下Rsync+sersync实现数据实时同步

    一.为什么要用Rsync+sersync架构? 1.sersync是基于Inotify开发的,类似于Inotify-tools的工具 2.sersync可以记录下被监听目录中发生变化的(包括增加.删除 ...

  5. Centos rsync + notify 实现数据实时同步

    目录 rsync + notify 实现数据实时同步 一.简介 二.原理 三.实验环境 四.实验预期 五.准备工作 六.服务配置 目标服务器配置 源服务器配置 七.实现inodify实时触发rsync ...

  6. linux云计算架构师:Rsync+sersync实现数据实时同步

    全套学习资料移步至公众号[学神来啦]更多学习资料添加扣扣资源群:661308959 本节所讲内容:   2.1  Rsync概述   2.2  Rsync服务安装   2.3  Rsync+sersy ...

  7. rsync与inotify实现数据实时同步

    Rsync与Inotify 单一的rsync只可以进行数据同步,单一的inotify只可以实时监控文件,两者结合使用刚好满足数据实时同步的需求,下面就用一个数据发布服务器和两个web服务器实例解析rs ...

  8. 使用rsync实现数据实时同步备份--实战

    实战3: 配置rsync 服务器及需要备份的目录,不使用系统用户需要自己创建自己的配置文件: /etc/rsyncd.conf ; 创建备份帐户,最后把rsync 以daemon方式运行. 配置文件: ...

  9. Rsync+Inotify-tools实现数据实时同步

    inotify是一种强大的,细粒度的,异步文件系统时间监控机制,它可以替代crond实现与rsync的触发式文件同步,从而监控文件系统中添加,删除,修改,移动等细粒事件,从LINUX 2.6.13起, ...

  10. linux下通过rsync+inotify 实现数据实时备份(远程容灾备份系统)

    本文出处参考:http://www.jbxue.com/article/10493.html 一.安装步骤(服务器端192.168.0.5) 1) 安装rsync 点击下载rsync-3.0.9.ta ...

最新文章

  1. the fair-sounding
  2. java如何解析json_java 中解析json步骤
  3. SAP Spartacus的user id
  4. faster rcnn学习之rpn 的生成
  5. 4、python简单线性回归代码案例(完整)_python 实现一个简单的线性回归案例
  6. 中国联通公布8月运营数据出炉 4G用户大幅度提升
  7. iOS开发之开源项目链接
  8. 中标麒麟 V7 操作系统安装达梦数据库 DM8
  9. mpg文件怎么转换成mp4
  10. 定时任务调度框架Quartz
  11. 各种语言如何连接到 OceanBase
  12. 研究生期间论文发表经验总结
  13. git更换主分支master
  14. java使用465端口发送邮件
  15. 单点登录SSO(Single Sign On)
  16. c语言确定原点建立坐标系,在GDI+中如何实现以左下角为原点的笛卡尔坐标系
  17. 刀剑封魔录多功能修改器 v1.2使用教程
  18. 【北邮国院大三下】Cybersecurity Law 网络安全法 Week1【更新Topic4, 5】
  19. 阿里云盘的几个搜索平台(自用)
  20. java中Class对象详解和类名.class, class.forName(), getClass()区别

热门文章

  1. [转] linux 下查看一个进程运行路径的方法
  2. [Linux]Linux man命令的使用方法
  3. appium python很慢_appium+python自动化测试遇到的坑及处理方案
  4. Linux 进程热升级
  5. Linux中的Page cache和Buffer cache详解
  6. 数字三角形问题Java
  7. mac编写python_刚到手Mac写Python的一个简单问题
  8. ctr预估之特征工程
  9. 【令人头秃的线段树】线段树入门题目详解(代码逐句分析)
  10. 轻松,高效,正确的写出一个爬虫?看这一篇就够了!踩过无数坑后总结的爬虫编写流程