Linux架构之rsync

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
posted @ 2021-12-31 13:48  Joshua_jiaxue  阅读(95)  评论(0编辑  收藏  举报