1、rsync介绍
rsync英文称为remote synchronizetion,从软件的名称就可以看出来,
rsync具有可使本地和远程两台主机之间的数据快速复制同步镜像、远程备份的功能,
这个功能类似于ssh带的scp命令,但是又优于scp命令的功能,scp每次都是全量拷贝,
而rsync可以增量拷贝。
当然,rsync还可以在本地主机的不同分区或目录之间全量及增量的复制数据,这又类似cp命令。
但是同样也优于cp命令,cp每次都是全量拷贝,而rsync可以增量拷贝。
rsync官方地址:https://rsync.samba.org/
rsync监听端口:873
rsync运行模式:C/S client/server
rsync简称叫做远程同步,可以实现不同主机之间的数据同步,还支持全量和增量
2、rsync特性
支持拷贝特殊文件,如连接文件、设备等。
可以有排除指定文件或目录同步的功能,相当于打包命令tar的排除功能。
可以做到保持原文件或目录的权限、时间、软硬链接、属主、组等所有属性均不改变 –p。
可以实现增量同步,既只同步发生变化的数据,因此数据传输效率很高(tar-N)。
可以使用rcp、rsh、ssh等方式来配合传输文件(rsync本身不对数据加密)。
可以通过socket(进程方式)传输文件和数据(服务端和客户端)*****。
支持匿名的活认证(无需系统用户)的进程模式传输,可以实现方便安全的进行数据备份和镜像。
3、rsync应用场景
全量备份
增量备份
4、rsync的传输方式
push 推:
客户端将数据从本地推送至服务端
pull 拉:
客户端将数据从服务端拉取到本地
5、Rsync传输模式
1. 本地方式(类似于cp,不支持推送和拉取,只是单纯的复制)
2. 远程方式(类似于scp,又不同于scp,scp只支持全量备份,rsync支持增量备份和差异备份)
3. 守护进程方式(客户端和服务端)client/server
6. rsync的使用
"所以通常情况下我们只需要-az即可"
-a # 归档模式传输,等于-tropgDl -t -r -o -p -g -D -l
-v # 详细模式输出,打印速率,文件数量等
# rsync -v ./2.txt root@172.16.1.41:/opt/
-z # 传输时进行压缩以提高效率
# rsync -vz ./2.txt root@172.16.1.41:/opt/
-r # 递归传输目录及子目录,即目录下的所有目录都同样传输
# rsync -vzr ./a root@172.16.1.41:/opt/
-t # 保持文件时间信息
# rsync -vzrt ./a/b/c/2.txt root@172.16.1.41:/opt/
-o # 保持文件属主信息
-g # 保持文件属组信息
-p # 保持文件权限
# rsync -vzrtgop ./a/b/c/2.txt root@172.16.1.41:/opt/
-l # 保留软链接
# rsync -vzrtgopl ./* root@172.16.1.41:/opt/
-P # 显示同步的过程及传输时的进度等信息
# rsync -vzrtgoplP ./* root@172.16.1.41:/opt/
-D # 保持设备文件信息
# rsync -vzrtgDopl /dev/tty1 root@172.16.1.41:/opt/
-L # 保留软链接指向的目标文件
-e # 使用的信道协议,指定替代rsh的shell程序
"非常重要的参数:"
--append # 指定文件接着上次传输中断处继续传输
--append-verify # 使用参数续传(在断点续传之后,验证一下文件,如果不同,修复文件重新再传一遍)
--exclude=PATTERN # 指定排除不需要传输的文件
# rsync -avzP --append-verify --exclude=2.txt ./* root@172.16.1.41:/opt/
--exclude-from=file # 按照文件指定内容排除
# rsync -avzP --append-verify --exclued-from=/tmp/exclued.txt ./* root@172.16.1.41:/opt/
--bwlimit=100 # 限速传输(单位:MB)
# rsync -avzP --append-verify --bwlimit=10 ./* root@172.16.1.41:/opt/
--delete # 让目标目录和源目录数据保持一致
--password-file=xxx # 使用密码文件
--port # 指定端口传输
7. rsync守护进程模式
服务端
1. 安装
yum install -y rsync
2. 修改配置文件
uid = rsync
gid = rsync
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = false
auth users = rsync_backup
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log
###################################
[backup]
comment = welcome to backup!
path=/backup
[linux]
comment = welcome to linux!
path=/tmp/linux
3. 创建系统用户
groupadd rsync -g 666
useradd rsync -u 666 -g 666 -M -s /sbin/nologin -r
4. 创建密码文件
# 虚拟用户名:密码
echo "rsync_backup:123456" > /etc/rsync.passwd
5. 授权(必须授权为600)
chmod 600 /etc/rsync.passwd
6. 创建备份目录
mkdir /backup
mkdir /tmp/linux
7. 目录授权
chown rsync.rsync /backup/
chown rsync.rsync /tmp/linux/
8. 关闭防火墙和selinux
systemctl disable --now firewalld
setenforce 0
9. 启动rsyncd服务
systemctl start rsyncd
客户端
方法一:自己输入密码
# rsync -avzP ./* rsync_backup@172.16.1.41::backup
rsync_backup 虚拟用户,只在数据传输时使用
172.16.1.41 backup服务端的IP
backup 模块名称
方法二:设置密码文件,运行时读取
1. 编写密码文件
echo "123456" > /etc/rsync.passwd
# 客户端只需要密码,服务端需要用户名和密码
2. 授权
chmod 600 /etc/rsync.passwd
3. 连接
rsync -avzP --passwd-file=/etc/rsync.passwd ./* rsync.backup@172.16.1.41::linux
方法三:添加环境变量
1. 定义环境变量
export RSYNC_PASSWORD=123456
2. 同步
rsync -avzP ./* rsync_backup@172.16.1.41::linux
# 查找配置文件
rpm -qc rsync
/etc/rsyncd.conf
# 编辑配置文件
cat /etc/rsyncd.conf
uid = rsync
gid = rsync
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = flase
auth users = rsync_backup
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log
##################################
[backup]
comment = welcome to obe backup!
path = /backup
# 配置文件详解
uid = rsync # 启动服务的用户id
gid = rsync # 启动服务用户的组id
port = 873 # 服务默认监听端口
fake super = yes # 无需使用root用户启动
use chroot = no # 安全机制
max connections = 200 # 最大连接数
timeout = 600 # 超时时间
ignore errors # 忽略错误
read only = false # 只读权限
list = flase # 查看模块列表
auth users = rsync_backup # 定义虚拟用户(rsync传输过程使用的用户)
secrets file = /etc/rsync.passwd # 定义虚拟用户的密码
log file = /var/log/rsyncd.log # 日志文件
##################################
[backup] # 模块
comment = welcome to obe backup! # 模块的备注
path = /backup # 服务器真实的路径
8. rsync实时同步
rsycn是不支持实时同步的,通常我们借助于inotify这个软件来实时监控文件变化,一旦inotify监控到文件变化,则立即调用rsync进行同步。
1. 安装inotify(装在客户端)
yum -y install inotify-tools
2. inotify参数介绍
-m 持续监控
-r 持续递归
-q 静默,仅打印时间信息
--timefmt 指定输出时间格式
--format 指定事件输出格式
%Xe 时间
%w 目录
%f 文件
-e 指定监控的时间
access 访问
modify 内容修改
attrib 属性修改
close_write 修改真实文件内容
open 打开
create 创建
delete 删除
umount 卸载
3. 开始监控
/usr/bin/inotifywait -mrq --format '%Xe %w %f' -e create,modify,delete,attrib,close_write /root
4. 实时监控并同步
/usr/bin/inotifywait -mrq --format '%Xe %w %f' -e create,modify,delete,attrib,close_write /root | while read line;do
cd /root
rsync -avzP --delete --password-file=/etc/rsyncd.passwd ./* rsync_backup@172.16.1.41::backup
done