文章目录
前言
- 实验目的: rsync可以在不同主机之间进行远程同步,可实现全量备份与增量备份。
- 实验准备: 两台主机,一台是rsync服务端,一台是rsync客户端,这里使用内网IP
主机 | 外网IP(nat) | 内网IP(lan) |
---|---|---|
rsync客户端 | 10.0.0. 200 | 172.16.1.200 |
rsync服务端 | 10.0.0.201 | 172.16.1.201 |
- 实现方式: 下面演示的是守护进程的数据传输方式,因为比较安全。
rsync数据传输方式 | 通俗理解 |
---|---|
本地传输 | 类似于使用cp命令 |
远程传输 | 通过网络传输 a–>b |
守护进程 | 运行一个服务一直在后台 |
1. rsync服务端配置
- 安装rsync:
yum -y install rsync
- 修改配置文件:
vim /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]
path = /backup
- 给虚拟用户创建密码文件, 并修改目录的权限。这个对应配置文件--> secrets file = /etc/rsync.passwd
echo "rsync_backup:123456" > /etc/rsync.passwd
chmod 600 /etc/rsync.passwd
- 创建对应配置文件中uid=rsync的用户,创建[backup]模块下存储的目录/backup,并设置目录的所有者为rsync。
useradd rsync -M -s /sbin/nologin
mkdir /backup
chown -R rsync.rsync /backup/
- 启动rsync服务并加入开机自启动,检查rsync的873端口是否存在
systemctl start rsyncd.service 启动服务
systemctl enable rsyncd 开机自启
netstat -lntp
(或者systemctl status rsyncd
)
2. rsync客户端配置
安装rsync: yum -y install rsync
3. 开始实验
本地传输和远程传输用的不多,重点学习的是守护进程的方式进行数据同步配置,rsync服务端的配置就是使用守护进程的方式做准备。
3.1 本地传输
在rsync客户端进行实验
- 把当前目录下的test.txt文,备份到/opt目录下
rsync -avz ./test.txt /opt/
3.2 远程传输
-
将本地的/etc/passwd文件,推送到172.16.1.201服务器的/tmp目录下,使用的是201的root用户身份
rsync -avz /etc/passwd root@172.16.1.201:/tmp
-
本地客户端下载172.16.1.201服务器/etc/services这个文件,至本地当前目录下,使用的是201的系统用户root身份
rsync -avz root@172.16.1.201:/etc/services ./
-
Rsync借助SSH协议同步数据存在的缺陷(临时发送数据)
- 使用系统用户(不安全)
- 使用普通用户(会导致权限不足情况)
3.3 守护进程
3.3.1 客户端上传下载文件
客户端推送(上传文件)
- 推送/etc这个目录
rsync -avz /etc rsync_backup@172.16.1.41::backup
- #推送/etc/下面的内容
rsync -avz /etc/ rsync_backup@172.16.1.41::backup
客户端拉取(下载文件)
- 拉取服务端172.16.1.41的backup目录下面的所有内容至本地的 /opt目录
rsync -avz rsync_backup@172.16.1.41::backup /opt
3.3.2 客户端与服务端无差异同步
--delete
实现无差异同步
- 推送方式实现无差异,以客户端为准,客户端有什么服务端就有什么
rsync -avz --delete /root rsync_backup@172.16.1.201::backup
- 拉取方式实现无差异,以服务端为准,服务端有什么客户端就有什么
rsync -avz --delete rsync_backup@172.16.1.201::backup /opt/
3.3.3 对传输进行限速
--bwlimit
实现限速
- 生成大文件
dd if=/dev/zero of=./size.disk bs=1M count=500
- 上传文件的速度限制为1M
rsync -avzP --bwlimit=1 ./size.disk rsync_backup@172.16.1.41::backup
3.3.4 免密连接
取消每次连接时输入密码,有两种方法。
免密登录:告诉客户端,文件从哪里找
- 在客户端创建一个密码文件/etc/rsync.pass,在里面输入密码。
echo "123456" > /etc/rsync.pass
chmod 600 /etc/rsync.pass
rsync -avz /opt/ rsync_backup@172.16.1.201::backup --password-file=/etc/rsync.pass
- 写Shell脚本,将下面的两个语句写入脚本中,执行脚本就可以了。
export RSYNC_PASSWORD=123456
rsync -avz /opt/ rsync_backup@172.16.1.41::backup
3.3.5 选项参数的作用
-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 #让目标目录和源目录数据保持一致 ----常用
4. 小总结
- 这个实验的难点就是要分清rsync_backup和rsync用户各自的作用是什么,因为这个实验基本上都是围绕他两个在进行,这个搞清楚了,这个实验就非常简单了。
- rsync_backup:客户端通过该虚拟用户连接rsync服务,是一个虚拟用户,由服务端的配置文件中定义【auth users】,通常存放在指定的一个文件中,该文件也是有服务端配置文件定义【secrets file】。 rsync_backup:用于提供给客户端远程连接
- rsync:【模块对应的目录,必须授权为配置文件中定义的uid和gid的用户】
用于运行rsync服务时需要使用到的系统用户,rsync这个普通用户是运行rsync进程的,用于将接收到的数据以自己的身份写入到对应的目录中。 rsync:是否往本地服务器写入客户端推送过来的数据
详细过程:
- 总之在连接之前由两个重要的步骤,是前提条件:
(1)为虚拟用户rsync_backup创建了密码文件,文件的权限是600
(2) 创建rsync系统用户,并把backup模块下的目录授权给rsync用户(所有者、所属组),