目录
[1.2.Rsync 特性:](#1.2.Rsync 特性:)
一、rsync讲解
1.1.关于rsync:
rsync(Remote Sync,远程同步)是一款可以实现快速增量备份的工具。配合任务计划,rsync能实现定时或间隔同步,配合inotify,可以实现触发式的实时同步。
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.基本思路:
-
安装rsycn建立配置文件rsyncd.conf(默认无配置文件需要手动创建)
-
建立独立的账号文件,用于登入源服务器并同步
-
启动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   **本实例配置文件:** # 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
