inotify和rsync实现实时同步

走远了吗. 提交于 2019-12-28 15:26:04

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

inotify和rsync实现实时同步

inotify 相关解释

  • 查看服务器内核是否支持inotify
    • grep -i inotify /boot/config-3.10.0-1062.el7.x86_64
  • inotify内核参数
    • cat /proc/sys/fs/inotify/max_queued_events  //inotify事件队列最大长度默认为 16384
    • cat /proc/sys/fs/inotify/max_user_watches  //可以监视的文件数量 默认为8192
    • cat /proc/sys/fs/inotify/max_user_instances  //每个用户创建 inotify 实例最大值 默认为 128
  • 安装:基于epel源
    • yum install inotify-tools
  • inotify-tools包主要文件:
    • inotifywait: 在被监控的文件或目录上等待特定文件系统事件(open closedelete等)发生,常用于实时同步的目录监控
    • inotifywatch:收集被监控的文件系统使用的统计数据,指文件系统事件发生的次数统计
  • inotifywait 命令常见选项
    • -m,--monitor 始终保持事件监听
    • -d,--daemon 以守护进程方式执行,和-m相似,配合-o使用
    • -r,--recursive 递归监控目录数据信息变化
    • -q,--quiet 输出少量事件信息
    • --exclude 指定排除文件或目录,使用扩展的正则表达式匹配的模式实现
    • --excludei 和exclude相似,不区分大小写
    • -o,--outfile 打印事件到文件中,相当于标准正确输出
    • -s,--syslogOutput 发送错误到syslog相当于标准错误输出
    • --timefmt 指定时间输出格式
    • --format 指定的输出格式,即实际监控输出内容
    • -e 指定监听指定的事件,如果省略,表示所有事件都进行监听
  • --timefmt 时间格式,参考 man 3 strftime
    • %Y 年份信息,包含世纪信息
    • %y 年份信息,不包括世纪信息
    • %m 显示月份,范围 01 - 12
    • %d 每月的第几天,范围是01 - 31
    • %H 小时信息,使用 24 小时制,范围 00 - 23
    • %M 分钟,范围 00 - 59
  • --format 格式定义
    • %T 输出时间格式中定义的时间格式信息,通过 --timefmt option 语法格式指定时间信息
    • %w 事件出现时,监控文件或目录的名称信息
    • %f 事件出现时,将显示监控目录下触发事件的文件或目录信息,否则为空
    • %e 显示发生的事件信息,不同的事件默认用逗号分隔
    • %Xe 显示发生的事件信息,不同的事件指定用X进行分隔
  • -e 选项指定的事件类型
    • create 文件或目录创建
    • delete 文件或目录被删除
    • modify 文件或目录内容被写入
    • attrib 文件或目录属性改变
    • close_write 文件或目录关闭,在写入模式打开之后关闭的
    • close_nowrite  文件或目录关闭,在只读模式打开之后关闭的
    •  close  文件或目录关闭,不管读或是写模式
    •  open  文件或目录被打开
    •  moved_to 文件或目录被移动到监控的目录中
    •  moved_from  文件或目录从监控的目录中被移动
    •  move  文件或目录不管移动到或是移出监控目录都触发事件
    •  access  文件或目录内容被读取
    •  delete_self 文件或目录被删除,目录本身被删除
    •  unmount 取消挂载
  • 持续后台监控特定事件
    • inotifywait -mrq /data --timefmt “%F %H:%M” --format “%T %w%f event: %;e” -e create,delete,moved_to,close_write,attrib

rsync 相关解释

  • 配置 文件 /etc/rsyncd.conf
    • vi /etc/rsyncd.conf
      uid = root
      gid = root
      use chroot = no
      max connections = 0
      ignore errors
      exclude = lost+found/
      log file = /var/log/rsyncd.log
      pid file = /var/run/rsyncd.pid
      lock file = /var/run/rsyncd.lock
      reverse lookup = no
      hosts allow = 192.168.8.0/24
      [backup]
      path = /backup/
      comment = backup
      read only = no
      auth users = rsyncuser
      secrets file = /etc/rsync.pass
  •  服务器端生成验证文件
    • echo "rsyncuser:XXXXXX" > /etc/rsync.pass
      chmod 600 /etc/rsync.pass
  •  服务器端准备目录
    • mkdir /backup
  •  服务器端启动rsync服务
    • rsync --daemon 可加入/etc/rc.d/rc.local实现开机启动
      systemctl start rsyncd CentOS 7
  •  客户端配置密码文件
    • echo "XXXXXX" > /etc/rsync.pass
      chmod 600 /etc/rsync.pass
  •  客户端测试同步数据
    • rsync -avz --password-file=/etc/rsync.pass /data/ rsyncuser@rsync服务器IP::backup

inotify和rsync实现实时同步

  • 客户端创建inotify_rsync.sh脚本
    • #!/bin/bash
      SRC='/data/'
      DEST='rsyncuser@rsync服务器IP::backup'
      inotifywait -mrq --timefmt '%Y-%m-%d %H:%M' --format '%T %w %f' -
      e create,delete,moved_to,close_write,attrib ${SRC} |while read DATE
      TIME DIR FILE;do
      FILEPATH=${DIR}${FILE}
      rsync -az --delete --password-file=/etc/rsync.pass $SRC $DEST &&
      echo "At ${TIME} on ${DATE}, file $FILEPATH was backuped up via rsync"
      >> /var/log/changelist.log
      done

直观图

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!