当前位置: 首页 > news >正文

rsync + inotify 数据实时同步

一、rsync介绍

  rsync英文全称为Remote synchronization,从软件的名称就可以看出来,Rsync具有可是本地和远程两台主机之间的数据快速复制同步镜像、远程备份的功能,这个功能类似ssh带的scp命令,但又优先于scp命令的功能,scp每次都是全量拷贝,而rsync可以增量拷贝。当然,Rsync还可以在本地主机的不同分区或目录之间全量及增量的复制数据,这又类似cp命令,但同样也优先于cp命令,cp每次都是全量拷贝,而rsync可以增量拷贝。利用rsync还可以实现删除文件和目录的功能,这又相当于rm命令。


  一个rsync相当于scp(远程拷贝),cp(本地拷贝),rm(本地删除),但是还优先于这些命令。Rsync还可以是一个网络服务(端口port、socket服务)
在同步备份数据时,默认情况下,rsync通过其独特的“quick check”算法,它仅同步大小或者最后修改时间发生变化的文件或目录,当然也可根据权限,属主等属性的变化同步,但需要制定相应的参数,甚至可以实现只同步一个文件里有变化的内容部分,所以,可以实现快速的同步备份数据。

二、rsync应用场景

2.1 两台服务器之间数据同步cron+rsync、rsync+inotify(实时备份)

2.2 把所有客户服务器数据同步到备份服务器(定时备份)

三、rsync的安装、配置、启动

3.1 rsync服务端的配置

 [root@192-168-7-77 ~]# cat /etc/redhat-release        #当前主机作为rsync服务端
  CentOS Linux release 7.5.1804 (Core) 
 [root@192-168-7-77 ~]# yum install rsync -y
 [root@192-168-7-77 ~]# rpm -qa | grep rsync
  rsync-3.1.2-4.el7.x86_64

 [root@192-168-7-77 ~]# vim /etc/rsyncd.conf 
  uid = rsync
  gid = rsync
  use chroot = no
  max connections = 1000
  strict modes = yes
  pid file = /var/run/rsyncd.pid
  lock file = /var/run/rsync.lock
  log file = /var/log/rsyncd.log

  [data]
  uid = rsync
  gid = rsync
  path = /data_rsync/
  comment = rsync data
  ignore errors
  read only = no
  write only = no
  hosts allow = 192.168.7.0/24
  hosts deny = *
  list = false
  auth users = rsync_file
  secrets file = /etc/rsync.password
[root@
192-168-7-77 ~]# useradd rsync -s /sbin/nologin -M [root@192-168-7-77 ~]# mkdir /data_rsync [root@192-168-7-77 ~]# chown rsync.rsync /data_rsync/ [root@192-168-7-77 ~]# echo 'rsync_file:lzfnlzfn' >/etc/rsync.password [root@192-168-7-77 ~]# chmod 600 /etc/rsync.password [root@192-168-7-77 ~]# rsync --daemon [root@192-168-7-77 ~]# echo '/usr/bin/rsync --daemon' >>/etc/rc.local [root@192-168-7-77 ~]# chmod +x /etc/rc.d/rc.local

#以下方法用于停止rsync服务
 [root@192-168-7-77 ~]# killall rsync
 [root@192-168-7-77 ~]# kill –HUP `cat /var/run/rsyncd.pid`
 [root@192-168-7-77 ~]# kill –USR2 `cat /var/run/rsyncd.pid`

3.2 rsync客户端的配置

 [root@linux-node1 ~]# echo 'lzfnlzfn' /etc/rsync.password 
 [root@linux-node1 ~]# chmod 600 /etc/rsync.password
 [root@linux-node1 ~]# rsync -avz ./data/ rsync_file@192.168.7.77::data --password-file=/etc/rsync.password        #由客户端向服务端推送数据的时候注意客户端文件夹的权限是否为rsync
 [root@linux-node1 ~]# rsync -avz rsync_file@192.168.7.77::data /data_rsync/ --password-file=/etc/rsync.password   #由服务端向客户端拉取数据
[root@linux-node1 ~]# rsync --timeout=30 -auq --bwlimit=4096 --include=mysql-bin* --exclude=*  rsync_file@192.168.7.77::data /data_rsync/ --password-file=/etc/rsync.password

3.3 关于auth认证排错思路

  1. 确认密码输入是否正确
  2. server端的secrets file内容格式为 rsync_file:lzfnlzfn,冒号前面为虚拟用户名,后面为认证密码
  3. client端的secrets file内容直接为密码lzfnlzfn
  4. 配置文件/etc/rsyncd.conf中的auth users和secrets file名称是否写错
  5. secrets file文件权限必须为600
  6. secrets file文件必须拥有运行rsync --daemon用户的权限(假如root执行rsync --daemon 就必须执行chown root.root /etc/rsync.password命令修改所有者)

四、inotify的安装、配置、启动

4.1 inotify介绍

  rsync远程同步工具,通过rsync可以实现对远程服务器数据的增量备份同步,但rsync自身也有瓶颈,同步数据时,rsync采用核心算法对远程服务器的目录文件进行比对,只进行差异同步。如果服务器的文件数量达到百万甚至千万量级,那么文件比对将是非常耗时的,而且发生变化的往往是期中很少的一部分,这是非常低效的方式。inotify的出现,可以缓解rsync不足之处,取长补短。
  Inotify实际是一种事件驱动机制,它为应用程序监控文件系统时间提供了实时相应事件的机制,而无须通过诸如cron等的轮询机制来获取时间。Cron等机制步进无法做到实时性,而且消耗大量系统资源。相比之下inotify基于事件驱动,可以做到对事件处理的实时响应,也没有轮询造成的系统资源消耗,是非常自然的事件通知接口,也与自然世界的事件机制相符合。

 

4.2 inotify的安装使用

 注:inotify软件需要在rsync的Client端使用

 登录网站https://sourceforge.net/projects/inotify-tools/下载inotify软件,以下为安装方法:
[root@linux
-node1 ~]# tar xf inotify-tools-3.14.tar.gz [root@linux-node1 ~]# cd inotify-tools-3.14/ [root@linux-node1 ~/inotify-tools-3.14]# ./configure --prefix=/usr/local/inotify-tools-3.14 [root@linux-node1 ~/inotify-tools-3.14]# make && make install [root@linux-node1 ~/inotify-tools-3.14]# cd .. [root@linux-node1 ~]# ln -s /usr/local/inotify-tools-3.14/ /usr/local/inotify [root@linux-node1 ~]# ll /usr/local/inotify/ total 0 drwxr-xr-x 2 root root 43 Dec 7 19:48 bin drwxr-xr-x 3 root root 25 Dec 7 19:48 include drwxr-xr-x 2 root root 138 Dec 7 19:48 lib drwxr-xr-x 4 root root 26 Dec 7 19:48 share [root@linux-node1 ~]# cat /proc/sys/fs/inotify/max_queued_events #设置inotifywait或inotifywatch命令可监视的文件数量(单时程) 16384 [root@linux-node1 ~]# cat /proc/sys/fs/inotify/max_user_instances #设置每个用户可以运行的inotifywait或inotifywatch命令的进程数 128 [root@linux-node1 ~]# cat /proc/sys/fs/inotify/max_user_watches #设置inotify实例事件(event)队列可容纳的事件数量 8192 [root@linux-node1 ~]# /usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e create /data_rsync/ #监听对/data_rsync/目录的创建文件操作 [root@linux-node1 ~]# /usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e delete /data_rsync/ #监听对/data_rsync/目录的删除文件操作 [root@linux-node1 ~]# /usr/local/inotify/bin/inotifywait -mrq --format '%w%f' -e create,close_write,delete /data_rsync/ #监听对/data_rsync/目录的创建、修改、删除

4.3 rsync+inotify的处理脚本

从客户端linux-node1的/data_rsync/目录作为备份目录,向192.168.7.77的rsync服务端同步数据。

[root@linux-node1 ~]# cat /home/scripts/inotify.sh #!/bin/sh cmd="/usr/local/inotify/bin/inotifywait" $cmd -mrq --format '%w%f' -e create,close_write,delete /data_rsync | \ while read line do [ ! -e "$line" ] && cd /data_rsync/ && \ rsync -az --delete /data_rsync/ rsync_file@192.168.7.77::data --password-file=/etc/rsync.password && continue rsync -az --delete $line rsync_file@192.168.7.77::data --password-file=/etc/rsync.password done

 

转载于:https://www.cnblogs.com/cyleon/p/10084257.html

相关文章:

  • JQuery each循环跳出和结束
  • 从paxos到zookeeper 分布式一致性原理与实践
  • 「CH2101」可达性统计 解题报告
  • java websocket学习
  • 1600802047 android 第三次作业(音乐播放器)
  • bzoj 2555 SubString——后缀自动机+LCT
  • BZOJ3238 [Ahoi2013]差异
  • 使用Java代码自定义Ribbon配置
  • CephFS 文件系统应用
  • 第二冲刺阶段第十三天
  • 近似推断---期望传播
  • 联合国儿童基金会投资六家区块链初创企业,目标是解决“全球性挑战”
  • MaxCompute新功能发布
  • 127.0.0.1 和 0.0.0.0 地址的区别
  • k8s环境部署及使用方式
  • 【刷算法】求1+2+3+...+n
  • 2019.2.20 c++ 知识梳理
  • AWS实战 - 利用IAM对S3做访问控制
  • C学习-枚举(九)
  • Protobuf3语言指南
  • Shell编程
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • 闭包--闭包作用之保存(一)
  • 记录一下第一次使用npm
  • 解析带emoji和链接的聊天系统消息
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 聊聊hikari连接池的leakDetectionThreshold
  • 物联网链路协议
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • 阿里云服务器购买完整流程
  • 通过调用文摘列表API获取文摘
  • ​2021半年盘点,不想你错过的重磅新书
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • ​学习一下,什么是预包装食品?​
  • # C++之functional库用法整理
  • #define,static,const,三种常量的区别
  • (C#)获取字符编码的类
  • (MonoGame从入门到放弃-1) MonoGame环境搭建
  • (九)One-Wire总线-DS18B20
  • (推荐)叮当——中文语音对话机器人
  • (一)u-boot-nand.bin的下载
  • (转)拼包函数及网络封包的异常处理(含代码)
  • (转)平衡树
  • (转)树状数组
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • .bat批处理(十一):替换字符串中包含百分号%的子串
  • .NET MVC之AOP
  • .net 托管代码与非托管代码
  • .NET 药厂业务系统 CPU爆高分析
  • .NET 中 GetHashCode 的哈希值有多大概率会相同(哈希碰撞)
  • .NET 中各种混淆(Obfuscation)的含义、原理、实际效果和不同级别的差异(使用 SmartAssembly)
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)...
  • @Documented注解的作用
  • [APIO2015]巴厘岛的雕塑
  • [ASP]青辰网络考试管理系统NES X3.5