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

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

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

实验背景:

操作系统          IP         机器名        角色

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

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

一、rsync的安装

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

[[email protected] ]# yum install -y rsync

[[email protected] ]# yum install -y rsync

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

[[email protected] ]# /usr/bin/rsync --daemon

[[email protected] ]# /usr/bin/rsync --daemon

二、安装inotify

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

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

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

[[email protected] ]# uname -r

3.10.0-327.el7.x86_64

[[email protected] ]# 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

下载完毕后,进行安装

先解压

[[email protected] ]# tar -xf inotify-tools-3.14.tar.gz

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

[[email protected] ]# cd inotify-tools-3.14

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

[[email protected] inotify-tools-3.14 ]# ./configure --prefix=/data0/inotify

进行make编译安装

[[email protected] inotify-tools-3.14 ]# make && make install

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

[[email protected] ]# 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的大小,所以我们要根据实际应用的需求,来调节其大小。

[[email protected] ]# 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实例可监控的最大目录数量,如果你所需要监控的数量巨大,可以适当增大它。

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

[[email protected] ]# echo 32768 > /proc/sys/fs/inotify/max_queued_events

[[email protected] ]# echo 1024 > /proc/sys/fs/inotify/max_user_instances

[[email protected] ]# echo 90000000 > /proc/sys/fs/inotify/max_user_watches

四、配置双机ssh信任

使用rsync同步有两种方式可以实现:一:使用rsync用户、密码  二:使用机器上的用户,无需输密码即可实现

我为了贪图方便选择后者

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

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

1.使用root用户登入机器

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

[[email protected] ]# mkdir ~/.ssh

[[email protected] ]# chmod 700 ~/.ssh

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

[[email protected] ]# ssh-keygen -t rsa

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

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

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

1.使用root用户登入机器

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

[[email protected] ]# cd ~/.ssh

[[email protected] ./ssh]# ssh 172.16.22.7 cat /root/.ssh/id_rsa.pub >> authorized_keys

[[email protected] ./ssh]# ssh 172.16.22.1 cat /root/.ssh/id_rsa.pub >> authorized_keys

[[email protected] ./ssh]# scp authorized_keys 172.16.22.7:/root/.ssh/

[[email protected] ./ssh]# chmod 600 /root/.ssh/authorized_keys

3.在备份机上执行

[[email protected] ]# chmod 600 /root/.ssh/authorized_keys

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

[[email protected] ]# ssh 172.16.22.1 date

Tue Jun 13 20:39:56 CST 2017

[[email protected] ]# ssh 172.16.22.7 date

Tue Jun 13 20:39:57 CST 2017

[[email protected] ]# ssh 172.16.22.1 date

Tue Jun 13 20:39:57 CST 2017

[[email protected] ]# 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等等

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

[[email protected] ]# vim  /data0/webscripts/inotify.sh

#!/bin/bash

SRC=/data0/nginx/res/home/

[email protected]:/data0/ftpbackup

/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

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

[[email protected] ]# chmod +x /data0/webscripts/inotify.sh

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

[[email protected] ]# sh /data0/webscripts/inotify.sh &

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

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

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

[[email protected] ]# find /data0/nginx/res/home -type f | wc -l

30777

[[email protected] ]# find /data0/nginx/res/home -type f | wc -l

30777

时间: 2024-07-30 04:53:40

rsync+inotify实现数据实时同步备份的相关文章

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

一.环境描述 需求:服务器A与服务器B为主备服务模式,需要保持文件一致性,现采用sersync基于rsync+inotify实现数据实时同步 主服务器A:192.168.1.23 从服务器B:192.168.1.243 实时同步/var/atlassian目录到从服务器. 二.实施 1.从服务器192.168.1.243 rsync服务搭建 1.1安装软件包 wget http://rsync.samba.org/ftp/rsync/src/rsync-3.1.1.tar.gz tar xf r

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

将代码放在Server端,实现其它web服务器同步.首先创建rsync.shell,rsync.shell代码如下: #!/bin/bash host1=133.96.7.100 host2=133.96.7.101 host3=133.96.7.102 src=/data/www/ dst1=web1 dst2=web2 dst3=web3 user1=web1 user2=web2 user3=web3 /usr/local/inotify/bin/inotifywait -mrq --ti

[转帖]sersync基于rsync+inotify实现数据实时同步

sersync基于rsync+inotify实现数据实时同步 https://www.jianshu.com/p/d532a34e5cc5 前言 提到数据同步就必然会谈到rsync,一般简单的服务器数据传输会使用ftp/sftp等方式,但是这样的方式效率不高,不支持差异化增量同步也不支持实时传输. 原文地址:https://www.cnblogs.com/nbxcnxvcnb/p/12393252.html

rsync + inotify 实现数据实时同步

要求:两台Web服务器实现数据同步(我这里使用的是Centos 6.2-x64) 服务器一:172.16.11.126 服务器二:172.16.11.127 一.配置ssh备份源172.16.11.126(这里推荐使用专用的普通用户,注意相应的权限问题,如遇特殊情况使用root用户也可以,即不用考虑权限问题了. ) 1.新建备份用户rget rput 分别用来上传下载 [root@localhost ~]#  useradd rget [root@localhost ~]#  useradd r

rsync+inotify实现数据实时同步

inotify简介 inotify是一种强大的.细粒度的.异步的文件系统事件监控机制,Linux内核从2.6.13开始引入,允许监控程序打开一个独立文件描述符,并针对事件集监控一个或者多个文件,例如打开.关闭.移动/重命名.删除.创建或者改变属性. 配置inotify需要rsync服务能直接传输数据(免密码传输). rsync配置请参考我的另一篇利用rsync进行数据同步. 服务端已配置完毕,inotify配置在客户端. 1.[[email protected] ~]# wget http://

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

一.环境描述 测试环境 需求:服务器A与服务器B为主备服务模式,需要保持文件一致性,现采用sersync基于rsync+inotify实现数据实时同步 环境描述: 主服务器172.26.7.50 ,从服务器172.26.7.51 实时同步/home/ 及/download 目录到从服务器 二.实施方法 1.从服务器172.26.7.51 rsync服务搭建 1.1下载软件包至从服务器 下载地址:http://rsync.samba.org/ftp/rsync/src 可根据环境需求下载相应的软件

基于rsync+inotify实现数据实时同步传输

前言 与传统的cp.tar备份方式相比,rsync具有安全性高.备份迅速.支持增量备份等优点,通过rsync可以解决对实时性要求不高的数据备份需求,但随着文件数量的增大和实时同步的要求,rsync已不能满足需求,随之rsync+inotify便应运而生.本文将讲解rsync的基础知识和如何基于rsync+inotify实现数据实时同步传输. rsync相关介绍 rsync(remote sync)是一款快速增量备份工具(远程同步),支持本地复制,或者与其他SSH(安全传输).rsync主机同步.

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

说明: 一.先安装好rsync的服务端和客户端: http://douya.blog.51cto.com/6173221/1573968 二.安装,使用inotify-tools,实时同步 1.查看服务器内核是否支持inotify ll /proc/sys/fs/inotify   #列出文件目录,出现下面的内容,说明服务器内核支持inotify -rw-r--r-- 1 root root 0 Mar  7 02:17 max_queued_events -rw-r--r-- 1 root r

centos 6.9使用Rsync+Inotify-tools实现数据实时同步

说明: 操作系统:CentOS 6.9 源服务器:192.168.1.222 备份服务器:192.168.1.1.233 目的:把源服务器上/backup目录实时同步到备份服务器的/backup目录下 一.在备份服务器安装Rsync服务端 1.关闭SELINUX vi /etc/selinux/config #编辑防火墙配置文件 #SELINUX=enforcing #注释掉 #SELINUXTYPE=targeted #注释掉 SELINUX=disabled #增加 :wq! #保存,退出