day37-实时同步

数据备份方案

企业网站和应用都得有完全的数据备份方案确保数据不丢失,通常企业有如下的数据备份方案

定时任务定期备份

需要周期性备份的数据可以分两类:

  • 后台程序代码、运维配置文件修改,一般会定时任务执行脚本进行文件备份,然后配置Rsync工具推送到远程服务器备份
  • 对于数据库文件用定时任务脚本配合数据库提供的备份工具,定时生成备份文件,配合Rsync备份到远端

为什么要用实时同步服务 

因为定时任务有缺陷,一分钟以内的数据无法进行同步,容易造成数据丢失

实时复制方案

实施复制是最适合企业备份重要数据的方式,用于用户提交的数据备份,对于用户提交的普通文件(jpg、tar、zip、MP4、txt、html)等待,都可以用Inofity+Rsync实时备份方案。

对于数据文件,还有更复杂的分布式存储方案,把数据同时备份成多份,如FastDFS、GlusterFS等

对于提交到数据库中的数据,还可以用数据库的主从复制(如MySQL),这是软件自带的实时备份。

图解备份方式

rsync+crond定时备份

rsync+inotify实时同步 

实时同步结合NFS 

inotify隆重出场 

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

事件是指如文件的增删改查都是事件。

Linux2.6.13开始就引入了inotify这个功能,用于监控文件系统的增删改查等事件。

第三方软件能实现监控文件内容变化,其实是因为linux提供了这个inotify机制功能。

Inofity-tools+Rsync实施复制实战

先准备rsyncd服务环境

Backup服务器(rsync服务端41)

1.恢复了快照,重新安装rsync服务端

就是一个干净的环境

2.快速的部署rsyncd服务端

#!/bin/bash
yum install rsync -y

cat > /etc/rsyncd.conf << 'EOF'
uid = www 
gid = www 
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = false
auth users = rsync_backup
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log
[backup]
comment = chaoge rsync backup!
path = /backup
EOF

useradd -u 1000 -M -s /sbin/nologin www
mkdir -p /{backup,data}
chown -R www:www /{backup,data}
echo "rsync_backup:yuchao666" > /etc/rsync.passwd
chmod 600 /etc/rsync.passwd
systemctl start rsyncd

3.执行脚本部署服务端的rsync
 

bash instal_rsync.sh

dev服务器部署(rsync客户端31)

##试试是否可正确rsync备份

[root@nfs-31 ~]#touch /opt/我是nfs31.log



##免密码,提前把同步需要的密码设置好

#export RSYNC_PASSWORD=yuchao666

rsync  -avzP /opt/ --delete rsync_backup@172.16.1.41::backup

准备部署inotify-tools软件(nfs-31机器)

内核检查

[root@nfs-31 ~]#uname -r
3.10.0-862.el7.x86_64

还有内核参数检查,本质上是linux支持inotify机制
在性能还可以优化,支持更高的文件并发数
#检测多少个文件 ,文件内容大量的发生变化,inotify机制能同时检测多少文件
这个参数的优化,就是调整linux的几个文件

[root@nfs-31 ~]#ls -l /proc/sys/fs/inotify/
total 0
-rw-r--r-- 1 root root 0 Apr 20 20:08 max_queued_events
-rw-r--r-- 1 root root 0 Apr 20 20:08 max_user_instances
-rw-r--r-- 1 root root 0 Apr 20 20:08 max_user_watches

系统文件解释
max_user_watches:    设置inotifywait或inotifywatch命令可以监视的文件数量(单进程)
默认只能监控8192个文件

max_user_instances:    设置每个用户可以运行的inotifywait或inotifywatch命令的进程数
默认每个用户可以开启inotify服务128个进程

max_queued_events:    设置inotify实例事件(event)队列可容纳的事件数量
默认监控事件队列长度为16384

inotify-tools 系统自带的比较low的工具

sersync 金山云的运维通过c++开发的工具

lsyncd三个工具  最新的,目前有人在用,适用于大规模服务器环境的工具
这些工具就3件事


1.优化,调整了这3文件的参数
2.检测某个目录
3.触发rsync命令

安装inotifty-tools工具

需要配置好epel源,才可以安装

[root@nfs-31 ~]#  yum install inotify-tools -y


检查生成的软件命令
[root@nfs-31 ~]# rpm -ql inotify-tools | head -2
/usr/bin/inotifywait
/usr/bin/inotifywatch

Inotifywait详解

上述操作我们安装好了Inotify-tools软件,生成2个重要的命令

inotifywait:在被监控的目录等待特定文件系统事件(open、close、delete等事件),执行后处于阻塞状态,适合在Shell脚本中使用,是实现监控的关键
Inotifywatch:收集被监控的文件系统使用的统计数据(文件系统事件发生的次数统计【inotifywait命令解释】

inotifywait实践

所有事件,任意的linux命令,只要对该目录的数据

对文件发生了修改动作,都会被检测到


mkdir /nfs-data

[root@nfs-31 ~]#inotifywait -mrq --timefmt '%T' --format "%T----%w------%f 捕获到的事件是:%e" /nfs-data
12:27:56----/nfs-data/------ 捕获到的事件是:CLOSE_NOWRITE,CLOSE,ISDIR
12:27:56----/nfs-data/------ 捕获到的事件是:OPEN,ISDIR
12:27:56----/nfs-data/------ 捕获到的事件是:CLOSE_NOWRITE,CLOSE,ISDIR

需要指定检测事件的名字

Events    含义
access    文件或目录被读取
modify    文件或目录内容被修改
attrib    文件或目录属性被改变
close    文件或目录封闭,无论读/写模式
open    文件或目录被打开
moved_to    文件或目录被移动至另外一个目录
move    文件或目录被移动到另一个目录或从另一个目录移动至当前目录
create    文件或目录被创建在当前目录
delete    文件或目录被删除
umount    文件系统被卸载

Create、delete

检测,创建,删除两个时间,只有你执行了对应的linux命令,才会生成日志

-e  events 事件名

[root@nfs-31 ~]#inotifywait -mrq --timefmt '%T' --format "%T----%w------%f 捕获到的事件是:%e" -e  delete,create /nfs-data


12:29:46----/nfs-data/------hehe.log 捕获到的事件是:CREATE
12:30:24----/nfs-data/------aoligei.log 捕获到的事件是:CREATE

12:31:03----/nfs-data/------hehe.log 捕获到的事件是:DELETE

move事件

[root@nfs-31 ~]#
[root@nfs-31 ~]#inotifywait -mrq --timefmt '%T' --format "%T----%w------%f 捕获到的事件是:%e" -e  move   /nfs-data


12:31:48----/nfs-data/------xixi.log 捕获到的事件是:MOVED_FROM
12:31:48----/nfs-data/------xixi.png 捕获到的事件是:MOVED_TO
12:32:17----/nfs-data/------xixi.png 捕获到的事件是:MOVED_FROM



12:32:54----/nfs-data/------xixi.png 捕获到的事件是:MOVED_TO

close_write事件

[root@nfs-31 ~]#inotifywait -mrq --timefmt '%T' --format "%T----%w------%f 捕获到的事件是:%e" -e  close_write     /nfs-data

总结inotify-wait命令

1.该命令,在大量文件生成的时候,需要检测,性能会骤然下降,以及会丢失数据,有部分的文件,会无法被检测到,也就是无法被后续的动作抓取到

适用于数据量不大的情况下,你用也没问题,以及对数据

基于sersync工具同步(了解)

服务端

跑的是上面rsync

客户端

1.下载安装

1.下载安装
cd /opt && wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/sersync/sersync2.5.4_64bit_binary_stable_final.tar.gz

[root@nfs-31 /opt]#tar -zxvf sersync2.5.4_64bit_binary_stable_final.tar.gz 

修改名字
[root@nfs-31 /opt]#mv GNU-Linux-x86/   sersync254

进入sersync254

 2.修改配置文件

找到需要检测的目录配置段,修改为你的机器环境即可

检测nfs-31  /nfs-data目录

修改如下部分配置
 23     <sersync>
 24         <localpath watch="/nfs-data">
 25             <remote ip="172.16.1.41" name="backup"/>
 26         </localpath>
 27         <rsync>
 28             <commonParams params="-az"/>
 29             <auth start="true" users="rsync_backup" passwordfile="/etc/rsync.pwd"/>

./sersync2 -h  命令帮助
清空nfs_data文件  touch {1..10}.png

3.设置密码文件,修改密码权限


[root@nfs-31 /nfs-data]#echo "yuchao666"  > /etc/rsync.pwd
[root@nfs-31 /nfs-data]#chmod 600 /etc/rsync.pwd 

4.启动服务

/opt/sersync254/sersync2  -r -d -o  /opt/sersync254/confxml.xml 

5.执行命令

 cd /nfs-data && rsync -az -R --delete ./ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.pwd

 

lsyncd工具(推荐使用)

1.下载安装 

yum install lsyncd -y

2.修改配置文件,(只检测一个目录)

[root@nfs-31 /data]#cat /etc/lsyncd.conf

settings {
    logfile      ="/var/log/lsyncd/lsyncd.log",
    statusFile   ="/var/log/lsyncd/lsyncd.status",
    inotifyMode  = "CloseWrite",
    maxProcesses = 8,
    }

sync {
    default.rsync,
    source    = "/nfs-data",
    target    = "rsync_backup@172.16.1.41::backup",
    delete= true,
    exclude = {".*"},
    delay=1,
    rsync     = {
        binary    = "/usr/bin/rsync",
        archive   = true,
        compress  = true,
        verbose   = true,
        password_file="/etc/rsync.pwd",
        _extra={"--bwlimit=200"}
        }
    }
    

 

3.启动服务

[root@nfs-31 /nfs-data]#
[root@nfs-31 /nfs-data]#systemctl start lsyncd
[root@nfs-31 /nfs-data]#
[root@nfs-31 /nfs-data]#systemctl status lsyncd

 4.使用工具

生成100个log文件

[root@nfs-31 /nfs-data]#for i in {1..100};do echo ${i} > ${i}.log;sleep 0.1;done

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

激进的猴哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值