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' [email protected]:/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.
[email protected]'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 [email protected]:/tmp
---省略-e参数,/tmp目录为远程服务器的目录,/etc/hosts为本地文件
[email protected]'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<
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 [email protected]::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 [email protected]::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 [email protected]::backup/ --password-file=/etc/rsync.password
# -avzP /etc解释说明
-a    ---保持文件原有属性的若干参数
-z    ---对传输的数据进行压缩传输
-v    ---是指显示出详细的传输情况
-P --progress    ---显示文件传输过程中的进度信息
/etc    ---要推送的本地目录
# [email protected]::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 [email protected]::backup /opt/ --password-file=/etc/rsync.password

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

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

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

image.png

你可能感兴趣的:(2020-02-20 Rsync工作方式介绍与实践)