脚本宝典收集整理的这篇文章主要介绍了rsync 守护进程及实时同步,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
rsync英文称为remote synchronizetion,从软件的名称就可以看出来,rsync具有可使本地和远程两台主机之间的数据快速复制同步镜像、远程备份的功能,这个功能类似于ssh带的scp命令,但是又优于scp命令的功能,scp每次都是全量拷贝,而rsync可以增量拷贝。当然,rsync还可以在本地主机的不同分区或目录之间全量及增量的复制数据,这又类似cp命令。但是同样也优于cp命令,cp每次都是全量拷贝,而rsync可以增量拷贝。
👉rsync官网
👉概念参考:全量,增量,差异备份
区别与
cp
和scp
备份
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 命令用于 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)的选项。
# 推模式:本地上传到远程服务器
[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支持远程复制(全量)和增量复制
三种格式:
# 本地,没有推和拉模式
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
[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
[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/
[root@backup opt]# systemctl disable --now firewalld
[root@backup opt]# setenforce 0
[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是不支持实时同步的,通常我们借助于inotify这个软件来实时监控文件变化,一旦inotify监控到文件变,则立即调用rsync进行同步。
[root@m01 ~]# yum -y install inotify-tools
参数 | 作用 | |
---|---|---|
-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
以上是脚本宝典为你收集整理的rsync 守护进程及实时同步全部内容,希望文章能够帮你解决rsync 守护进程及实时同步所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。