Rsync多种传输方式实现远程同步,增量备份全流程讲解及示例

目录

一、rsync讲解

1.1.关于rsync:

[1.2.Rsync 特性:](#1.2.Rsync 特性:)

1.3.Rsync的工作方式:

二、配置rsync源服务器

2.1.基本思路:

2.2.配置文件rsyncd.conf:

1、默认文件内容

2、常见的配置项

2.3.启用rsync服务:

三、使用rsync工具

3.1.rsync命令的用法:

3.2.同步源服务器表示方法:

3.3.rsync同步操作:

3.4.免交互处理:

四、配置inotify实时同步

4.1.配置inotify实时同步:

4.2.inotifywait命令应用:

4.3.过inotifywait触发rsync同步操作:


一、rsync讲解

1.1.关于rsync:

rsync(Remote Sync,远程同步)是一款可以实现快速增量备份的工具。配合任务计划,rsync能实现定时或间隔同步,配合inotify,可以实现触发式的实时同步。

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

1.2.Rsync 特性:

1)支持拷贝特殊文件如链接文件,设备等。

2)可以有排除指定文件或目录同步的功能,相当于打包命令tar的排除功能。

3)可以做到保持源文件或目录的权限,时间,软硬链接,属主,组等属性均不改变 -p.

4)可以实现增量同步,即只同步发生变化的数据,因此数据传输的效率很高,tar -N.

5)可以使用rcp,rsh,ssh,等方式来配合传输文件(rsync本身不对数据加密)

6)可以通过soket(进程方式)传输文件和数据(服务端和客户端)*

7)支持匿名的或认证的(无需系统用户)的进程模式传输,可实现方便安全的进程数据备份及镜像。

1.3.Rsync的工作方式:

大致使用三种主要的传输数据的方式。

1)单个主机本地之间的数据传输(此时类似于cp命令的功能)

2)借助rcp,ssh等通道来传输数据(此时类似于scp命令的功能)

3)以守护进程(socket)的方式传输数据(这个是rsync自身的重要功能)

二、配置rsync源服务器

指备份操作的远程服务器,也称为备份源

2.1.基本思路:

  1. 安装rsycn建立配置文件rsyncd.conf(默认无配置文件需要手动创建)

  2. 建立独立的账号文件,用于登入源服务器并同步

  3. 启动rsync的 --daemon模式(后台监听模式)

实例环境:

需要同步备份的目录为 /var/www/html/

用户backuper,允许下行同步

服务器基本环境

操作系统:CentOS Linux release 7.5.1804 (Core)

rsync版本:rsync-3.1.2-4.el7.x86_64

IP地址:192.168.65.128

客户机基本环境

操作系统:CentOS Linux release 7.5.1804 (Core)

rsync版本:rsync-3.1.2-4.el7.x86_64

IP地址:192.168.65.129

rsyncd安装

系统默认已经安装rsync如果没有安装可通过rpm或yum方式安装

yum install rsync

2.2.配置文件rsyncd.conf:

rsync默认配置文件为/etc/rsyncd.conf,部分系统该文件不存要需要手动创建,语法类似于Samba配置。配置文件需要定义一个全局配置和多个rsync共享配置。

获取配置文件帮助的方式

man rsyncd.conf

配置文件详解

1、默认文件内容

在上述示例配置文件中,先定义了一些全局选项,然后定义了**[ftp]** ,这个用中括号包围的**"[ftp]"** 就是rsync中所谓的模块,ftp 为模块ID ,必须保证唯一,每个模块中必须定义一项**"path"**,path定义的是该模块代表的路径

2、常见的配置项

vim /etc/rsyncd.conf

port=873 # 指定rsync端口。默认873

uid = nobody # rsync服务的运行用户,默认是nobody,文件传输成功后属主将是这个uid

gid = nobody # rsync服务的运行组,默认是nobody,文件传输成功后属组将是这个gid

use chroot = no # rsync daemon在传输前是否切换到指定的path目录下,并锁定在该目录下

max connections = 200 # 指定最大连接数量,0表示没有限制

timeout = 300 # 链接超时时间,0表示永远不会超时

pid file = /var/run/rsyncd.pid # 指定rsync daemon的pid文件

lock file = /var/run/rsync.lock # 指定锁文件

log file = /var/log/rsyncd.log # 指定rsync的日志文件,而不把日志发送给syslog

dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2 # 指定哪些文件不用进行压缩传输

###########下面指定模块,并设定模块配置参数,可以创建多个模块###########

webdoc\] # 模块ID path = /var/www/html/ # 指定该模块的路径,该参数必须指定。启动rsync服务前该目录必须存在。rsync请求访问模块本质就是访问该路径。 ignore errors # 忽略一些IO错误信息 read only = false # 指定该模块是否可读写,即能否上传文件,false表示可读写,true表示可读不可写。所有模块默认不可上传 write only = false # 指定该模式是否支持下载,设置为true表示客户端不能下载。所有模块默认可下载 hosts allow = 10.0.0.0/24 # 指定允许连接到该模块的机器,多个ip用空格隔开或者设置区间 hosts deny = 0.0.0.0/32 # 指定不允许连接到该模块的机器 auth users = backuper # 指定连接到该模块的用户列表,只有列表里的用户才能连接到模块,用户名和对应密码保存在secrts file中,这里使用的不是系统用户,而是虚拟用户。不设置时,默认所有用户都能连接,但使用的是匿名连接 secrets file = /etc/rsyncd.passwd # 保存auth users用户列表的用户名和密码,每行包含一个username:passwd。 **deny \| allow 规则说明:** 1、二者都不出现时,默认为允许访问; 2、只出现hosts allow: 定义白名单;但没有被匹配到的主机由默认规则处理,即为允许; 3、只出现hosts deny: 定义黑名单;出现在名单中的都被拒绝; 4、二者同时出现:先检查hosts allow,如果匹配就allow,否则,检查hosts deny,如果匹配则拒绝;如二者均无匹配,则由默认规则处理,即为允许; **auth users、secrets file说明:** 认证配置auth users、secrets file,不加则为匿名 **rsync账号文件** 采用"用户名:密码"的记录格式 独立的账号数据,不依赖于系统账号 **创建账号文件** 注意:配置文件里定义的密码文件的名字必须和创建的账号文件保持一致 # vim /etc/rsyncd_users.db ![](https://i-blog.csdnimg.cn/direct/9a3846e62e7f4c0bb51aefd19d3bdf4c.png) ![](https://i-blog.csdnimg.cn/direct/8d67151abbb64f7c8e61af22d1d8bedd.png) **本实例配置文件:** # vim /etc/rsyncd.conf port 873 uid = nobody gid = nobody use chroot = yes log file = /var/log/rsyncd.log pid file = /var/run/rsyncd.pid hosts allow = 192.168.4.0/24 \[wwwroot

path = /var/www/html

comment = Document Root of www1.lancy.com

read only = yes

dont compress = *.gz *.bz2 *.tgz *.zip *.rar *.z

auth users = backuper

secrets file = /etc/rsyncd_users.db

2.3.启用rsync服务:

rsync运行时通过--daemon选项独自提供服务,rsync daemon是事先在server端上运行rsync后台进程,它监听套接字等待client端的连接,连接建立后所有通信方式都是通过套接字完成的。

#启动

rsync --daemon

#查看

ps aux | grep rsync

netstat -anpt | grep rsync

#关闭

pkill -9 rsync

kill $(cat /var/run/rsyncd.pid)

#如果是CentOS 7,则自带启动脚本。

systemctl start rsyncd

三、使用rsync工具

3.1.rsync命令的用法:

基本格式:

rsync [选项] 原始位置 目标位置

常用选项:

-a: 归档模式,递归并保留对象属性,等同于 -rlptgoD

-r: 递归模式,包含目录及子目录中所有文件

-l: 对于符号链接文件仍然复制为符号链接文件

-p: 保留文件的权限标记

-t: 保留文件的时间标记

-g: 保留文件的属组标记(仅超级用户使用)

-o: 保留文件的属主标记(仅超级用户使用)

-D: 保留设备文件及其他特殊文件

-v: 显示同步过程的详细(verbose)信息

-z: 在传输文件时进行压缩(compress)

-H: 保留硬连接文件

--delete: 删除目标位置有而原始位置没有的文件

--checksum: 根据对象的校验和来决定是否跳过文件

3.2.同步源服务器表示方法:

用户名@主机地址::共享模块名

rsync://用户名@主机地址/共享模块名

共享模块名是指配置文件中的模块ID

例:

backuper@192.168.65.128::wwwroot

rsync://backuper@192.168.65.128/wwwroot

3.3.rsync同步操作:

下行同步:(接取)

#客户机上操作

mkdir /myweb

rsync -avz backuper@192.168.65.128::wwwroot /myweb

rsync -avz rsync://backuper@192.168.65.128/wwwroot /myweb

--delete 参数:如果目标目录里的数据比源目标多,那么需要删除无用的相关的数据

rsync -avz --delete backuper@192.168.4.200::wwwroot /myweb

上行同步:(推送)

#客户机上操作

rsync -avz /myweb/ backuper@192.168.65.128::wwwroot

rsync -avz /myweb/ rsync://backuper@192.168.65.128/wwwroot

rsync -avz --delete /myweb/ backuper@192.168.4.200::wwwroot

3.4.免交互处理:

使用选顶 --password-file= 密码文件

操作实例:

1、创建密码文件

2、下行同步

rsync -avz --password-file=/etc/server.pass

rsync -avz --password-file=/etc/server.pass

3、上行同步

rsync -rvz --password-file=/etc/server.pass /myweb/

rsync -rvz --password-file=/etc/server.pass /myweb/

4、结合计划任务自动完成

crontab -e

systemctl restart crond

四、配置inotify实时同步

计划任务执行同步命令

执行备份的时间固定,延迟明显、实时性差

当同步源长期不变化时,密集的定期任务是不必要的

实时同步的优点

一旦同步源出现变化,立即启动备份

只要同步源无变化,则不执行备份

4.1.配置inotify实时同步:

inotify 是一个 Linux 内核特性由inotify-tools包提供,它监控文件系统,并且及时向专门的应用程序发出相关的事件警告,比如删除、读、写和卸载操作等。

安装inotify-tools

yum -y install inotify-tools

三个优化配置文件

ll /proc/sys/fs/inotify/

max_queued_events文件:设置inotify实例事件(event)队列可容纳的事件数量。

max_user_instances文件:设置每个用户可运行的inotifywait或inotifywatch命令的进程数。

max_user_watches文件:设置inotifywait或inotifywatch命令可以监视的文件数量(单进程).

inotify-tools工具的两个命令。

rpm -ql inotify-tools | grep bin/

inotifywait命令用于等待文件发生变化,可以实现监控(watch)的功能,该命令是inotify的核心命令。

inotifywatch用于收集文件系统的统计数据,例如发生了多少次inotify事件,某文件被访问了多少次等等,一般用不上。

4.2.inotifywait命令应用:

inotifywait命令的选项:

-m: 表示始终监控,否则应该是监控到了一次就退出监控了

-r: 递归监控,监控目录中的任何文件,包括子目录。递归监控可能会超出max_user_watches的值,需要适当调整该值

-q: --quiet的意思,静默监控,简化输出信息

-e: 指定监控的事件。一般监控的就delete、create、attrib、modify、close_write

--exclude : 通过模式匹配来指定不被监控的文件,区分大小写

--excludei : 通过模式匹配来指定不被监控的文件,不区分大小写

--timefmt: 监控到事件触发后,输出的时间格式,可指定可不指定该选项,一般设置为[--timefmt '%Y/%m/%d %H:%M:%S']

--format: 用户自定义的输出格式,如[--format '%w%f %e%T']

%w: 产生事件的监控路径,不一定就是发生事件的具体文件,例如递归监控一个目录,该目录下的某文件产生事件,将输出该目录而非其内具体的文件

%f: 如果监控的是一个目录,则输出产生事件的具体文件名。其他所有情况都输出空字符串

%e: 产生的事件名称

%T: 以"--timefmt"定义的时间格式输出当前时间,要求同时定义"--timefmt"

inotifywait -e可监控的事件:

move: 是moved_to和moved_from的结合

modify: 文件被写入

create: 在被监控的目录中创建了文件或目录

delete: 删除了被监控目录中的某文件或目录以下事件了解

access: 文件被访问

attrib: 元数据被修改。包括权限、时间戳、扩展属性等等

close_write: 打开的文件被关闭,是为了写文件而打开文件,之后被关闭的事件

close_nowrite: read only模式下文件被关闭,即只能是为了读取而打开文件,读取结束后关闭文件的事件

close: 是close_write和close_nowrite的结合,无论是何种方式打开文件,只要关闭都属于该事件

open: 文件被打开

moved_to: 向监控目录下移入了文件或目录,也可以是监控目录内部的移动

moved_from: 将监控目录下文件或目录移动到其他地方,也可以是在监控目录内部的移动

moved_self: 被监控的文件或目录发生了移动,移动结束后将不再监控此文件或目录

delete_self: 被监控的文件或目录被删除,删除之后不再监控此文件或目录

umount: 挂载在被监控目录上的文件系统被umount,umount后不再监控此目录

isdir : 监控目录相关操作

实例:

inotifywait -mrq -e modify,create,move,delete /var/www/html

4.3.过inotifywait触发rsync同步操作:

使用while、read持续获取监控结果

根据结果可以作进一步判断,决定执行何种操作

实例:

vi /opt/inotify_rsync.sh

#!/bin/bash

INOTIFY_CMD="inotifywait -mrq -e modify,create,attrib,move,delete myweb"

RSYNC_CMD="rsync -rzH --delete --password-file=/etc/server.pass /var/www/html/

backuper@192.168.65.128::wwwroot /myweb"

$INOTIFY_CMD | while read DIRECTORY EVENT FILE

do

if [ $(pgrep rsync | wc -l) -le 0 ] ; then

$RSYNC_CMD

fi

done

相关推荐
optimistic_chen2 小时前
【Redis系列】哨兵模式
linux·数据库·redis·分布式·哨兵
EucliwoodXT2 小时前
【Unity】项目部署Linux服务器
linux·unity·游戏引擎
2401_873587822 小时前
Linux——网络编程套接字
linux·服务器·网络
张火火isgudi2 小时前
fedora 下使用 oh-my-posh 美化 bash
linux·bash
weixin_462446232 小时前
使用 pip3 一键卸载当前环境中所有已安装的 Python 包(Linux / macOS / Windows)
linux·python·macos
梁洪飞2 小时前
armv7 cache机制
linux·arm开发·嵌入式硬件·arm·memcache
乾元2 小时前
兵器谱——深度学习、强化学习与 NLP 在安全中的典型应用场景
运维·网络·人工智能·深度学习·安全·自然语言处理·自动化
钮钴禄·爱因斯晨2 小时前
操作系统第一章:计算机系统概述
linux·windows·ubuntu·系统架构·centos·鸿蒙系统·gnu
举手2 小时前
UDP Echo Server(学习版)
linux·服务器·网络·网络协议·学习·udp