首页 > 技术文章 > Rsync扩展

abc1234567 2020-12-25 23:36 原文

Rsync多模块

【修改rsyncd.conf配置多模块】

######by chaoge   rsyncd.conf

uid = rsync
gid = rsync
fake super = yes
use chroot = no
max connections = 200
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors
read only = false
list = false
hosts allow = 192.168.178.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password

[backup]
comment = This is chaoge backup!
path = /backup/
######
[data]    # 新增的模块
path=/data/        # 新增的备份目录

  【2.创建目录且授权】

[root@rsync01 ~]# mkdir -p /data
[root@rsync01 ~]# chown -R rsync.rsync /data
[root@rsync01 ~]# ls -ld /data/
drwxr-xr-x. 2 rsync rsync 6 Mar 12 10:31 /data/

  【3.重启rsync服务】

[root@rsync01 ~]# systemctl restart rsyncd

  【4.客户端同步测试】

[root@nfs01 ~]# mkdir -p /data
[root@nfs01 ~]# touch /data/爱的魔力转圈圈.txt

[root@nfs01 ~]# rsync -avz /data rsync_backup@192.168.178.148::data
sending incremental file list
data/
data/爱的魔力转圈圈.txt

sent 136 bytes  received 39 bytes  350.00 bytes/sec
total size is 0  speedup is 0.00

  【5.rsync服务端查看数据】

[root@rsync01 ~]# ls /data/data/
爱的魔力转圈圈.txt

  

排除指定目录和文件数据复制、

【1.准备好Rsync服务端工作】

1.准备好测试的文件夹目录
cd /backup/
mkdir {a..d}
touch a/1 b/2 c/3 d/4


yum install tree -y

# 备份目录下有如下文件
[root@rsync01 backup]# tree
.
├── a
│   └── 1
├── b
│   └── 2
├── c
│   └── 3
├── chaoge.txt
└── d
    └── 4

  【2.在客户端上拉取文件,且排除a c目录机器内部文件,以及b目录下的2文件,其他文件进行同步】

1.准备好一个测试的目录,用于数据同步  
ls /mnt


2.执行同步且排除文件的命令
[root@nfs01 ~]# rsync --exclude=a --exclude=b/2  --exclude=c -avzP rsync_backup@192.168.178.148::backup /mnt --password-file=/etc/rsync.password

3.检查同步的文件,是否正确
[root@nfs01 ~]# tree /mnt
/mnt
├── b
├── chaoge.txt
└── d
    └── 4

  

方法二,在Rsync服务端配置

1.修改rsync服务端配置文件,添加如下配置,排除指定目录
exclude=a c b/2

2.重启服务
[root@rsync01 backup]# systemctl restart rsyncd

  【在客户端验证拉取,仍然能够看到同样的结果】

[root@nfs01 ~]# rsync --exclude=a --exclude=b/2  --exclude=c -avzP rsync_backup@192.168.178.148::backup /mnt --password-file=/etc/rsync.password^C
[root@nfs01 ~]#
[root@nfs01 ~]#
[root@nfs01 ~]# rsync -avzP rsync_backup@192.168.178.148::backup /mnt

  

服务器之间数据无差异复制

 

 

 

 

实现该同步方式,主要是是同rsync的 --delete参数

【1.本地推送式删除】

# 保持/mnt下内容和/tmp完全一致,删除其他多余文件
[root@rsync01 tmp]# rsync -avzP --delete /tmp/  /mnt/

 

【2.拉取数据无差异同步】

注意rsyncd.conf配置文件,之前配置过排除文件的参数

rsync -avzP --delete rsync_backup@192.168.178.148::backup /mnt/ --password-file=/etc/rsync.password

  

--delete参数就是保证客户端和服务端的数据完全一致,这可能是个危险的命令!

【3.推送数据无差异同步】

[root@nfs01 ~]# rsync -avz  --delete /tmp/ rsync_backup@192.168.178.157::backup --password-file=/etc/rsync.password[root@nfs01 ~]# rsync -avz  --delete /tmp/ rsync_backup@192.168.178.157::backup --password-file=/etc/rsync.password

  

--delete参数总结与生产环境

1. Rsync推送企业工作场景:数据备份,上传

本地有的资料,远端机器完全一致
在使用场景是备份、上传情况下,一般不用加上--delete参数,除非是NFS服务的实施复制,数据必须完全一致性

2. Rsync拉取场景:代码发布,下载

 

Rsync断点续传

Rsync支持大文件断点续传,参数如下

--partial  
默认情况rsync传输中断后,将会删除所有部分传输的文件,某些情况下用户希望能保留已经
传输的内容,该参数告知rsync保留部分已传输的文件,可以使得剩余文件部分传输

--partial-dir=DIR
保留部分传输文件,这是个更好的参数,能够指定目录保存部分数据,而不是写入目标文件
下次传输的时候,rsync将使用该目录的数据,来恢复整体数据传输,结束后删除该目录

  【断点续传案例】

1.加上断点续传指定目录参数,传输中断,部分数据也保存在了指定目录,传输结束后,会删除该文件
[root@nfs01 tmp]# rsync -avzP --partial-dir=/tmp/ /tmp/1  rsync_backup@192.168.178.157::backup

  

Rsync限速

限速参数
--bwlimit=KBPS
该参数允许最大传输速率是多少KB/s,设置为0则不限速

  在某公司,白天高峰期某DBA人员在数据库服务器通过rsync复制百G数据到备份服务器,导致数据库服务器

带宽占满,造成用户无法访问。

这就应该用rsync限速功能,限制复制速度在带宽的1/3这样,就能解决该问题。

当然,尽量别在高峰期做大数据复制行为。

1.快四生成1G文件
dd if=/dev/zero of=test1  bs=10M count=128

2.不限速传输形式
[root@nfs01 tmp]# rsync -avzP /tmp/test1 rsync_backup@192.168.178.157::backup
sending incremental file list
test1
    495,026,176  36%   91.26MB/s    0:00:09  ^C
rsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at rsync.c(638) [sender=3.1.2]

3.限速传输
[root@nfs01 tmp]# rsync -avzP --bwlimit=10 /tmp/  rsync_backup@192.168.178.157::backup

  

  

生产经验

rsync默认增量复制,与oss的数据复制的时候,注意参数,无法用-a参数,因为涉及到权限问题,-a是保持属性,

rsync -r

 

推荐阅读