1. RSYNC概述

rsync是一款开源的备份工具,
可以在不同主机之间进行同步(windows和Linux之间 Mac和Linux Linux和Linux)
可实现全量备份与增量备份,因此非常适合用于架构集中式备份或异地备份等应用。

  • 为什么要做备份

    • 数据非常的重要
    • 保证数据不丢失
    • 便于快速的恢复
  • 能不能不做备份

    • 可以,对于不是特别重要的数据可以不考虑
  • 备份怎么做

    • scp 网络之间的拷贝,全量拷贝的方式 (ssh协议)
    • rsync 远程同步(增量)
  • 备份的方式

    • 完全备份,每次都进行全部备份 (效率低下, 占用空间)
    • 增量备份,仅备份客户端与服务端差异的部分 (提高备份效率,节省空间, 适合异地备份 )

2. RSYNC传输模式

2.1 本地传输

类似于使用cp命令

语法格式: 命令 选项 源文件 目标文件

举个例子: 将本地/root/1.txt传到/opt下

命令: rsync -avz /root/1.txt /opt/

2.2 远程传输

通过网络传输 a–>b

语法格式:
推送 : Push: rsync [OPTION…] SRC… [USER@]HOST:DEST
拉取 : Pull: rsync [OPTION…] [USER@]HOST:SRC… [DEST]

举个例子:
(1)推送方式: 将本地的/etc/passwd文件,推送到172.16.1.41服务器的tmp目录下,使用的是41的root用户身份
命令: rsync -avz /etc/passwd root@172.16.1.41:/tmp

(2)拉取方式: 本地nfs服务器下载172.16.1.41服务器/etc/services这个文件,至本地当前目录下,使用的是41的系统用户root身份
命令: rsync -avz root@172.16.1.41:/etc/services ./

2.3 守护进程

运行一个服务一直在后台,充当备份服务器。

2.3.1 RSYNC安装

yum install rsync -y

2.3.2 RSYNC配置

(1)修改配置文件

[root@backup ~]# 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 = false
auth users = rsync_backup
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log
#####################################
[backup]
comment = welcome to oldboyedu backup!
path = /backup

配置文件详解

[root@backup ~]# vim /etc/rsyncd.conf
uid = rsync                      # 运行进程的用户
gid = rsync                      # 运行进程的用户组
port = 873                       # 监听端口
fake super = yes                 # 无需让rsync以root身份运行,允许接收文件的完整属性
use chroot = no                  # 禁锢推送的数据至某个目录, 不允许跳出该目录
max connections = 200            # 最大连接数
timeout = 600                    # 超时时间
ignore errors                    # 忽略错误信息
read only = false                # 对备份数据可读写
list = false                     # 不允许查看模块信息
auth users = rsync_backup        # 定义虚拟用户,作为连接认证用户
secrets file = /etc/rsync.passwd # 定义rsync服务用户连接认证密码文件路径

[backup]                # 定义模块信息
comment = commit        # 模块注释信息
path = /backup          # 定义接收备份数据目录

(2)创建rsync进程启动时需要使用的用户:

[root@backup ~]# useradd rsync -M -s /sbin/nologin 
[root@backup ~]# id rsync
uid=1000(rsync) gid=1000(rsync) groups=1000(rsync)  

(3)创建密码文件,在密码文件中写入对应的虚拟用户以及虚拟用户的密码,/etc/rsync.passwd—》rsync虚拟用户以及rsync虚拟用户的密码

[root@backup ~]# echo "rsync_backup:123456" > /etc/rsync.passwd
[root@backup ~]# chmod 600 /etc/rsync.passwd 

(4)创建存储备份数据的目录,并进行授权

[root@backup ~]# mkdir /backup
[root@backup ~]# chown -R rsync.rsync /backup/

2.3.3 RSYNC启动

启动rsync服务并加入开机自启动,并检测rsync端口号873

[root@backup ~]# systemctl start rsyncd.service 
[root@backup ~]# systemctl enable rsyncd  
[root@backup ~]# netstat -lntp

3. 客户端测试

3.1 客户端测试

命令语法格式:

        下载 Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
        上传 Push: rsync [OPTION...] SRC... [USER@]HOST::DEST

客户端推送: 把客户端中的/etc目录推送到服务端的backup模块下的/backup目录 ((注意加/ 和不加/的区别))

	[root@nfs ~]# rsync -avz /etc/ rsync_backup@172.16.1.41::backup	#推送/etc/下面的内容
	[root@nfs ~]# rsync -avz /etc rsync_backup@172.16.1.41::backup	#推送/etc这个目录

客户端拉取: 拉取服务端172.16.1.41的backup目录下面的所有内容至本地的 /opt目录

rsync -avz rsync_backup@172.16.1.41::backup /opt

注意事项:

	rsync_backup:客户端通过该虚拟用户连接rsync服务
		是一个虚拟用户,由服务端的配置文件中定义【auth users】
		通常存放在指定的一个文件中,该文件也是有服务端配置文件定义【secrets file】
	
	rsync:【模块对应的目录,必须授权为配置文件中定义的uid和gid的用户】
		用于运行rsync服务时需要使用到的系统用户
		用于将接收到的数据以自己的身份写入到对应的目录中

自我总结:

(1)这个rsync_backup这个用户是存在这个服务中的,没有在/etc/passwd中,就只是用来密码验证的。  
(2)rsync 必须是手动创建的,这个用户是由是用来用来接收客户端推送过来的数据,然后写入/backup/目录的

3.2 无差异同步

实现客户端与服务端无差异同步:–delete

#推送方式实现无差异,以客户端为准,客户端有什么服务端就有什么
[root@nfs ~]# rsync -avz --delete /root rsync_backup@172.16.1.41::backup		

#拉取方式实现无差异,以服务端为准,服务端有什么客户端就有什么
[root@nfs ~]# rsync -avz --delete rsync_backup@172.16.1.41::backup /opt/

3.3 传输限速

(1)生成一个大文件,进行传送测试:

[root@nfs ~]# dd if=/dev/zero of=./size.disk bs=1M count=500 生成大文件

(2)限制传输的速率为1MB :

[root@nfs ~]# rsync -avzP --bwlimit=1 ./size.disk rsync_backup@172.16.1.41::backup
Password: 
sending incremental file list
size.disk
    118,358,016  22%    1.01MB/s    0:06:33

(3)取消每次传输时需要输入密码【客户端才会配置】

方式一:

[root@nfs ~]# echo "123456" > /etc/rsync.pass
[root@nfs ~]# chmod 600 /etc/rsync.pass 					上该文件找123456
[root@nfs ~]# rsync -avzP --bwlimit=1 ./size.disk rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.pass

方式二:

[root@nfs ~]# export RSYNC_PASSWORD=123456
[root@nfs ~]# rsync -avzP ./size.disk rsync_backup@172.16.1.41::backup

4. RSYNC参数详情

rsync参数:-avz
-a           #归档模式传输, 等于-tropgDl
-v           #详细模式输出, 打印速率, 文件数量等
-z           #传输时进行压缩以提高效率
-r           #递归传输目录及子目录,即目录下得所有目录都同样传输。
-t           #保持文件时间信息
-o           #保持文件属主信息
-p           #保持文件权限
-g           #保持文件属组信息
-l           #保留软连接
-P           #显示同步的过程及传输时的进度等信息
-D           #保持设备文件信息
-L           #保留软连接指向的目标文件
-e           #使用的信道协议,指定替代rsh的shell程序  ssh
--exclude=PATTERN   #指定排除不需要传输的文件模式
--exclude-from=file #文件名所在的目录文件
--bwlimit=100       #限速传输                         ------常用
--partial           #断点续传
--delete            #让目标目录和源目录数据保持一致  ----常用

5. 自我总结

(1) 权限问题

uid = rsync、gid = rsync都改为www,这个uid和gid只是名字不同而已,只要是/etc/passwd中存在一个名字叫www用户即可,为了和后面的的nfs用户一直,把uid和gid都改为666.这样可以防止权限不足。在生产中也是统一一个用户。

(2)知识点梳理

rsync 远程同步
rsync能实现远程备份

rsync远程传输方式和守护进程方式区别?
	临时
	周期性任务
	
保证客户端与服务端数据一致?
	--delete参数

限制推送传输的速率?
	--bwlimit 限速
	-P  显示速率
	
rsync守护进程配置?
	安装
	配置
	启动

rsync进程运行的用户和rsync_backup虚拟用户区别?
	rsync_backup:用于提供给客户端远程连接,这个虚拟用户在/etc/passwd中不存在,这个是服务自带的,用于验证的
	rsync:是否往本地服务器写入客户端推送过来的数据,这个用户需要自己创建,再/etc/passwd中存在

[root@nfs ~]# telnet 172.16.1.41 873
Trying 172.16.1.41...
telnet: connect to address 172.16.1.41: Connection refused		#端口不可达

[root@nfs ~]# telnet 172.16.1.41 873
Trying 172.16.1.41...
telnet: connect to address 172.16.1.41: No route to host		#防火墙拦截

#当rsync服务端没有创建数据存放的目录时,则会出现如下提示
[root@nfs ~]# sh /server/scripts/client_push_data.sh 
@ERROR: chdir failed
rsync error: error starting client-server protocol (code 5) at main.c(1648) [sender=3.1.2]

2019/01/07 08:57:33 [1272] rsync: chdir /backup failed
: No such file or directory (2)

#用户密码不对,或权限不是600
[root@nfs ~]# sh /server/scripts/client_push_data.sh 
@ERROR: auth failed on module backup
rsync error: error starting client-server protocol (code 5) at main.c(1648) [sender=3.1.2]

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐