title: 全网实时热备inotify+rsync
tags: 备份,inotify,rsync


全网实时热备inotify+rsync

1 为什么需要inotify?


当全网部署了NFS存储后,如果提供NFS服务的设备宕机或者故障了,那么我们的与之相连的NFS客户端都会受到影响,严重可能会导致数据丢失,因此,为了防止单点故障,我们要给提供NFS服务的主机的数据目录做一个实时同步,这样NFS服务器宕机或者其他故障后,我们能很轻易的把备份节点设置为NFS的共享目录,让那些NFS客户端重新挂载NFS共享盘,这样可以尽量减少损失,提高服务满意度。
inotify是可以监控文件系统操作,比如读取、写入和创建。Inotify 反应灵敏,用法非常简单,使用起来也十分高效, 而rsync可以直接推送文件到远程daemon目录,而且支持增量备份。因此我们可以通过使用inotify监控到文件系统有创建,删除,修改后触发rsync进行同步推送到备份服务器里。于是如图所示,我们在备份服务器里搭建一个rsync daemon,并创建/backup用来专门与NFS存储的数据目录作为实时同步的远端目录,而在对应的NFS存储中安装inotify,用来对/data目录进行动态监控,一旦发现/data目录有创建,删除,修改后立刻触发rsync进行同步推送到备份服务器的/backup里,从而保证两端的数据一致性,增强NFS存储的安全性。

2 安装inotify

  1. 下载源码包文件:inotify-tools-3.14.tar.gz
  2. 解压缩,并安装inotify,因为inotify是一个源码包文件,所以安装的时候注意,先要编译,通过--prefix=PATH指定编译安装的路径,然后在进行make和make install。安装完成后,因为源码安装是带程序的版本号的,最好做一个软链接把版本号去掉,这样在后续使用中会方便很多。另外安装后,在安装目录中会生成4个目录,bin (inotify的执行命令)、 include (inotify所需的头文件) 、lib (动态链接文件)、 share (帮助文档)。安装过程如下:

    [root@server ~]# tar zxf inotify-tools-3.14.tar.gz
    [root@server ~]# ls -l |grep "inotify-tools-3.14"
    drwxrwxrwx.  5 1000 1000    4096 Mar 14  2010 inotify-tools-3.14
    -rw-r--r--.  1 root root  358772 May 19 17:52 inotify-tools-3.14.tar.gz
    [root@server ~]# cd inotify-tools-3.14
    [root@server inotify-tools-3.14]# ./configure --prefix=/usr/local/inotify-tools-3.14/
    [root@server inotify-tools-3.14]# make && make install
    [root@server inotify-tools-3.14]# ln -s /usr/local/inotify-tools-3.14 /usr/local/inotify-tools
    [root@server inotify-tools-3.14]# cd /usr/local/inotify-tools && ls
    bin  include  lib  share

3 inotify的相关命令和参数介绍

  1. inotify 有两个工具,一个是inotifywait,这个的作用是在被监视的文件或目录上等待特定文件系统事件(open,close.delete等)的发生,执行后处于阻塞状态。另一个工具是inotifywatch,它的作用是在收集被监视文件系统使用度统计数据,指文件系统事件发生次数的统计。我们此次用来监控文件系统事件的发生是使用inotifywait工具。
  2. 常用参数有:
-m :始终监控
-q:安静,不输出其他东西
-r:递归
-e:文件系统事件,文件系统事件常用参数有create,delete,close_write
具体可以查询帮助:[root@server bin]# ./inotifywait -help
常用语法:[root@server data]#  /usr/local/inotify-tools/bin/inotifywait -mrq --format %w%f -e create,close_write,delete /data

3 . 对inotify进行测试,看看是否满足需求

[root@server data]#  /usr/local/inotify-tools/bin/inotifywait -mrq --format %w%f -e create,close_write,delete /data
因为inotify开启后是时刻监控着/data目录,切处于阻塞状态,因此我们要么让它在后台运行,要么重新开一个窗口,因为我们需要清晰的看到监控的事件,因此重新再打开一个窗口。
Last login: Sun May 20 20:06:00 2018 from 192.168.50.50
[root@server ~]#
[root@server ~]# cd /data
[root@server data]# ls
a  aaa  bb  cc  dd  file  nnn
[root@server data]#
[root@server data]#
[root@server data]# rm -rf *
[root@server data]# ls
[root@server data]#
[root@server data]#  /usr/local/inotify-tools/bin/inotifywait -mrq --format %w%f -e create,close_write,delete /data/data/a
/data/aaa
/data/bb
/data/cc
/data/dd
/data/file
/data/nnn
由此我们可以看到了,inotify确实监控到了这些事件的发生,因此我们可以利用read这个变化来触发调用rsync进行推送数据。

4 在备份服务器上部署rsync daemon

  1. 创建rsync的配置文件,并将相关参数写入配置文件,如下所示

    [root@backup ~]# touch /etc/rsyncd.conf
    [root@backup ~]# cat /etc/rsyncd.conf
    #rsyncd-conf start
    uid = rsync
    gid = rsync
    use chroot = no
    max connections = 2000
    timeout = 600
    pid file= /var/run/rsyncd.pid
    lock file = /var/run/rsync.lock
    log file = /var/log/rsyncd.log
    ignore = errors
    read only = false
    list = false
    hosts allow = 192.168.50.0/24
    hosts deny = 0.0.0.0/32
    auth users = rsync-backup
    secrets file = /etc/rsync.password
    #####################################
    [backup]
    comment = backup
    path = /backup
  2. 创建密码文件,并设置相关权限,用来和rsync客户端匹配密码的。
    [root@backup ~]# touch /etc/rsync.password
    [root@backup ~]# echo "rsync-backup:root" >/etc/rsync.password
    [root@backup ~]# cat /etc/rsync.password
    rsync-backup:root
    [root@backup ~]# chmod 600 /etc/rsync.password
    [root@backup ~]# ls -l /etc/rsync.password
    -rw-------. 1 root root 18 May 21 06:23 /etc/rsync.password
    这里需要注意密码文件必须和配置文件里的相对应
  3. 创建rsync用户,设置为不需要登录,组也是rsync,需要注意的是这个用户要和配置文件里的uid=用户对应,而auth users = rsync-backup是个虚拟的用户可以不用管,这可以在一定程度上提高安全性,因为rsync的用户名不一定需要使用rsync,只要与配置文件里的uid=XX,对应上就好了。
    [root@backup ~]# useradd -g rsync -M -s /sbin/nologin rsync
    [root@backup ~]# grep rsync /etc/passwd
    rsync:x:506:506::/home/rsync:/sbin/nologin
  4. 启动rsync daemon
    [root@backup ~]# rsync --daemon
  5. 在对应的NFS服务器上也创建密码文件,用于来和服务端匹配密码如下:
    [root@server data]# echo "root" > /etc/rsync.password
    [root@server data]# chmod 600  /etc/rsync.password
    [root@server data]# ls -l /etc/rsync.password                                -rw-------. 1 root root 5 May 14 20:44 /etc/rsync.password
  6. 在NFS服务器上推送文件看看是否能成功推送
    [root@server data]# echo "hello" >file1
    [root@server data]# rsync file1 rsync-backup@192.168.50.4::backup/ --password-file=/etc/rsync.password
    在备份服务器查看是否推送成功
    [root@backup ~]# cat /backup/file1
    hello
    [root@backup /]# cd /backup &&ls
    backup  file1
    [root@backup backup]#

    5 我们可以在NFS服务端部署脚本,让脚本监控到事件发生后调用rsync进行推送

    [root@server scripts]# cat inotify.sh
    #!/bin/bash
    inotify=/usr/local/inotify-tools/bin/inotifywait
    $inotify -mrq --format '%w%f' -e create,close_write,delete /data | while read file
    do
    cd / &&
    rsync -az /data --delete rsync-backup@192.168.50.4::backup/ \
    --password-file=/etc/rsync.password
    done

    6 进行对server和backup进行测试

    server端创建文件:
    [root@server data]# rm -rf *
    [root@server data]# touch a
    [root@server data]# rm -rf *
    [root@server data]# for n in `seq 1000` ;do touch file$n; done
    [root@server data]# ls |wc -l
    1000
    backup端查看是否推送过来:
    [root@backup backup]# cd data
    [root@backup data]# ls
    a
    [root@backup data]#
    [root@backup data]#
    [root@backup data]# ls
    [root@backup data]#
    [root@backup data]# ls |wc -l
    1000

    7 将inotify脚本设置为开机启动,这样两台服务器就可以永久实现实时同步

    [root@backup data]# echo "sh /service/scripts/inotify.sh & " >>/etc/rc.local

8 inotify对应的优化参数:

在/proc/sys/fs/inotify目录下的max_queued_events 、max_user_instances、max_user_watches对inotify有一定的限制。其中:

  1. max_user_watches:设置inotifywaite或者inotifywatch命令可以监控的文件数量(单进程),可以设置为50000000。
    [root@backup inotify]# echo "50000000" > /proc/sys/fs/inotify/max_user_watches
  2. max_user_instances:设置每个用户可以运行inotifywaite或者inotifywatch命令的进程数,默认是128,可以设置为50000000。
    [root@backup inotify]# echo "50000000" > /proc/sys/fs/inotify/max_user_instances [root@backup inotify]# cat max_user_instances
    50000000
  3. max_queued_events:设置inotify实例事件(event)队列可容纳事件的数量,默认是327679,可以设置为50000000。
    [root@backup inotify]# cat  max_queued_events
    327679
    [root@backup inotify]# echo "50000000" > /proc/sys/fs/inotify/max_queued_events
    [root@backup inotify]# cat max_queued_events
    50000000

转载于:https://blog.51cto.com/ouyangtao/2121825

全网实时热备inotify+rsync相关推荐

  1. 文件共享存储主备实时热备实现方案

    一.方案图 该方案可以解决nfs服务器的单点故障问题,也可以解决数据的备份难题,可以作为公司从nfs文件系统-->分布式存储系统的过渡解决方案.由于我公司从初创到至今,用户的产生数据量与日俱增, ...

  2. 企业级别应用--rsync远程同步(配置 rsync 备份源、rsync 下行和上行、inotify+rsync 实时备份)

    文章目录 一.配置 rsync 源服务器 1.1 rsync简介 1.2 rsync特点 1.3 配置 rsync 同步源 1.4 测试rsync功能 下行同步的三种方式 二.inotify+rsyn ...

  3. 中山市交通集团热备容灾项目成功案例

    转载于:金橙科技 关健词:金橙科技:数据库热备:热备:切换:DBG:数据库热备软件:Oracle热备:SQL Server热备 作者:DataKing(金橙科技) 用户需求背景 客户背景     中山 ...

  4. 粉丝让我爬取热搜话题,结果做成了实时热搜『跑马灯』可视化

    大家好,我是阿辰. PS:(这里跟读者说一下,以后本公众号推文更新时间段是13:00~14:00,默认是13:00) 之前有粉丝让我爬取网上热搜话题,根据粉丝的这个提议,我想到了爬取不同平台的热搜话题 ...

  5. inotify+rsync实现实时同步部署

    1.1.架构规划 1.1.1架构规划准备 服务器系统 角色 IP Centos6.7 x86_64 NFS服务器端(NFS-server-inotify-tools) 192.168.1.14 Cen ...

  6. ​inotify+rsync实时数据同步实践讲解17

    inotify+rsync实时数据同步实践讲解17说明:本文来自来自北京老男孩linux运维实战培训中心-运维就业课程免费视频内容,本文内容为系列内容,更多分享信息见:http://oldboy.bl ...

  7. 【Linux下Inotify + Rsync文件实时同步】

    Linux下Inotify + Rsync文件实时同步 一.使用前言* 随着公司业务的发展,单web服务器不能满足用户的访问,需要增加多台web服务器实现均衡高可用性访问.为了统一各web服务器之间的 ...

  8. Cetnos环境下inotify+rsync实时同步

    一.介绍 1.1 rsync命令是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件.rsync使用所谓的"rsync算法"来使本地和远程两个主机之间的文件达到同步 ...

  9. inotify+rsync 实现实时同步

    为什么80%的码农都做不了架构师?>>>    实现实时同步(也就是源一变化,它就会触发同步) inotify+rsync   源服务器:172.16.12.167 同步服务器:17 ...

最新文章

  1. MySQL 误操作恢复表
  2. 共享内存查看清除命令ipcs和ipcrm
  3. 第七篇T语言实例开发,文本与程序的几种打开方法(版5.3)
  4. 每天一道LeetCode-----有序数组循环右移n位后,寻找最小值,数组中可能包含重复元素
  5. Android Monkey测试入门(摘)
  6. 10 非受控组件以及受控与非受控的选择方案
  7. iOS开发里面的4个层次
  8. 内网嗅探自我保护用到的批处理
  9. 华为P40系列起售价曝光!有点意想不到
  10. 【Mac brew】代理安装brew insall
  11. 微信小程序之页面跳转
  12. 你想让自己的产品像病毒一样疯传吗
  13. ReactiveCocoa 用法实例
  14. 简单概述PHP的命名空间及其在自动载入上的应用
  15. MFC | 基于文档存储的学生成绩信息管理系统
  16. x86架构应用如何向Arm架构低成本迁移
  17. 【C语言】大小写转换
  18. typhon自带base64函数
  19. [DataAnalysis]数据分析和大数据入门推荐书单
  20. 如何解决mac拔掉耗电量太大的设备以重新启用usb设备

热门文章

  1. 有哪些LSTM(Long Short Term Memory)和RNN(Recurrent)网络的教程?
  2. [caffe]深度学习之图像分类模型AlexNet解读
  3. 大话设计模式(十四 设计模式不能戏说!设计模式怎就不能戏说?)
  4. Python Argparse模块
  5. 37.Intellij IDEA解决GBK乱码
  6. React系列---React+Redux工程目录结构划分
  7. 转载 HTTPS 之fiddler抓包、jmeter请求
  8. Cloudera Manager集群官方默认的各个组件开启默认顺序(图文详解)
  9. 使用VS2015远程GDB调试
  10. android 学习随笔二十(多媒体编程 )