前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux下rsync+inotfy/sersync实现数据实时同步

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

作者头像
开心分享
发布2020-08-11 14:27:28
1.1K0
发布2020-08-11 14:27:28
举报

导读:本文主要讲解了如何利用 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

Linux下rsync+inotfy/sersync实现数据实时同步插图(1)
Linux下rsync+inotfy/sersync实现数据实时同步插图(1)

3.配置yum源

Linux下rsync+inotfy/sersync实现数据实时同步插图(2)
Linux下rsync+inotfy/sersync实现数据实时同步插图(2)

4.设置静态ip:192.168.91.131

Linux下rsync+inotfy/sersync实现数据实时同步插图(3)
Linux下rsync+inotfy/sersync实现数据实时同步插图(3)

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

Linux下rsync+inotfy/sersync实现数据实时同步插图(4)
Linux下rsync+inotfy/sersync实现数据实时同步插图(4)

3.创建测试数据:

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

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

Linux下rsync+inotfy/sersync实现数据实时同步插图(5)
Linux下rsync+inotfy/sersync实现数据实时同步插图(5)

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/

Linux下rsync+inotfy/sersync实现数据实时同步插图(6)
Linux下rsync+inotfy/sersync实现数据实时同步插图(6)

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

Linux下rsync+inotfy/sersync实现数据实时同步插图(7)
Linux下rsync+inotfy/sersync实现数据实时同步插图(7)

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

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

1.rsyncd.conf配置文件:

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

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

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

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

服务器:xy2

客户端:xy1

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

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

Linux下rsync+inotfy/sersync实现数据实时同步插图(8)
Linux下rsync+inotfy/sersync实现数据实时同步插图(8)

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 #查看端口

Linux下rsync+inotfy/sersync实现数据实时同步插图(9)
Linux下rsync+inotfy/sersync实现数据实时同步插图(9)

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

[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

Linux下rsync+inotfy/sersync实现数据实时同步插图(10)
Linux下rsync+inotfy/sersync实现数据实时同步插图(10)

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

Linux下rsync+inotfy/sersync实现数据实时同步插图(11)
Linux下rsync+inotfy/sersync实现数据实时同步插图(11)

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

[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!

Linux下rsync+inotfy/sersync实现数据实时同步插图(12)
Linux下rsync+inotfy/sersync实现数据实时同步插图(12)

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

方法一:

[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*

Linux下rsync+inotfy/sersync实现数据实时同步插图(13)
Linux下rsync+inotfy/sersync实现数据实时同步插图(13)

[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*

Linux下rsync+inotfy/sersync实现数据实时同步插图(14)
Linux下rsync+inotfy/sersync实现数据实时同步插图(14)

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

Linux下rsync+inotfy/sersync实现数据实时同步插图(15)
Linux下rsync+inotfy/sersync实现数据实时同步插图(15)

预编译报错的原因是没有安装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

Linux下rsync+inotfy/sersync实现数据实时同步插图(16)
Linux下rsync+inotfy/sersync实现数据实时同步插图(16)

编写脚本

[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

Linux下rsync+inotfy/sersync实现数据实时同步插图(17)
Linux下rsync+inotfy/sersync实现数据实时同步插图(17)
Linux下rsync+inotfy/sersync实现数据实时同步插图(18)
Linux下rsync+inotfy/sersync实现数据实时同步插图(18)

可以看到 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推送到目标服务器,如图所示:

Linux下rsync+inotfy/sersync实现数据实时同步插图(19)
Linux下rsync+inotfy/sersync实现数据实时同步插图(19)

(二)下载并配置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 #备份配置文件,便于二次修改

Linux下rsync+inotfy/sersync实现数据实时同步插图(20)
Linux下rsync+inotfy/sersync实现数据实时同步插图(20)

(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

Linux下rsync+inotfy/sersync实现数据实时同步插图(21)
Linux下rsync+inotfy/sersync实现数据实时同步插图(21)

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,如图 所示:

Linux下rsync+inotfy/sersync实现数据实时同步插图(22)
Linux下rsync+inotfy/sersync实现数据实时同步插图(22)

push 和 pull 示意图

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

Linux下rsync+inotfy/sersync实现数据实时同步插图(23)
Linux下rsync+inotfy/sersync实现数据实时同步插图(23)

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

5.rsync原理

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

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

Linux下rsync+inotfy/sersync实现数据实时同步插图(24)
Linux下rsync+inotfy/sersync实现数据实时同步插图(24)

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020年8月10日 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
多因子身份认证
多因子身份认证(Multi-factor Authentication Service,MFAS)的目的是建立一个多层次的防御体系,通过结合两种或三种认证因子(基于记忆的/基于持有物的/基于生物特征的认证因子)验证访问者的身份,使系统或资源更加安全。攻击者即使破解单一因子(如口令、人脸),应用的安全依然可以得到保障。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档