实时备份

第1章 实时备份介绍

1.1 定时备份缺点

1. 浪费系统性能(数据没发生变化,但到时间也会备份)

2. 数据安全性不高(定时任务最短备份周期1分钟同步一次,如果1分钟内数据变化后,服务器宕机了, 数据就会丢失)

1.2 实时备份过程

1. 划分存储与备份服务器

2. 在存储服务器上部署监控服务,监控相应文件或目录中数据信息的变化

3. 将监控文件或目录,变化的数据信息进行推送,实现实时备份到rsync服务器中

第2章 实时备份部署原理(Inotify+rsync实现实时备份部署)

2.1 实时备份原理

2.2 Inotify软件服务介绍

Inotify是一种强大的,细粒度的,异步的文件系统事件监控机制

Linux内核从2.6.13起,加入了Inotify支持

通过Inotify可以监控文件系统中添加、删除、修改、移动等各种事件

  Inotify软件应用前提:
linux内核从2.6.13起,加入了Inotify支持,所以要求Linux内核2.6.13及以上方可使用


[[email protected] ~]# cd /proc/sys/fs/inotify/

[[email protected] inotify]# ll

total 0

-rw-r--r-- 1 root root 0 Jan 26 09:20 max_queued_events

-rw-r--r-- 1 root root 0 Jan 26 09:20 max_user_instances

-rw-r--r-- 1 root root 0 Jan 26 09:20 max_user_watches

说明:显示这三个文件则证明系统支持Inotify程序功能

[[email protected] inotify]# cat max_queued_events

16384

[[email protected] inotify]# cat max_user_instances

128

[[email protected] inotify]# cat max_user_watches

8192


通过man proc 获取内核中Inotify信息说明:

/proc/sys/fs/epoll (since Linux 2.6.28)

This  directory contains the file max_user_watches, which can be used to limit the amount of ker-nel memory consumed by the epoll interface.  For further details, see inotify(7).

[[email protected] ~]# man man 7

MANUAL SECTIONS

The standard sections of the manual include:

1      User Commands

2      System Calls

3      C Library Functions

4      Devices and Special Files

5      File Formats and Conventions

6      Games et. Al.

7      Miscellanea

8      System Administration tools and Daemons

2.3  rsync守护进程模式要部署

参考以前的文档

2.4 inotify实时监控数据变化服务部署

2.4.1 第一个里程:确认inotify软件是否安装

扩展yum源(扩展的仓库):epel(企业级linux的yum源的扩展仓库)

ü 阿里云epel源:通过访问阿里yum源镜像地址获取

ü 直接安装epel源方式:yum install epel-release

安装Inotify:   yum install inotify-tools -y


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

[[email protected] ~]# rpm -qa inotify-tools

inotify-tools-3.14-1.el6.x86_64

[[email protected] inotify]# rpm -ql inotify-tools

/usr/bin/inotifywait

/usr/bin/inotifywatch

 inotify-tools包括2个工具

1.  /usr/bin/inotifywait   --- 开启实时监控服务,监控目录或文件的数据变化

2.  /usr/bin/inotifywatch  --- 收集被监控的文件系统使用的统计数据,指文件系统事件发生的次数统计。

说明:yum安装后可以直接使用,如果编译安装需要进入到相应的软件目录的bin目录下使用

2.4.2 第二个里程:事件目录监控命令总结(后续有参数的详解)

inotifywait -mrq /data

inotifywait -mrq --timefmt "%y/%m/%d %H:%M" --format "%T %w%f" /data

inotifywait -mrq --timefmt "%F" --format "%T %w%f 事件信息:%e" /data

inotifywait -mrq --timefmt "%F" --format "%T %w%f 事件信息:%:e" -e create /data

脚本需要编写监控命令:

inotifywait -mrq  --format "%w%f" -e create,close_write,delete,moved_to /data

2.4.3 第三个里程碑:利用脚本的方式,将以上两个服务串联在一起


[[email protected] scripts]# vim inotify.sh

[[email protected] scripts]# cat inotify.sh

#!/bin/bash

inotifywait -mrq  --format "%w%f" -e create,close_write,delete,moved_to /data|\

while read line

do

rsync -az /data/ --delete [email protected]::backup --password-file=/etc/rsync.password

done

扩展:shell脚本循环方式

1. for循环:指定循环条件,循环条件不满足会停止循环

2. while循环:指定循环条件,循环条件满足时,会无限循环(实现死循环)

3. until循环:指定循环条件,循环体检不满足时,会无限循环

注意:脚本在无限循环执行时的中断操作

1. 利用ctrl+z,只是暂停脚本运行(暂停的进程),在killall -f inotify,再切换到前台时,已被杀死

注:

ctrl+z       ---------将当前进程挂起,即调入后台并停止执行

jobs          -------查看后台停止的进程和对应的进程号(PID)

fg + 进程序号      ------将后台的命令放前台继续执行

bg                  ------将前台运行的命令放入后台继续执行

2.  pkill -f inotify                          -f:带inotify字符的进程都杀死

3.  kill -9 9857 9859        ----------kill后面接进程对应的PID号(-9 选项用于强制终止)

2.4.4 第四个里程碑:开机自动运行

给脚本赋予x执行权限,将执行命令放入/etc/rc.local中

第3章 重要参数说明

3.1 inotifywait常用参数

-m   #保持实时监控,前台监控

-d   #类似-m,在后台监控

-r   #递归监控

-q   #输出信息少,安静模式

--timefmt #指定时间输出的格式

--format #指定指定的输出类型格式(%w:监控目录)

-e   #指定事件类型(如:modify、create、close_write、move、delete、attrib)

注:-e指定的事件类型,下面有详详解

3.1.1 inotifywait中- -format的常用参数

%f              ----------监控目录中哪个文件触发了这个事件

%w             ----------监控的目录

%T             ----------timefmt定义的时间格式

%e             -----------产生事件的信息,多个事件默认以逗号分割

%Xe            -----------输出连续事件信息时,X表示以什么符号分割

3.1.2 inotifywait中 -e参数的常用事件类型

close_write             -----------文件或目录在写入模式打开之后关闭

close_nowrite           -----------文件或目录在只读模式打开之后关闭

moved_to              ------------将文件或目录移动(拉)到监控目录中

moved_from           ------------将文件或目录从监控目录中移动(推)出去

create                  ------------在监控目录中创建文件或目录

delete                  ------------在监控目录中删除文件或目录

3.2 测试在监控目录中对文件的各种操作所触发的监控事件类型

3.2.1 创建文件逻辑过程


[[email protected] data]# touch wuhuang.txt


[[email protected] data]# inotifywait -m /data/

/data/ CREATE wuhuang.txt

/data/ OPEN wuhuang.txt

/data/ ATTRIB wuhuang.txt

/data/ CLOSE_WRITE,CLOSE wuhuang.txt

3.2.2 删除文件逻辑过程


[[email protected] data]# rm wuhuang.txt -f


[[email protected] data]# inotifywait -m /data/

/data/ DELETE wuhuang.txt

3.2.3 修改文件逻辑过程


[[email protected] data]# echo 123>wuhuang.txt


[[email protected] data]# inotifywait -m /data/

/data/ OPEN wuhuang.txt

/data/ MODIFY wuhuang.txt

/data/ CLOSE_WRITE,CLOSE wuhuang.txt

3.2.4 移动文件逻辑过程

  将/data/目录下的wuhuang.txt移动到/tmp


[[email protected] data]#mv wuhuang.txt /tmp/


[[email protected] data]# inotifywait -m /data/

/data/ MOVED_FROM wuhuang.txt

  将/tmp/wuhuang.txt移动到/data/目录下


[[email protected] data]#mv /tmp/wuhuang.txt ./


[[email protected] data]# inotifywait -m /data/

/data/ MOVED_TO wuhuang.txt

  将/etc/hosts复制到/data


[[email protected] data]#cp /etc/hosts ./


[[email protected] data]# inotifywait -m /data/

/data/ CREATE hosts

/data/ OPEN hosts

/data/ MODIFY hosts

/data/ CLOSE_WRITE,CLOSE hosts

  将/data/wuhuang.txt复制到/tmp


[[email protected] data]# cp wuhuang.txt /tmp/


[[email protected] data]# inotifywait -m /data/

/data/ OPEN wuhuang.txt

/data/ CLOSE_NOWRITE,CLOSE wuhuang.txt

3.2.5 修改文件属性信息


[[email protected] data]# chmod 600 wuhuang.txt


[[email protected] data]# inotifywait -m /data/

/data/ ATTRIB wuhuang.txt

3.2.6 对文件进行重命名


[[email protected] data]# mv wuhuang.txt wh.txt


[[email protected] data]# inotifywait -m /data/

/data/ MOVED_FROM wuhuang.txt

/data/ MOVED_TO wh.txt

注意:Tab键也会触发监控,测试时为了更好的看到效果,尽量少用Tab键

3.3 Inotify服务优化

3.3.1 在/proc/sys/fs/inotify/目录下有三个文件,对inotify机制有一定的限制

(1) max_user_watches: 设置inotifywait或inotifywatch命令可以监视的文件数量(单进程)
默认监控文件数量:8192
(2)max_user_instances: 设置每个用户可以运行的inotifywait或inotifywatch命令的进程数
默认监控进程数:128
一个服务识别不同的配置文件,启动多个进程,开启多不同的socket条目,生成多个不同端口信息
以上操作就实现了一个服务的多实例创建
(3) max_queued_events: 设置inotify实例事件(event)队列可容纳的事件数量
   默认队列中事件数量:16384

监控目录中文件变化越频繁,这个值就越大,超过设置的最大值就会被丢弃

针对以上三个文件可做优化:

建议设置为最大值:50000000,并设置开机自启(有时候重启可能会恢复,需要放在/etc/rc.local)

echo “50000000” >/proc/sys/fs/inotify/max_user_watches

echo “50000000” >/proc/sys/fs/inotify/max_queued_events

echo "50000000"   >/proc/sys/fs/inotiofy/max_user_istances

 将这三条命令追加到/etc/rc.local中。

参考man帮助:

man inotify   ---------有显示inotify(7),7表示第七个级别

man man    ----------可能查看man的七个级别的含义

man 7 inotify    ----------即可查看inotify中max_queque_event等三个文件的使用帮助

第4章 Inotify软件的优缺点

4.1 优点

监控文件系统事件变化,通过同步工具(rsync)实时同步数据

4.2 缺点

1. 并发如果大于200个文件(大小4-100k),同步时就会有延时

2. 前面写的脚本,每次都是全部推送一次,但确实是增量的。也可以只同步变化文件,不 变化的可以不理。

3. 监控到事件后,rsync同步是单线程的(效率低),serync同步是多线程(效率高)

注:一个进程可管理多个线程

4.  inotify实现实时同步需要编写shell脚本

第5章 sersync软件

5.1 sersync功能信息

1. 支持配置文件管理

2. 真正的守护进程是socket

3. 可以对失败文件定时重传(定时任务的功能)

4. 第三方的HTTP接口(例如CDN缓存)

5. 默认多线程同步,效率高(inotify是单线程)

5.2 sersync软件服务部署流程

5.2.1 部署rsync守护进程服务

5.2.2 第一个里程碑:确认软件是否安装(sersync)

绿色软件包的安装方式(二进制包安装方式)

sersync软件官方地址:https://github.com/wsgzao/sersync

进行软件下载

将下载好的软件程序上传到服务器中(nfs服务器)

解压缩软件程序包: unzip sersync_installdir_64bit.zip

将软件程序目录移动到指定目录中: mv sersync/  /usr/local/

5.2.3 第二个里程碑:编写sersync配置文件(修改前先备份源文件)

vim  /usr/local/sersync/conf/confxml.xml

注:此处只列出主要修改项

 <sersync>
 <localpath watch="/home/"> <!-- 这里填写被监控服务器(NFS)要同步的文件夹路径-->
 <remote ip="8.8.8.8" name="rsync"/> <!-- 这里填写rsync服务器的IP地址和模块名-->
 <!--<remote ip="192.168.28.39" name="tongbu"/>-->
 <!--<remote ip="192.168.28.40" name="tongbu"/>-->
 </localpath>
 <rsync>
 <commonParams params="-artuz"/>  <!-- 这里填写rsync命令的参数的认证信息-->
 <auth start="true" users="rsync" passwordfile="/app/local/sersync/user.pass"/> <!-- rsync+密码文件 这里填写rsync服务器的认证信息-->
 <userDefinedPort start="false" port="874"/><!-- port=874 -->
 <timeout start="false" time="100"/><!-- timeout=100 -->
 <ssh start="false"/>
 </rsync>

一些标签了解(详细内容参见官网)


<filter start="false">

<exclude expression="(.*)\.svn"></exclude>

<exclude expression="(.*)\.gz"></exclude>

<exclude expression="^info/*"></exclude>

<exclude expression="^static/*"></exclude>

</filter>

说明:filter实时同步的排除功能

<inotify>

<delete start="true"/>

<createFolder start="true"/>

<createFile start="false"/>

<closeWrite start="true"/>

<moveFrom start="true"/>

<moveTo start="true"/>

<attrib start="false"/>

<modify start="false"/>

</inotify>

说明:inotify指定监控文件或目录变化的事件信息

5.2.4 第三个里程碑:启动sersync服务

1. chmod +x sersync #先授予sersync命令执行权限

2. /bin/sersync -h      #查看帮助(都是中文的)

3)/bin/sersync  -dro  /usr/local/sersync/conf/confxml.xml

注:不要用xinetd管理rsync服务(sersync会调用inotify+rsync服务,如果rsync是由xinetd启动的会不识别)


[[email protected] bin]# pwd

/usr/local/sersync/bin

[[email protected] bin]# chmod +x sersync

[[email protected] bin]# ./sersync -h

set the system param

execute:echo 50000000 > /proc/sys/fs/inotify/max_user_watches

execute:echo 327679 > /proc/sys/fs/inotify/max_queued_events

parse the command param

_______________________________________________________

参数-d:启用守护进程模式

参数-r:在监控前,将监控目录与远程主机用rsync命令推送一遍

c参数-n: 指定开启守护线程的数量,默认为10个

参数-o:指定配置文件,默认使用confxml.xml文件

参数-m:单独启用其他模块,使用 -m refreshCDN 开启刷新CDN模块

参数-m:单独启用其他模块,使用 -m socket 开启socket模块

参数-m:单独启用其他模块,使用 -m http 开启http模块

不加-m参数,则默认执行同步程序

5.2.5 第四个里程碑:查看服务是否启动

ps -ef |grep sersync

5.3 高并发数据实时同步方案小结

1. inotify(sersync)+rsync ,是文件级别的。

2. drbd文件系统级别,基于block块同步,缺点:备节点数据不可用

3. 第三方软件的同步功能:mysql同步(主从复制),oracle,mongodb。

4. 程序双写,直接写两台服务器

5. 利用产品业务逻辑解决(读写分离,备读不到,读主)。

原文地址:http://blog.51cto.com/12805107/2066044

时间: 2024-10-09 05:37:19

实时备份的相关文章

rsync+inotify 实现数据的实时备份

我这个人写一些东西难免要发一番感慨,今天做rsync+inotify实现实时备份,做了好长时间没做出来,这段时间我看了好多博文还有一些视频,但自己做的时候还是没做出来,非常郁闷,就拿起书慢慢的看起来,最终我把思路整理好,又重新试验了一遍终于成功了.是的,你百分之九十的时间在实践,而剩下百分之十的时间才能到达成功,坚持加再看一遍很重要. 我先整理一下大致思路,如有时间,我再整理完整的文档出来. 1.先在两台主机里面安装rsync. 2.在服务节点上配置rsync. 3.在内容发布节点上安装inot

通过rsync+inotify实现文件的实时备份同步

原文参考:http://ixdba.blog.51cto.com/2895551/580280/ http://www.bamaol.com/Psy/Showposts-010000108-5048.html 一,rsync安装 目前rsync的最新版本是3.0.9 wget http://rsync.samba.org/ftp/rsync/rsync-3.0.9.tar.gz tar-xvzfrsync-3.0.9.tar.gz;cdrsync-3.0.9; ./configure;make;

linux之间通过rsync+inotify-tools实现自动实时备份

两台rhel5.6web服务器,上面跑的都是Apache,目录都是/va/www/html,现在想把线上的web数据实时备份到另外一台web服务器,即这个"另外一台web服务器"作为实时备用机器,这里我把线上的web机称为源服务器,作为实时备用的服务器称为目标服务器 实验过程: 第一部分:配置目标服务器: #service iptables stop #setenforce 0 #yum install httpd #service httpd start #chkconfig --l

老男孩教育运维班100台规模集群存储系统搭建及数据实时备份上机实战

老男孩教育运维班0基础起步上机实战系列项目 老男孩教育运维班100台规模集群存储系统搭建及数据实时备份上机实战 项目要求: 1.全体学员上机实践考试,完成后由排长或班长.或助教打分. 2.时间:90分钟,抄袭0分. (一)上机服务器业务及IP主机名规划 已知4台服务器主机名主机对应信息见下表: 服务器说明 外网IP 内网IP 主机名 apache web服务器 10.0.0.7/24 172.16.1.7/24 web02 nginx web服务器 10.0.0.8/24 172.16.1.8/

rsync+inotify-tools+ssh实现mysql-bin日志文件实时备份

1.环境:两台Centos计算机直连,其服务器A的IP地址为192.168.1.124,服务器B的IP地址为192.168.1.121. 2.需求软件安装(ssh系统默认已经安装): 服务器A: yum install rsync inotify-tools 服务器B: yum install rsync 3.建立用户(备份执行用户) 建立用户:useradd rsync 设置密码:略 注意:两台服务器都需要建立用户(此处两天服务器建立了相同的用户,也可建立不同的用户) 4.建立ssh-key实

【运维小实验】数据镜像备份实验inotify+rsync实时备份

数据镜像备份实验inotify+rsync实时备份 本文是基于VM搭建的虚拟集群环境,全部虚拟机网卡模式为NAT方式相连,处于同一网段. 搭建环境: 使用redhead 2.6.32-431.el6.x86_64版本的linux,创建两台,配置相关网络信息,确保同一网段下. 安装配置rsync+inotify Rsync一般系统默认安装了,如果没有安装的去相关网站下载安装包解压安装即可 Inotify登陆https://github.com/rvoicilas/inotify-tools/wik

rsync+inotify实时备份加nfs挂载实战

因公司近期业务要求需要搭建一套服务具体要求如下图: 1.基本备份要求 已知 3 台服务器主机名分别为A(web01).B(backup) .C(nfs01) 要求: 每天晚上 0 00 点整在 b Web 服务器 A A 上 打包 备份系统配置文件.网站程序目录及访 问日志并通过 c rsync 命令推送备份服务器 B B 上备份保留(备份思路可以是先在本地按日期 打包,然后再推到备份服务器 B B 上). 具体要求如下: 1)Web 服务器 A 和备份服务器 B 的备份目录必须都为/backu

MySQL 实时备份

阅读目录 环境介绍 主服务器的配置 从服务器的配置 Windows 定时备份数据库脚本 前面笔者在其他随笔中有说过,公司数据库选用的是免安装版并且是在Windows上,等过段时间我会将数据库迁移至Linux 因公司开发操作数据库之多,如不及时备份,万一操作失误,恢复可就成难题了 此篇随笔将介绍如何进行 MySQL 的实时备份 环境介绍 两台服务器进行主从同步复制(安装可以通过google查询相关资料或者看笔者的这篇免安装版) 利用Windows脚本和Windows自带的计划任务,将主服务器进行实

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

我讲到过利用rsync实现数据的镜像和备份,但是要实现数据的实时备份,单独靠rsync还不能实现,本文就讲述下如何实现数据的实时备份. 一.rsync的优点与不足 与传统的cp.tar备份方式相比,rsync具有安全性高.备份迅速.支持增量备份等优点,通过rsync可以解决对实时性要求不高的数据备份需求,例如定期的备份文件服务器数据到远端服务器,对本地磁盘定期做数据镜像等. 随着应用系统规模的不断扩大,对数据的安全性和可靠性也提出的更好的要求,rsync在高端业务系统中也逐渐暴露出了很多不足,首

通过rsync+inotify实现数据的实时备份 【转载】

   在前面的博文中,我讲到过利用rsync实现数据的镜像和备份,但是要实现数据的实时备份,单独靠rsync还不能实现,本文就讲述下如何实现数据的实时备份. 一.rsync的优点与不足  与传统的cp.tar备份方式相比,rsync具有安全性高.备份迅速.支持增量备份等优点,通过rsync可以解决对实时性要求不高的数据备份需求,例如定期的备份文件服务器数据到远端服务器,对本地磁盘定期做数据镜像等.  随着应用系统规模的不断扩大,对数据的安全性和可靠性也提出的更好的要求,rsync在高端业务系统中