rsync 守护进程及实时同步
目录
rsync 守护进程及实时同步
rsync简介
rsync英文称为remote synchronizetion,从软件的名称就可以看出来,rsync具有可使本地和远程两台主机之间的数据快速复制同步镜像、远程备份的功能,这个功能类似于ssh带的scp命令,但是又优于scp命令的功能,scp每次都是全量拷贝,而rsync可以增量拷贝。当然,rsync还可以在本地主机的不同分区或目录之间全量及增量的复制数据,这又类似cp命令。但是同样也优于cp命令,cp每次都是全量拷贝,而rsync可以增量拷贝。
- rsync监听端口:873
- rsync运行模式:C/S client/server
- rsync简称叫做远程同步,可以实现不同主机之间的数据同步,还支持全量和增量
rsync特性
- 支持拷贝特殊文件,如连接文件、设备等。
- 可以有排除指定文件或目录同步的功能,相当于打包命令tar的排除功能。
- 可以做到保持原文件或目录的权限、时间、软硬链接、属主、组等所有属性均不改变 –p。
- 可以实现增量同步,既只同步发生变化的数据,因此数据传输效率很高(tar-N)。
- 可以使用rcp、rsh、ssh等方式来配合传输文件(rsync本身不对数据加密)。
- 可以通过socket(进程方式)传输文件和数据(服务端和客户端)
- 支持匿名的活认证(无需系统用户)的进程模式传输,可以实现方便安全的进行数据备份和镜像。
rsync应用场景
- 全量备份:全量备份就是指对某一个时间点上的所有数据或应用进行的一个完全拷贝,耗时长。
- 增量备份:增量备份是针对于上一次备份(无论是哪种备份)备份上一次备份后(包含全量备份、差异备份、增量备份)所有发生变化的文件,耗时短。
- 差异备份:备份自上一次完全备份之后有变化的数据。差异备份过程中,只备份有标记的那些选中的文件和文件夹。它不清除标记,也即备份后不标记为已备份文件。换言之,不清除存档属性。差异备份是指在一次全备份后到进行差异备份的这段时间内,对那些增加或者修改文件的备份。在进行恢复时,我们只需对第一次全备份和最后一次差异备份进行恢复。
👉概念参考:全量,增量,差异备份
区别与
cp
和scp
备份
cp命令
-
cp备份
:本机复制 -
格式:
cp [选项] 源文件 目标文件
cp参数
参数 | 说明 |
---|---|
-a | 相当于 -d、-p、-r 选项的集合 |
-d | 如果源文件为软链接(对硬链接无效),则复制出的目标文件也为软链接 |
-i | 询问,如果目标文件已经存在,则会询问是否覆盖; |
-l | 把目标文件建立为源文件的硬链接文件,而不是复制源文件 |
-s | 把目标文件建立为源文件的软链接文件,而不是复制源文件 |
-p | 复制后目标文件保留源文件的属性(包括所有者、所属组、权限和时间) |
-r | 递归复制,用于复制目录 |
-u | 若目标文件比源文件有差异,则使用该选项可以更新目标文件,此选项可用于对文件的升级和备用 |
# cp的不是本文重点只举一个
# 创建一个示例目录
[root@m01 ~]# mkdir -p ./a/b/c/test.txt
[root@m01 ~]# cp -ar ./a /tmp/
[root@m01 ~]# ll /tmp/a/b/c/
total 0
drwxr-xr-x 2 root root 6 Dec 29 15:00 test.txt
scp命令
scp 命令用于 Linux 之间复制文件和目录,用于远程复制,是rcp的加强版,rcp不加密。scp可以加密
-
scp备份
:远程复制 -
格式:
scp [本地文件路径] 用户名@[服务器ip]:[远程文件路径]
--- 推模式scp 用户名@[服务器ip]:[远程文件路径] [本地文件路径]
--- 拉模式
# 简单示例(推模式) scp a.txt root@172.16.1.41:/opt/
-
参数:
scp【本地或远程文件的路径】【服务器用户名】@【服务器地址】:【远程或本地文件的路径】
-1: 强制scp命令使用协议ssh1
-2: 强制scp命令使用协议ssh2
-4: 强制scp命令只使用IPv4寻址
-6: 强制scp命令只使用IPv6寻址
-B: 使用批处理模式(传输过程中不询问传输口令或短语)
-C: 允许压缩。(将-C标志传递给ssh,从而打开压缩功能)
-p:保留原文件的修改时间,访问时间和访问权限。
-q: 不显示传输进度条。
-r: 递归复制整个目录。
-v:详细方式显示输出。scp和ssh(1)会显示出整个过程的调试信息。这些信息用于调试连接,验证和配置问题。
-c cipher: 以cipher将数据传输进行加密,这个选项将直接传递给ssh。
-F ssh_config: 指定一个替代的ssh配置文件,此参数直接传递给ssh。
-i identity_file: 从指定文件中读取传输时使用的密钥文件,此参数直接传递给ssh。
-l limit: 限定用户所能使用的带宽,以Kbit/s为单位。
-o ssh_option: 如果习惯于使用ssh_config(5)中的参数传递方式,
-P port:注意是大写的P, port是指定数据传输用到的端口号
-S program: 指定加密传输时所使用的程序。此程序必须能够理解ssh(1)的选项。
- 传输方式:
- 格式在上面👆
- push 推:本地上传到远程服务器
- pull 拉:把远程服务器文件下载到本地
# 推模式:本地上传到远程服务器
[root@m01 tmp]# scp -r a root@172.16.1.41:/opt/
root@172.16.1.41's password:
# 查看
[root@backup ~]# ll /opt/
total 0
drwxr-xr-x 3 root root 15 Dec 29 15:12 a
# 拉模式:把远程服务器文件下载到本地
[root@backup ~]# touch /opt/b.txt
[root@m01 ~]# scp root@172.16.1.41:/opt/b.txt ./
root@172.16.1.41's password:
b.txt 100% 0 0.0KB/s 00:00
cp命令和scp命令都只支持全量复制,rsync支持远程复制(全量)和增量复制
rsync的传输方式
- push 推:客户端将数据从本地推送至服务端
- pull 拉:客户端将数据从服务端拉取到本地
rsync的传输模式
- 本地方式(类似于cp,不支持推送和拉取,只是单纯的复制)
- 远程方式(类似于scp,又不同于scp),scp只支持全量备份,rsync支持增量备份和差异备份
- 守护进程方式(客户端和服务端)
rsync实际使用
rsync命令
三种格式:
# 本地,没有推和拉模式
Local: rsync [OPTION...] SRC... [DEST]
# 通过远程shell访问
Access via remote shell:
Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
# 通过rsync守护进程访问
Access via rsync daemon:
Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
参数表(OPTIONS SUMMARY)
参数 | 说明 |
---|---|
-a | 归档模式传输, 等于-tropgDl -t -r -o -p -g -D -l |
-v | 详细模式输出, 打印速率, 文件数量等 |
-z | 传输时进行压缩以提高效率 |
-r | 递归传输目录及子目录,即目录下得所有目录都同样传输 |
-t | 保持文件时间信息(stat命令查看文件时间,a/m/ctime) |
-o | 保持文件属主信息 |
-g | 保持文件属组信息 |
-p | 保持文件权限 |
-l | 保留软连接 |
-P | 显示同步的过程及传输时的进度等信息 |
-D | 保持设备文件信息 |
-L | 保留软连接指向的目标文件 |
-e | 使用的信道协议,指定替代rsh的shell程序 |
--append | 指定文件接着上次传输中断处继续传输(断点续传) |
--append-verify | 使用参数续传(在断点续传之后,验证一下文件,如果不同,修复文件) |
--exclude=PATTERN | 指定排除不需要传输的文件 |
--exclude-from=[文件路径] | 按照文件指定内容排除 |
--bwlimit=100 | 限速传输(单位:MB) |
--delete | 让目标目录和源目录数据保持一致 |
--password-file=[密码文件路径] | 使用密码文件 |
--port | 指定端口传输 |
案例
# -v :详细模式输出, 打印速率, 文件数量等
[root@m01 ~]# rsync -v ./b.txt root@172.16.1.41:/opt/
root@172.16.1.41's password:
b.txt
sent 88 bytes received 35 bytes 82.00 bytes/sec
total size is 6 speedup is 0.05
[root@backup opt]# ll
total 4
-rw-r--r-- 1 root root 6 Dec 29 16:22 b.txt
# -z :传输时进行压缩以提高效率
[root@m01 ~]# rsync -vz ./b.txt root@172.16.1.41:/opt/
# -r :递归传输目录及子目录,即目录下得所有目录都同样传
[root@m01 opt]# rsync -vzr ./a/ root@172.16.1.41:/opt/
root@172.16.1.41's password:
sending incremental file list
b/
b/c/
b/c/test.txt
sent 151 bytes received 43 bytes 129.33 bytes/sec
total size is 0 speedup is 0.00
# -t:保持文件时间信息
[root@m01 opt]# rsync -trvz ./a root@172.16.1.41:/opt/
# -o :保持文件属主信息
# -g :保持文件属组信息
[root@m01 opt]# rsync -trvzgo ./a root@172.16.1.41:/opt/
# -p:保持文件权限
[root@m01 opt]# chmod 000 a/b/c/test.txt
[root@m01 ~]# rsync -vzrtgop ./a/b/c/test.txt root@172.16.1.41:/opt/
# -l:保留软连接
[root@m01 ~]# rsync -vzrtgopl ./* root@172.16.1.41:/opt/
# -P :显示同步的过程及传输时的进度等信息
[root@m01 opt]# rsync -vzrtgoplP /root root@172.16.1.41:/opt/
# -D:保持设备文件信息
[root@m01 dev]# rsync -vzrtgDopl /dev/tty1 root@172.16.1.41:/opt/
# -t -r -o -p -g -D -l参数可以用-a来替换
[root@m01 opt]# rsync -avzP ./* root@172.16.1.41:/opt/
root@172.16.1.41's password:
sending incremental file list
1.txt
0 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=6/7)
a/
a/1.txt -> 1.txt
a/b/
a/b/c/
a/b/c/test.txt
0 100% 0.00kB/s 0:00:00 (xfr#2, to-chk=0/7)
b/
sent 304 bytes received 81 bytes 256.67 bytes/sec
total size is 5 speedup is 0.01
rsync守护进程模式
服务端
- 安装rsync
[root@backup ~]# yum install -y rsync
- 修改配置文件
模块用于备份
[root@m01 ~]# vim /etc/rsyncd.conf
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 = false # 查看模块列表
auth users = rsync_backup # 定义虚拟用户(rsync传输过程使用的用户)
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
- 创建系统用户
[root@backup opt]# groupadd rsync -g 666
[root@backup opt]# useradd rsync -u 666 -g 666 -M -s /sbin/nologin -r
- 创建密码文件
# 密码自定义
[root@backup opt]# echo "rsync_backup:123456" > /etc/rsync.passwd
- 授权(必须授权为600)
[root@backup opt]# chmod 600 /etc/rsync.passwd
- 创建备份目录
[root@backup opt]# mkdir /backup
[root@backup opt]# mkdir /tmp/linux
- 目录授权
[root@backup opt]# chown rsync.rsync /backup/
[root@backup opt]# chown rsync.rsync /tmp/linux/
- 关闭防火墙和selinux
[root@backup opt]# systemctl disable --now firewalld
[root@backup opt]# setenforce 0
- 启动rsyncd服务
[root@backup opt]# systemctl start rsyncd
客户端
客户端传输的方式有以下三种,任选其一
方法一:自己输入密码
[root@m01 ~]# rsync -avzP ./* rsync_backup@172.16.1.41::backup
# 注:
# 1、rsync_backup : 虚拟用户,只在数据传输时使用
# 2、172.16.1.41 : backup服务端的IP
# 3、backup : 模块名称
方法二:设置密码文件,运行时读取
1、编写密码文件
[root@m01 ~]# echo "123456" > /etc/rsyncd.passwd
2、授权
[root@m01 ~]# chmod 600 /etc/rsyncd.passwd
3、连接
[root@m01 ~]# rsync -avzP --password-file=/etc/rsyncd.passwd ./* rsync_backup@172.16.1.41::linux
方法三:添加环境变量
1、定义环境变量
[root@m01 ~]# export RSYNC_PASSWORD=123456
2、同步
[root@m01 ~]# rsync -avzP ./* rsync_backup@172.16.1.41::linux
rsync实时同步传输
rsync是不支持实时同步的,通常我们借助于inotify这个软件来实时监控文件变化,一旦inotify监控到文件变,则立即调用rsync进行同步。
- 安装inotify(装在客户端)
[root@m01 ~]# yum -y install inotify-tools
- inotify参数介绍
参数 | 作用 | |
---|---|---|
-m | 持续监控 | |
-r | 递归 | |
-q | 静默,仅打印时间信息 | |
--timefmt | 指定输出时间格式 | |
--format | 指定事件输出格式 格式如👉 |
格式: 1、 %Xe 事件 2、%w 目录 3、%f 文件 |
-e | 指定监控的事件 | access 访问 modify 内容修改 attrib 属性修改 close_write 修改真实文件内容 open 打开 open 打开 delete 删除 umount 卸载 |
- 开始监控
在m01中创建文件,修改文件和删除等都会被监控到
[root@m01 ~]# /usr/bin/inotifywait -mrq --format '%Xe %w %f' -e create,modify,delete,attrib,close_write /root
- 实时监控并同步
在m01中执行以下命令,会同步创建,到172.16.1.41中查看
[root@m01 ~]# /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