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

1.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 #文件不存在,需要手动创建。
注意: #会出现因注释不兼容的问题而导致推数据时出现报错,配置文件需取消注释或者注释进行换行处理。

uid = root
gid = root
address = 192.168.91.132
poroat = 873
hosts allows = 192.168.91.0/24
use chroot = yes
max connections = 5
pid file =/var/run/rsync.pid
lock file  =/var/run/rsync.lock
log file =/var/log/rsyncd.log
motd file =/etc/rsyncd.motd

[wwwroot]
path =/web_bak/
comment = used for web-data root
read only = false
list = yes
auth users = rsyncuser
secrets file =/etc/rsync.passwd
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

官网
百度云链接:https://pan.baidu.com/s/1VKjmPPZTRXtAVZOVQAFWeQ
提取码:2ieo

[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(应该要翻墙,有时下载失败,所以要本地留存一份)
链接: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,来检验文件的完整性
在这里插入图片描述
此外,还会对比存档属性,时间戳等等信息。从而得知目录/文件是否被修改,需要同步!

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值