2020-02-20 Rsync工作方式介绍与实践

Rsync有3种传输数据模式,具体如下:

  1. 本地(Local)数据传输模式
    Rsync的本地数据传输模式,很类似于cp本地复制命令,可以实现文件、目录的移动备份等功能,所不同的是Rsync有增量复制的功能。
  2. 远程Shell数据传输模式
    远程Shell数据传输模式一般是借助通道(如SSH)在两台服务器之间进行复制数据,这两台服务器之间是对等的,没有客户端与服务端之分,整个过程类似于scp远程复制命令,所不同的是Rsync有增量复制的功能,但缺少scp的加密复制的功能。
  3. 守护进程(Daemon)传输模式
    守护进程传输模式是在客户端与服务端之间进行数据复制的,通常需要服务端部署守护进程服务,然后在客户端执行命令,实现数据的拉取和推送复制。

1. 本地数据传输模式

1.1 本地数据传输模式语法

image.png

1.2 本地数据传输模式实践

(1)作为本地复制命令应用(类似cp命令)
实例一:利用rsync命令实现本地文件的复制。

[root@backup ~]# yum install -y rsync
[root@backup ~]# cd /tmp
[root@backup tmp]# ls
ks-script-SIRIfV  vmware-root_6107-1991519254  yum.log
[root@backup tmp]# rsync /etc/hosts /tmp/    ---实现hosts文件本地复制
[root@backup tmp]# ls
hosts  ks-script-SIRIfV  vmware-root_6107-1991519254  yum.log
说明:根据以上操作信息,实现了本地拷贝文件操作

实例二:利用rsync命令实现复制本地目录。

[root@backup tmp]# mkdir /oldboy_dir -p
[root@backup tmp]# touch /oldboy_dir/file{1..5}.txt
[root@backup tmp]# ls /oldboy_dir/
file1.txt  file2.txt  file3.txt  file4.txt  file5.txt
[root@backup tmp]# rsync /oldboy_dir /tmp/    ---直接复制目录会显示报错信息
skipping directory oldboy_dir
[root@backup tmp]# rsync -r /oldboy_dir /tmp/    ---复制目录需要加入-r参数
[root@backup tmp]# ls
hosts  ks-script-SIRIfV  oldboy_dir  vmware-root_6107-1991519254  yum.log
[root@backup tmp]# ls oldboy_dir/
file1.txt  file2.txt  file3.txt  file4.txt  file5.txt
说明:根据以上操作信息,实现了本地拷贝目录操作

(2)作为删除数据命令应用(类似rm命令)
实例一:利用rsync命令的删除功能清空目录下的内容:

[root@backup tmp]# mkdir /opt/null -p    ---创建一个空目录
[root@backup tmp]# rsync -r --delete /opt/null/ /tmp/    ---清除/tmp下所有内容
[root@backup tmp]# ls    ---已删除
说明:利用上面所学的本地复制命令结合删除功能参数--delete,对tmp目录进行清除。
提示:在使用--delete删除功能参数时,必须结合-r或-d参数使用。

实例二:利用rsync命令的删除功能清空文件内容:

[root@backup tmp]# echo "www.test.com" >file1.txt    ---生成测试文件
[root@backup tmp]# cat file1.txt 
www.test.com
[root@backup tmp]# touch null.txt    ---创建空文件null.txt,利用空文件实现对相应file1.txt文件内容的清除
[root@backup tmp]# rsync -r --delete /tmp/null.txt file1.txt    ---利用rsync命令删除功能实现对文件数据信息清除
[root@backup tmp]# cat file1.txt    ---数据信息已清除

以上实践操作只是利用--delete参数与本地复制命令结合,实现本地数据的删除。同理,可利用--delete参数与远程复制命令结合,实现对远程数据的删除。
(3)作为查询数据命令应用(类似ls命令)
实例:利用rsync命令查询功能查看文件和目录信息

[root@backup tmp]# rsync /etc/hosts    ---查询文件信息
-rw-r--r--            158 2013/06/07 22:31:32 hosts
[root@backup tmp]# rsync /etc    ---查询目录信息
drwxr-xr-x          8,192 2020/02/17 00:05:39 etc

2. 远程Shell数据传输模式

2.1 远程Shell数据传输模式语法

远程Shell数据传输模式分为拉取和推送两种模式,拉取是指从远端服务器把数据拉取到本地服务器;推送是指把数据从本地服务器推送到远端服务器,这两种传输方式的语法如下:
(1)拉取(Pull)

image.png

(2)推送(Push)

image.png
Rsync数据传输推拉原理图

2.2 远程Shell数据传输模式实践

实践一:利用拉取模式从远端服务器把/etc/hosts复制到本地/tmp。

[root@nfs01 ~]# rsync -av -e 'ssh -p 22' root@192.168.9.5:/etc/hosts /tmp
---借助-e参数指定数据传输方式为ssh隧道加密传输,/tmp目录为当前命令行的本地目录
---如果ssh端口是默认的22,命令中的-e 'ssh -p 22'部分可以省略
The authenticity of host '192.168.9.5 (192.168.9.5)' can't be established.
ECDSA key fingerprint is SHA256:lpAQ77XAqJ/27nex4tZvKv8y9craDayqf12ZB9V3QKk.
ECDSA key fingerprint is MD5:c8:94:09:a2:27:8b:92:6f:b7:60:fc:94:bd:f9:14:88.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.9.5' (ECDSA) to the list of known hosts.
root@192.168.9.5's password:     ---输入backup的root密码
receiving incremental file list
hosts
sent 43 bytes  received 243 bytes  17.33 bytes/sec
total size is 158  speedup is 0.55

实践二:利用推送模式从本地服务器把/etc/hosts复制到远端主机的/tmp。

[root@nfs01 ~]# rsync -av /etc/hosts root@192.168.9.5:/tmp
---省略-e参数,/tmp目录为远程服务器的目录,/etc/hosts为本地文件
root@192.168.9.5's password: 
sending incremental file list
hosts
sent 243 bytes  received 35 bytes  17.94 bytes/sec
total size is 158  speedup is 0.57

提示
1)采用远程Shell数据传输模式,每次都需要输入远程主机密码信息,无法实现免交互;因此需要配合SSH key免密码登录来完成数据免交互同步。
2)该复制使用系统用户进行存在安全隐患,而使用普通用户进行又会导致权限不足。
3)实际工作中守护进程传输方式是更重要的方式。

3. 守护进程传输模式

3.1 守护进程传输模式语法

守护进程传输模式是在客户端与服务端之间进行数据复制的,通常需要服务端部署守护进程服务,然后在客户端执行命令,实现数据的拉取和推送复制,即把数据推送到服务器端,或者从服务器端把数据拉取到本地客户端,这两种传输方式的客户端命令又有不同的语法格式。
1)拉取模式的两种语法格式:

image.png
image.png

2)推送模式的两种语法格式:

image.png
image.png

通过语法说明可以发现,拉取和推送数据传输模式拥有的两种语法格式作用是完全相同的,可以根据用户自身命令语法记忆习惯选择。
通过对守护进程传输语法的介绍,可以看出其应用方法与远程Shell传输模式类似,但是如果想采用守护进程传输模式进行实际复制传输数据,还必须要额外部署Rsync Daemon服务才行。

3.2 守护进程传输模式实践

(1)部署前准备工作
第一步:部署环境准备

[root@nfs01 ~]# cat /etc/redhat-release 
CentOS Linux release 7.6.1810 (Core) 
[root@nfs01 ~]# uname -r
3.10.0-957.el7.x86_64
[root@nfs01 ~]# uname -m
x86_64

网络拓扑配置:

image.png

第二步:具体要求
要求Rsync备份服务器(BACKUP)上以守护进程方式部署Rsync服务,使得所有Rsync节点客户端主机,可以把本地数据通过rsync命令的方式备份数据到数据备份服务器Rsync服务器上。
第三步:备份数据架构拓扑
参照下图进行Rsync守护进程模式服务器架构部署搭建,并且以远程数据同步方式由客户端节点向服务端推送数据。

image.png
Rsync服务守护进程客户端访问原理

(2)Rsync服务器端部署
Rsync守护进程操作步骤以及形象记忆比喻

image.png
1)配置rsync.conf

提示:Rsync守护进程模式服务需要部署在BACKUP服务器上,即192.168.9.5服务器上。
编写rsync.conf单模块配置文件:

# 说明:增加如下配置,/etc/rsyncd.conf为默认的Rsync服务的配置文件路径及文件名
# 特别注意,是rsyncd.conf不是rsync.conf
cp /etc/rsyncd.conf{,.ori}
cat >/etc/rsyncd.conf<<EOF
#rsync_config_____________start
#create by zheng
uid = rsync    ---管理备份目录的用户
gid = rsync    ---管理备份目录的用户组
fake super = yes    ---CentOS7比CentOS6增加的参数
use chroot = no    ---安全功能,数据是否锁定到备份目录
max connections = 200    ---并发连接,同时多少客户端访问
timeout = 600     ---超时时间
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.9.0/24    ---哪些主机可以访问
hosts deny = 0.0.0.0/32    ---哪些主机不允许访问
auth users = rsync_backup    ---远程虚拟连接用户
secrets file = /etc/rsync.password    ---存放密码的文件:格式:用户名:密码 权限必须600
[backup]    ---【模块名】远程访问使用模块名访问
comment = welcome to oldboyedu backup!    ---说明注释
path = /backup/    ---服务端用户备份的目录,用户和组,rsync.rsync
EOF
Rsync服务配置文件常用参数说明

提示:
(1)模块中的参数项可以拿到全局配置中(放到模块前面)使用。
(2)更多的参数可执行man rsyncd.conf查看。

2)配置用于数据备份的目录

如果配置文件里配置了“path=backup”,这里的/backup备份目录默认不存在,创建命令如下:

[root@backup ~]# useradd rsync -s /sbin/nologin -M    ---创建管理备份目录的用户
[root@backup ~]# mkdir -p /backup    ---创建BACKUP备份目录
[root@backup ~]# chown -R rsync.rsync /backup    ---授权Rsync用户和组管理/backup用户
3)配置用于Rsync复制的帐号、密码及帐号文件权限

在Rsync服务端创建用于在Rsync客户端与服务端进行验证的帐号和密码,并将其写入文件。
创建服务认证帐号和密码文件的命令如下:

[root@backup ~]# echo "rsync_backup:oldboy" >/etc/rsync.password    ---将帐号和密码写入文件
[root@backup ~]# chmod 600 /etc/rsync.password    ---文件必须为600权限
# 说明:其中rsync_backup:oldboy中的rsync_backup为同步传输用到的虚拟帐号,这个帐号仅为Rsync服务的认证帐号,不需要是系统帐号,也不需要创建该帐号。后面的oldboy为密码,不超过8位。帐号和密码中间用冒号分隔。

检查认证文件信息:

[root@backup ~]# cat /etc/rsync.password 
rsync_backup:oldboy
[root@backup ~]# ll /etc/rsync.password 
-rw------- 1 root root 20 2月  18 00:57 /etc/rsyncd.password
4)启动Rsync服务以及检查确认

Rsync服务启动、开机自启动及检查等操作过程:

[root@backup ~]# systemctl start rsyncd
[root@backup ~]# systemctl enable rsyncd
Created symlink from /etc/systemd/system/multi-user.target.wants/rsyncd.service to /usr/lib/systemd/system/rsyncd.service.
[root@backup ~]# systemctl status rsyncd
● rsyncd.service - fast remote file copy program daemon
   Loaded: loaded (/usr/lib/systemd/system/rsyncd.service; enabled; vendor preset: disabled)
   Active: active (running) since 二 2020-02-18 01:17:12 CST; 37s ago
 Main PID: 10829 (rsync)
   CGroup: /system.slice/rsyncd.service
           └─10829 /usr/bin/rsync --daemon --no-detach
2月 18 01:17:12 backup systemd[1]: Started fast remote file copy program daemon.
2月 18 01:17:12 backup rsyncd[10829]: rsyncd version 3.1.2 starting, listening on ...73
Hint: Some lines were ellipsized, use -l to show in full.
[root@backup ~]# ps -ef | grep rsync | grep -v grep    ---检查进程
root      10829      1  0 01:17 ?        00:00:00 /usr/bin/rsync --daemon --no-detach
[root@backup ~]# netstat -lntup | grep rsync    ---检查Rsync服务应用的端口是否已处于监听状态
tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN      10829/rsync         
tcp6       0      0 :::873                  :::*                    LISTEN      10829/rsync 

(3)Rsync客户端操作过程
Rsync客户端操作过程如下:

  • 确认rsync命令是否存在。
  • 创建与Rsync服务端建立连接所需的密码文件,并进行授权,权限为600。
    配置Rsync帐号及帐号文件权限
    以下内容信息为Rsync客户端认证文件配置信息,注意要与服务端的配置区别。客户端192.168.9.6(nfs01)和192.168.9.7(web01)分别做如下操作,此处仅利用NFS01主机进行演示说明,Web01主机操作相同。
    客户端的配置方法有以下两个。
    方法一:配置密码文件方式(常用)
[root@nfs01 ~]# echo "oldboy" >/etc/rsync.password
[root@nfs01 ~]# chmod 600 /etc/rsync.password 
[root@nfs01 ~]# cat /etc/rsync.password 
oldboy
[root@nfs01 ~]# ll /etc/rsync.password 
-rw------- 1 root root 7 2月  18 00:58 /etc/rsync.password

方法二:配置特殊变量RSYNC_PASSOWRD

[root@nfs01 ~]# export RSYNC_PASSWORD=oldboy    ---临时生效配置
[root@nfs01 ~]# echo 'RSYNC_PASSWORD=oldboy' >> /etc/bashrc    ---永久生效配置
[root@nfs01 ~]# tail -1 /etc/bashrc 
RSYNC_PASSWORD=oldboy
[root@nfs01 ~]# . /etc/bashrc 
[root@nfs01 ~]# echo $RSYNC_PASSWORD
oldboy
提示:采用环境变量的方式要注意将来使用定时任务执行rsync命令备份时要重新定义这个密码变量。

(4)测试数据同步效果
1)推送:从客户端同步文件或目录到服务器端
从客户端推送/etc目录到服务器端Rsync指定的目录(这里为/backup)下

[root@nfs01 ~]# rsync -avzP /etc rsync_backup@192.168.9.5::backup --password-file=/etc/rsync.password
---前面输出忽略---
etc/yum/vars/infra
              6 100%    0.01kB/s    0:00:00 (xfr#1682, to-chk=0/2346)
sent 10,366,072 bytes  received 35,619 bytes  671,076.84 bytes/sec
total size is 27,359,606  speedup is 2.63

[root@nfs01 ~]# export RSYNC_PASSWORD=oldboy    ---如果前文使用了方法二,此步可省略
[root@nfs01 ~]# rsync -avzP /etc rsync_backup@192.168.9.5::backup    ---省略冗长的密码文件参数
sending incremental file list
sent 42,826 bytes  received 635 bytes  4,139.14 bytes/sec
total size is 27,359,606  speedup is 629.52

这时我们查看服务器端指定的Rsync备份目录/backup,发现已经有了etc目录及文件。

[root@backup ~]# ls /backup/
etc
[root@backup etc]# du -sh /backup/etc
32M /backup/etc

以上同步传输命令拆解简要说明如下:

rsync -avzP /etc rsync_backup@192.168.9.5::backup/ --password-file=/etc/rsync.password
# -avzP /etc解释说明
-a    ---保持文件原有属性的若干参数
-z    ---对传输的数据进行压缩传输
-v    ---是指显示出详细的传输情况
-P --progress    ---显示文件传输过程中的进度信息
/etc    ---要推送的本地目录
# rsync_backup@192.168.9.5::backup/解释说明
rsync_backup    ---rsync同步数据的虚拟认证用户
@192.168.9.5::backup    ---为要推送的目的地的(Rsync服务器)IP地址及模块名称
说明:IP和模块名称之间有两个冒号,且双冒号后的backup是/etc/rsyncd.conf配置文件中的[模块名]中的模块名,而非目录名。
#--password-file=/etc/rsync.password解释说明
--password-file    ---客户端本地密码文件,可用环境变量RSYNC_PASSWORD替代。

2)拉取:从服务器端同步文件或目录到客户端
从服务器端Rsync指定的目录下拉取所有文件到本地客户端目录/opt。

rsync -avz rsync_backup@192.168.9.5::backup /opt/ --password-file=/etc/rsync.password

还可以拉取或推送模块目录下的指定目录或文件。

[root@nfs01 ~]# rsync -vzrtopg rsync_backup@192.168.9.5::backup/etc/hosts /opt \
> --password-file=/etc/rsync.password

(5)Rsync客户端命令参数选项

image.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,718评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,683评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,207评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,755评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,862评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,050评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,136评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,882评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,330评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,651评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,789评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,477评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,135评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,864评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,099评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,598评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,697评论 2 351

推荐阅读更多精彩内容