3.部署rsync

rsync介绍

rsync具有可使本地和远程两台主机之间的数据快速复制同步镜像、远程备份的功能,这个功能类似于ssh带的scp命令,但是又优于scp命令的功能,scp每次都是全量拷贝,而rsync可以增量拷贝。当然,rsync还可以在本地主机的不同分区或目录之间全量及曾量的复制数据,这又类似cp命令。但是同样也优于cp命令,cp每次都是全量拷贝,而rsync可以增量拷贝。

SCP的使用

## 远程copy,scp
scp 源文件 目标

# 推文件
scp /tmp/yum.log root@10.0.0.41:/root
# 推目录
scp -r /etc root@10.0.0.41:/root

# 拉文件
scp root@10.0.0.41:/root /tmp/yum.log
# 拉目录
scp -r root@10.0.0.41:/root /etc 

# 一些服务的端口号
ssh:22
ftp:21
rsync:873

C/S 架构:
Client/Server

B/S
Browser/Server

端口的范围:1-65535

rsync备份类型

  • 全量备份(支持)

  • 增量备份(支持)

  • 差异备份(不支持差异备份)

    image-20200507183815866

Rsync的传输模式

  • 本地传输模式(跟命令cp一样)
# 语法
Local:  rsync [OPTION...] SRC... [DEST]
## 拷贝文件
[root@backup ~]# rsync /root/3 /usr/local/src/
## 拷贝目录
[root@backup ~]# rsync -a /etc /usr/local/src/
  • 远程传输模式(跟命令scp一样)这种模式是借助SSH的通道进行传输(ssh端口),SSH端口改变会报错
## Access via remote shell:
	Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
	# 拉:rsync [选项...] 用户名@主机IP:路径 本地文件或目录
	[root@backup ~]# rsync -avz root@172.16.1.7:/etc/hostname /usr/local/games/
	
	Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
	# 推:rsync [选项...] 本地文件或目录 用户名@主机IP:路径
	[root@backup ~]# rsync -avz /backup/2020-05-06_web01_etc.tar.gz root@10.0.0.7:/tmp/
	
	# 注意 
	当推或者拉文件时如果没有写用户,则传输过去的文件权限就是这个用户的权限

远程传输方式用户需要注意,如果传输时不是root用户,其他用户则会报错,权限不足

# 权限不足报错
rsync: mkstemp "/root/.host_ip.sh.nrcrr0" failed: Permission denied (13)
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1179) [sender=3.1.2]
  • 守护进程模式(服务)
## 语法:
## Access via rsync daemon:
	Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
	# 拉:rsync [-avz] zls_bak@10.0.0.41::[模块] 源文件 目标
          rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST](忘记它)
         
	Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
	# 推:rsync [-avz] 源文件 zls_bak@10.0.0.41::[模块] 目标
          rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST(忘记它)
          
     注意:推和拉的区别,就是源文件的位置在哪里,拉:源文件在后面。


## rsync 重要选项 常用
-a           #归档模式传输, 等于-tropgDl
-v           #详细模式输出, 打印速率, 文件数量等
-z           #传输时进行压缩以提高效率
--delete     #让目标目录和源目录数据保持一致
--password-file=xxx #使用密码文件

------------------- -a 包含 ------------------
-r           #递归传输目录及子目录,即目录下得所有目录都同样传输。
-t           #保持文件时间信息
-o           #保持文件属主信息
-p           #保持文件权限
-g           #保持文件属组信息
-l           #保留软连接
-D           #保持设备文件信息
----------------------------------------------

-L           #保留软连接指向的目标文件
-e           #使用的信道协议,指定替代rsh的shell程序
--exclude=PATTERN   #指定排除不需要传输的文件模式
--exclude-from=file #文件名所在的目录文件

环境准备

角色 外网IP(WAN) 内网IP(LAN) 主机名
WEB eth0:10.0.0.7 eth1:172.16.1.7 web01
NFS eth0:10.0.0.31 eth1:172.16.1.31 nfs01
Rsync eth0:10.0.0.41 eth1:172.16.1.41 backup

服务端:我们把备份的文件放在谁磁盘上,谁就是服务端 ,服务端可以写几个不同的模块

# 1.安装rsync服务
[root@backup ~]# yum install -y rsync

# 2.修改配置文件
[root@backup ~]# vim /etc/rsyncd.conf
# 指定启动rsync服务的用户id
uid = rsync
# 指定启动rsync服务的用户组id
gid = rsync
# 指定rsync服务启动的端口
port = 873
# 假装是root
fake super = yes
# 禁锢path目录
use chroot = no
# 最大连接数是200
max connections = 200
# 超时时间是600s
timeout = 600
# 忽略错误
ignore errors
# 可读可写
read only = false
# 其它客户端用户不允许查看模块名
list = false
# rsync服务的日志所在路径
log file = /var/log/rsyncd.log

########### 命令相关配置 #############
auth users = jkz_bak
secrets file = /etc/rsync_pass
[jkz]                                                   [zls]  
comment = welcome to oldboyedu backup!         comment = 1232131  随便写
path = /backup                                 path = /opt
# 3.创建rsync用户,不允许登入,不创建家目录
[root@backup ~]# useradd rsync -s /sbin/nologin -M

# 4.创建虚拟账号和密码文件
[root@backup ~]# echo 'jkz_bak:123' > /etc/rsync_pass

# 5.设置密码文件为600
[root@backup ~]# chmod 600 /etc/rsync_pass

# 6.创建rsync的备份目录
[root@backup ~]# mkdir /backup

# 7.给目录的属主和属组改为rnync
[root@backup ~]# chown rsync.rsync /backup/

# 8.启动和开机自启rsync服务
[root@backup ~]# systemctl start rsyncd
[root@backup ~]# systemctl enable rsyncd

# 9.检查端口和进程
[root@backup ~]# netstat -lntup |grep 873
[root@backup ~]# ps -ef | grep [r]sync

部署客户端

rsync客户端不用修改配置文件

方法一 比较麻烦 ,使用的模块 [jkz]
# 1.安装rsync
[root@web01 ~]# yum install -y rsync

# 2.客户端需要创建一个密码文件           
[root@web01 ~]# vim /etc/rsync.pass  
123                                   
# 3.修改密码文件的权限为600       
[root@web01 ~]# chmod 600 /etc/rsync.pass  
                                             
# 4.从客户端往服务端推送重要备份文件
rsync [-avz] 源文件 jkz_bak@10.0.0.41::[模块]
[root@web01 ~]# rsync -avz /etc/shadow jkz_bak@10.0.0.41::jkz --password-file=/etc/rsync.pass

方法二 写脚本常用 ,使用的模块 [zls]
[root@web01 ~]# export RSYNC_PASSWORD=123    临时生效,写入换进变量就能永久生效
# 写完就可以直接传输,不需要创建密码文件
[root@web01 ~]# rsync -avz /etc/shadow zls_bak@10.0.0.41::zls

rsync的特别的参数

# 指定排除不需要传输的文件模式   --exclude=PATTERN
rsync -avz /etc/shadow zls_bak@10.0.0.41::zls --exclude=指定的文件
# 文件名所在的目录文件
--exclude-from=file
#限速传输   --bwlimit=100(默认单位为M)
rsync -avz /etc/shadow zls_bak@10.0.0.41::zls --exclude=100
#断点续传
 --partial  
#让目标目录和源目录数据保持一致,当源目录有文件被删除增加时,目标文件也被删除增加
--delete

接下来今天学的实战环境,笔记截图都在作业里面。。有定时备份脚本文件和检测备份脚本文件。

posted @ 2020-06-01 23:32  柯正  阅读(239)  评论(0)    收藏  举报