博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
rsync + inotify 数据实时同步
阅读量:6114 次
发布时间:2019-06-21

本文共 5369 字,大约阅读时间需要 17 分钟。

一、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/shcmd="/usr/local/inotify/bin/inotifywait"$cmd -mrq --format '%w%f' -e create,close_write,delete /data_rsync | \while read linedo    [ ! -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.passworddone

 

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

你可能感兴趣的文章
webapp返回上一页 处理
查看>>
新安装的WAMP中phpmyadmin的密码问题
查看>>
20172303 2017-2018-2 《程序设计与数据结构》第5周学习总结
查看>>
eclipse中将一个项目作为library导入另一个项目中
查看>>
Go语言学习(五)----- 数组
查看>>
Android源码学习之观察者模式应用
查看>>
Content Provider的权限
查看>>
416. Partition Equal Subset Sum
查看>>
centos7.0 64位系统安装 nginx
查看>>
数据库运维平台~自动化上线审核需求
查看>>
注解开发
查看>>
如何用 Robotframework 来编写优秀的测试用例
查看>>
Django之FBV与CBV
查看>>
Vue之项目搭建
查看>>
app内部H5测试点总结
查看>>
Docker - 创建支持SSH服务的容器镜像
查看>>
[TC13761]Mutalisk
查看>>
三级菜单
查看>>
Data Wrangling文摘:Non-tidy-data
查看>>
加解密算法、消息摘要、消息认证技术、数字签名与公钥证书
查看>>