专栏首页开心分享-技术交流Linux下rsync+inotfy/sersync实现数据实时同步

Linux下rsync+inotfy/sersync实现数据实时同步

导读:本文主要讲解了如何利用 rsync+inotfy/sersync 实现数据实时同步的操作过程和部分原理、参数。

本次实验采用:

虚拟机:VMware-workstation-full-12.5.7-5813279;NAT模式

镜像:centos7.4:CentOS-7-x86_64-DVD-1708.iso

内核:3.10.0-693.el7.x86_64

一、新建虚拟机及准备xy1,xy2

0.规划:主机名:IP

xy1:192.168.91.131

xy2:192.168.91.132

仅列出xy1的准备配置,xy2同xy1

hostname:xy1

2.挂载镜像/dev/sr0

3.配置yum源

4.设置静态ip:192.168.91.131

5.下载vim

二、安装rsync (一).安装xinetd及rsync [root@xy1 ~]# yum install xinetd rsync -y

[root@xy2 ~]# yum install xinetd rsync -y

[root@xy2 ~]# rsync --daemon

[root@xy2 ~]# netstat -an | grep 873

(二).使用 rsync 备份数据

对 xy1 网站根目录的 /var/www/html 目录备份到 xy2 的 /web_bak 。

服务器:xy1: 192.168.91.131

客户端:xy2: 192.168.91.132

1.建立测试用户(两台主机都需要操作)

[root@xy1 ~]# useradd rget1 && echo “123456” | passwd —stdin rget1

[root@xy2 ~]# useradd rget1 && echo “123456” | passwd —stdin rget1

2.对目录赋予ACL权限:

[root@xy1 ~]# mkdir -p /var/www/html/

[root@xy1 ~]# setfacl -R -m user:rget1:rwx /var/www/html/

[root@xy1 ~]# setfacl -R -m default:rget1:rwx /var/www/html/

[root@xy1 ~]# getfacl /var/www/html

3.创建测试数据:

[root@xy1 ~]# cp -r /boot/* /var/www/html/

复制/boot/目录下所有内容到 /var/www/html/目录下

4.服务端上操作:

[root@xy2 ~]# mkdir /web_bak

[root@xy2 ~]# chown rget1:rget1 -R /web_bak/

[root@xy1 ~]# rsync -avz /var/www/html/ rget1@192.168.91.132:/web_bak/

查看xy2上/web_bak/目录是否同步数据

(三)使用非系统用户备份数据

使用非系统用户进入备份数据,依靠系统中的 rsync 配置文件 /etc/rsyncd.conf 进行备份数据,并创建备份账户,最终把 rsync 以 deamon 方式运行。

1.rsyncd.conf配置文件:

配置文件分为两部分:全局参数、模块参数。

全局参数:对rsync服务器生效,如果模块参数和全局参数冲突,冲突的地方模块参数最终生效。

模块参数:定义需要通过rsync输出的目录定义的参数。

2.用配置文件定义目录输出

服务器:xy2

客户端:xy1

[root@xy2 ~]# vim /etc/rsyncd.conf #文件不存在,需要手动创建。

注意: #会出现因注释不兼容的问题而导致推数据时出现报错,配置文件需取消注释或者注释进行换行处理。

3.创建提示文件和用户密码

[root@xy2 ~]# echo “Welcome to Backup Server” > /etc/rsyncd.motd #编辑欢迎信息文件

[root@xy2 ~]# vim /etc/rsync.passwd #创建并编写密码文件。

rsyncuser:123456 #格式为 用户名:密码。

[root@xy2 ~]# chmod 600 /etc/rsync.passwd

密码文件权限必须是700或者600,否则的话身份验证会失效。

4.启动服务(启动rsync与xinetd服务)。

[root@xy2 ~]# systemctl start xinetd #启动xinetd服务。

[root@xy2 ~]# systemctl enable xinetd #将xinetd服务加入开机项。

[root@xy2 ~]# rsync —daemon —config=/etc/rsyncd.conf #加载配置文件rsyncd.conf启动rsync服务

[root@xy2 ~]# netstat -antup | grep 873 #查看端口

*记得关防火墙或者更改规则

[root@xy2 ~]# iptables -F

[root@xy2 ~]# systemctl stop filewalld

5.测试

rsync语法: rsync 选项 目标目录 用户名@备份源服务器IP::共享模块名

[root@xy1 ~]# rsync -avz /var/www/html/ rsyncuser@192.168.91.132::wwwroot

6.密码处理

新建一个文件保存好密码,然后在rsync命令中使用–password-file指定此文件即可

[root@xy1 ~]# vim /etc/rsync.passwd #创建密码文件,其中只需要指定密码即可

123456

[root@xy1 ~]# chmod 600 /etc/rsync.passwd #赋予密码文件600权限

[root@xy1~]# rsync -avz /var/www/html/ rsyncuser@192.168.91.132::wwwroot —password-file=/etc/rsync.passwd

(四)脚本实现定时自动备份

[root@xy1 ~]# vim autobackup.sh #编写脚本。

#!/bin/bash

rsync -avz /var/www/html/ rsyncuser@192.168.91.132::wwwroot --password-file=/etc/rsync.passwd

[root@xy1 ~]# chmod +x autobackup.sh #赋予脚本执行权限。

[root@xy2 ~]# rm -rf /web-back/*

[root@xy1 ~]# ./autobackup.sh #测试脚本。Ojbk!

定义计划任务实现定时备份:

方法一:

[root@xy1 ~]# echo “01 3 * sh /root/autobackup.sh &” >> /var/spool/cron/root

方法二:

[root@xy1 ~]# crontab -e

01 3 * sh /root/autobackup.sh &

三、rsync+inotify实现数据实时同步 1.修改参数

[root@xy1 ~]# ll /proc/sys/fs/inotify/

[root@xy1 ~]# cat /proc/sys/fs/inotify/max*

[root@xy1 ~]# vim /etc/sysctl.conf

fs.inotify.max_queued_events = 32768

fs.inotify.max_user_instances = 1024

fs.inotify.max_user_watches = 90000000

[root@xy1 ~]# sysctl -p

[root@xy1 ~]# cat /proc/sys/fs/inotify/max*

2.下载:inotify-tools-3.13.tar.gz

[root@xy1 ~]# wget https://sourceforge.net/projects/inotify-tools/files/inotify-tools/3.13/inotify-tools-3.13.tar.gz

3.编译安装

[root@xy1~]# tar -zxvf inotify-tools-3.13.tar.gz

[root@xy1 ~]# cd inotify-tools-3.13

[root@xy1 inotify-tools-3.13]# ./configure

预编译报错的原因是没有安装gcc

[root@xy1 inotify-tools-3.13]# yum install gcc* -y

[root@xy1 inotify-tools-3.13]# ./configure

[root@xy1 inotify-tools-3.13]# make && make install

[root@xy1 inotify-tools-3.13]# inotifywait -h

[root@xy1inotify-tools-3.13]# inotifywait -mrq -e create, move, delete, modify /var/www/html/

再打开一个 xy1 的伪终端,对 xy1 的 /var/www/html/ 目录进行操作

查看监听xy1的第一个伪终端pts1,发现报告CREATE,ISDIR dir1,证明inotify起作用了!

4.实现实时同步数据

但是发现xy2的/web_bak/目录并没有实时同步xy1下/var/www/html/的数据,这是因为我们没有执行同步操作!

因此我们执行下面的操作:

[root@xy1 ~]# ssh-keygen

[root@xy1~]#ssh-copy-id root@192.168.91.132

[root@xy1 ~]# ssh 192.168.91.132

编写脚本

[root@xy1 ~]# vim b.sh

#!/bin/bash

inotifywait -mrq -e create,move,delete,modify /var/www/html/ | while read a b c

do

rsync -azP --delete /var/www/html/ root@192.168.91.132:/web_bak

done

[root@xy1 ~]# chmod +x b.sh

[root@xy1 ~]# ./b.sh

可以看到 xy2 的 /web_bak/ 目录与 xy1 下 /var/www/html/ 目录已经实现同步数据了!

优化脚本

[root@xy1 ~]# vim b.sh

#!/bin/bash

SRC=/var/www/html/

DST=root@192.168.91.132:/web_bak

inotifywait -mrq -e create,move,delete,modify $SRC | while read a b c

do

rsync -azP --delete $SRC $DST

done

当然我们也可以用它来实现:

rsync -avP /var/www/html/ rsyncuser@192.168.91.132::wwwroot --password-file=/etc/rsync.passwd

加入开机启动项

[root@xy1 ~]# cp b.sh /opt/inotify_rsync.sh

[root@xy1 ~]# echo ‘/opt/inotify_rsync.sh &’ >> /etc/rc.local 四、rsync+sersync 实现数据实时同步 (一)介绍及规划

一台装sersync、一台装rsync服务

sersync服务器(数据源,源机器):192.168.91.131

rsync客户端(备份端,目标机器):192.168.91.132

1.为什么要用rsync+sersync架构?

(1)sersync是基于inotify开发的,类似于inotify-tools的工具。

(2)sersync可以记录下被监听目录中发生变化的(包括增加、删除、修改)具体某一个文件或者某一个目录的名字,然后使用rsync同步的时候,只同步发生变化的文件或者目录。

2.rsync+inotify-tools与rsync+sersync架构的区别?

(1)rsync+inotify-tools

1)inotify只能记录下被监听的目录发生了变化(增,删,改)并没有把具体是哪个文件或者哪个目录发生了变化记录下来。

2)rsync在同步的时候,并不知道具体是哪个文件或目录发生了变化,每次都是对整个目录进行同步,当数据量很大时,整个目录同步非常耗时(rsync要对整个目录遍历查找对比文件),因此效率很低。

(2)rsync+sersync

1)sersync可以记录被监听目录中发生变化的(增,删,改)具体某个文件或目录的名字。

2)rsync在同步时,只同步发生变化的文件或目录(每次发生变化的数据相对整个同步目录数据来说很小,rsync在遍历查找对比文件时,速度很快),因此效率很高。

3.同步过程:

(1)在同步服务器上开启sersync服务,sersync负责监控配置路径中的文件系统事件变化。

(2)调用rsync命令把更新的文件同步到目标服务器。

(3)需要在主服务器配置sersync,在同步目标服务器配置rsync server(注意:是rsync服务)。

4.同步过程和原理:

(1)用户实时的往sersync服务器上写入更新文件数据。

(2)此时需要在同步主服务器上配置sersync服务。

(3)在另一台服务器开启rsync守护进程服务,以同步拉取来自sersync服务器上的数据。

(4)在另一台服务器开启rsync守护进程服务,使sersync push文件过来。

通过rsync的守护进程服务后可以发现,实际上sersync就是监控本地的数据写入或更新事件,然后,在调用rsync客户端的命令,将写入或更新事件对应的文件通过rsync推送到目标服务器,如图所示:

(二)下载并配置sersync 1.下载

在google code下载sersync的可执行文件版本,里面有配置文件与可执行文件

https://sersync.googlecode.com/files/sersync2.5.4_64bit_binary_stable_final.tar.gz(应该要xx,有时下载失败,所以要本地留存一份)

链接:https://pan.baidu.com/s/1FJtxwlX_L3OhnqVU8RaaVw

提取码:rg9y

2.上传到服务器 /opt 目录下。

[root@xy1 ~]# cd /opt/ #切换工作目录到/opt目录下。

[root@xy1 opt]# tar zxvf sersync2.5.4_64bit_binary_stable_final.tar.gz

[root@xy1 opt]# mv GNU-Linux-x86 sersync #解压后的文件重命名为 sersync

3.配置 sersync

[root@xy1 opt]# cd sersync #切换工作目录至sersync目录下。

[root@xy1 sersync]# cp confxml.xml confxml.xml.bak #备份配置文件,便于二次修改

(1)更改优化sersync配置文件:

[root@xy1 sersync]# vim confxml.xml #修改配置文件中的24–28行,如下所示。

<sersync>

<localpath watch="/var/www/html"> #本地同步数据目录。

<remote ip="192.168.91.132" name="wwwroot"/> #rsync模块名称

(2)修改31–34行,认证部分(rsync密码认证)

<rsync>

<commonParams params="-artuz"/>

<auth start="true" users="rsyncuser" passwordfile="/etc/rsync.passwd"/>

<userDefinedPort start="false" port="874"/><!-- port=874 -->

<timeout start="false" time="100"/><!-- timeout=100 -->

<ssh start="false"/>

(3)开启sersync守护进程同步数据。

[root@xy1 sersync]# /opt/sersync/sersync2 -d -r -o /opt/sersync/confxml.xml

4.测试

(1)在xy1 /var/www/html/ 目录 增加、删除、或改目录文件。

(2)看xy2 /web-back 目录的变化

[root@xy2 web-back]# watch ls -l

可以发现xy2的/web_bak/目录与xy1下/var/www/html/目录的数据是实时同步的!大功告成!!!

五、总结 (一)RSYNC概述

Rsync是Linux系统下的数据镜像备份工具,使用快速增量备份工具Remote Sync可以远程同步,可以在不同主机之间进行同步,可实现全量备份与增量备份,保持链接和权限,且采用优化的同步算法,传输前执行压缩,因此非常适合用于架构集中式备份或异地备份等应用。同时Rsync支持本地复制,或者与其他SSH、rsync主机同步。

官方网站:https://rsync.samba.org/

(二)RSYNC数据备份

cp,scp,ftp等命令在拷贝文件时,会先统计文件信息,如大小等,然后再进行拷贝。这样的话在数据量较大时,统计信息可能占用较长时间,类似Windows的复制。

而rsync是边复制,边统计,边比较。

(三)Rysnc 特性和优点

(1)可以镜像保存整个目录树和文件系统。

(2)可以很容易做到保持原来文件的权限、时间、软硬链接等等。

(3)无须特殊权限即可安装。

(4)快速:第一次同步时 rsync 复制全部内容,但在下一次只传输修改过的文件。

(5)压缩传输:rsync 在传输数据的过程中可以实行压缩及解压缩操作,因此可以使用更少的带宽。

(6)安全:可以使用scp、ssh等方式来传输文件。

(7)支持匿名传输,以方便进行网站镜象。

(8)选择性保持:符号连接,硬链接,文件属性,权限,时间等。

快速性:

第一次同步时 rsync 会将指定目录下全部内容复制同步,但在下一次只传输修改过的内容。

安全性:

可以使用scp、ssh等方式来传输文件,当然也可以通过直接的socket连接。

选择性保持:符号连接,硬链接,文件属性,权限,时间等。

压缩传输:

rsync 在传输数据的过程中可以实行压缩及解压缩操作,因此可以使用更少的带宽。

(四)常见备份分类

(1) 完整备份:每次备份都是从备份源将所有的文件或目录备份到目的地。

(2) 差量备份:备份上次完全备份以后有变化的数据(他针对的上次的完全备份,他备份过程中不清除存档属性)。

(3) 增量备份:备份上次备份以后有变化的数据(他才不管是那种类型的备份,有变化的数据就备份,他会清除存档属性)

(五)RSYNC原理 1.运行模式和端口:

(1)采用C/S模式(客户端/服务器模式)[ 实际上是一个点到点的传输,直接使用rsync命令即可完成 ]

(2)rsync监听的端口:873

2.四个名词的解释:

发起端:负责发起rsync同步操作的客户机叫做发起端,通知服务器我要备份你的数据。

备份源:负责响应来自客户机rsync同步操作的服务器叫做备份源,需要备份的服务器。

服务端:运行rsyncd服务,一般来说,需要备份的服务器。

客户端:存放备份数据。

3.数据同步方式:

推push:一台主机负责把数据传送给其他主机,服务器开销很大,比较适合后端服务器少的情况。

拉pull:所有主机定时去找一台主机拉数据,可能就会导致数据缓慢。

推:目的主机配置为rsync服务器,源主机周期性的使用rsync命令把要同步的目录推过去(需要备份的机器是客户端,存储备份的机器是服务端)。

拉:源主机配置为rsync服务器,目的主机周期性的使用rsync命令把要同步的目录拉过来(需要备份的机器是服务端,存储备份的机器是客户端)。

两种方案,rsync都有对应的命令来实现。

rsync命令示例说明push和pull,如图 所示:

push 和 pull 示意图

4.xinetd 管理 Rsync 工作原理,如图所示:

使用rsync来同步是先通过xinetd监听873号端口,如果rsync进来的是873号端口,那么xinetd就会通知它所管辖的rsync服务来做回应,接下来就是rsync俩服务于之间的通讯。

5.rsync原理

rsync 是怎样知道文件是否需要备份,或者说是怎样知道目录或者文件被修改过的呢?

利用 md5sum,来检验文件的完整性

此外,还会对比存档属性,时间戳等等信息。从而得知目录/文件是否被修改,需要同步!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • CentOS7下Rsync+sersync实现数据实时同步

    1、sersync是基于Inotify开发的,类似于Inotify-tools的工具

    拓荒者
  • [经验分享] CentOS7+rsync+sersync实现数据实时同步

    2.rsync配置(千万注意:本人亲自入坑,下面的配置信息,请在添加到配置文件中后千万记得删除掉后面#部分的备注信息,否则同步过程会失败,不知原因,删除后...

    拓荒者
  • CentOS7+rsync+sersync实现数据实时同步

    一、为什么要用Rsync+sersync架构? 1、sersync是基于Inotify开发的,类似于Inotify-tools的工具 2、sersync...

    拓荒者
  • Linux下sersync数据实时同步

    sersync其实是利用inotify和rsync两种软件技术来实现数据实时同步功能的,inotify是用于监听sersync所在服务器上的文件变化,结合rsy...

    砸漏
  • Linux系统sersync数据实时同步

    前面介绍了以守护进程的方式传输或同步数据rsync软件,linux系统数据同步软件很多,今天来介绍下sersync数据同步软件

    民工哥
  • rsync + sersync 数据同步 -- CentOS 8

    rsync 是 linux 系统下的数据镜像备份工具。使用快速增量备份工具 Remote Sync 可以远程同步,支持本地复制,或者与其他 SSH、rsyn...

    Kevin song
  • Rsync+Sersync实时同步文件

    分别登录到sersync01、sersync02查看/tmp/hbgslz/目录下面是否存在1.txt文件

    剧终
  • linux实现实时同步服务

    其实这里只需要安装inotify-tools软件即可,因为后面的sersync服务会启用inotify软件。那这里就只把命令写出来

    用户1685462
  • centos7系统安装sersync+rsync实现服务器同步功能

    1、sersync是基于inotify开发的,类似于inotify-tools的工具。

    拓荒者
  • sersync实现数据实时同步

    1.1 第一个里程碑:安装sersync软件 1.1.1 将软件上传到服务器当中并解压 1、上传软件到服务器上 rz -E 为了便于管理上传位置统一设置为 /s...

    惨绿少年
  • 连仕彤博客利用rsync+sersync实现数据实时同步

    行 者
  • rsync+sersync数据同步

    Author: Andrew Tridgell, Wayne Davison, and others

    胡齐
  • NFS高可用(NFS+keepalive+Sersync)

    NFS这样古老的共享存储的技术,被众多小公司和没钱的公司采用,现在就我司就需要出一套客户的离线版本方案,客户们想数据安全却又不想花钱,所以我就采用了NFS做后端...

    张琳兮
  • NFS高可用(NFS+keepalive+Sersync)

    NFS这样古老的共享存储的技术,被众多小公司和没钱的公司采用,现在就我司就需要出一套客户的离线版本方案,客户们想数据安全却又不想花钱,所以我就采用了NFS做后端...

    张琳兮
  • 系统运维|sersync:基于 rsync + inotify 实现数据实时同步

    前言提到数据同步就必然会谈到rsync,一般简单的服务器数据传输会使用ftp/sftp等方式,但是这样的方式效率不高,不支持差异化增量同步也不支持实时传输。针对...

    用户8710643
  • Linux 服务器集群下同步目录文件 - rsync

    简介: remote synchronize是一个远程数据同步工具,可通过 LAN/WAN 快速同步多台主机之间的文件。也可以使用 rsync 同步本地硬盘中...

    Parker
  • Linux inotify实时备份实现方法详解

    实时复制是企业数据备份最重要的方式,主要用于用户提交的数据的备份,对于用户提交到服务器上的普通文件(图片、压缩包、视频、文档等),可采用 inotify/ser...

    砸漏
  • Linux系统集群架构线上项目配置实战 五(完结篇)

    今天介绍项目后期的全网数据备份规划与配置过程,整个过程包括备份规划、脚本编写、数据同步等

    民工哥
  • web+nfs+rsync实时备份

    1)在NFS服务端nfs01上共享/data目录,允许从NFS客户端web01、web02上分别挂载共享目录。

    张琳兮

扫码关注云+社区

领取腾讯云代金券