rsync远程传输

# 同一个区域网下增量拷贝 -- rsync
rsync既是一个命令,又是一个服务,支持全量备份和增量备份,不支持差异备份,可以实时备份(inotyfi+rsync),也可以定时定点备份(cron + rsync)
监听端口: 873
rsync运行模式:C/S,客户端/服务端
系统 所有用户 都可以使用rsync的 作为客户端或者服务端
**服务端**:我们把备份的文件放在谁磁盘上,谁就是服务端,(客户端推,服务端拉)
备份文件的格式:2020-05-06_web01_etc.tar.gz
企业采用客户端 推 的方式减少服务端的负载,备份到服务器,#再隐藏到云服务器异地备份

-a	:
-v	:显示传输的过程
-z	:传输的时候使用gzip 压缩,传输完成立即 解压
-e 'ssh -p 80'	:指定传输的端口
--delete            #让目标目录和源目录数据保持一致,可以实现数据的清空
--password-file=xxx #使用密码文件(虚拟用户 bck:密码)
export RSYNC_PASSWORD=123   (export使命令行的密码立即生效 )

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

--------------------- 不包含 -------------------------
-L           #保留软连接指向的目标文件(默认只拷贝链接文件)
-e           #使用的信道协议,指定替代ssh的shell程序,'ssh -p 80'	:指定传输的端口

--exclude=PATTERN   #指定排除不需要传输的文件模式
--exclude-from=file #文件名所在的目录文件

--bwlimit=100       #限速传输(限制磁盘的I/O)
--partial           #断点续传

--delete            #让目标目录和源目录数据保持一致
--password-file=xxx #指定 密码文件

# rsync 的传输模式:
(/etc是指/etc目录,/etc/是指 /etc目录下所有文件或目录)

本地方式---------------------------------------------相当于cp命令
	## 拷贝文件
	[root@backup ~]# rsync /root/3 /usr/local/src/
	## 拷贝目录
	[root@backup ~]# rsync -a /etc /usr/local/src/

远程方式------------------------------相当于scp命令,存在普通用户权限不足的情况,存在ssh不安全的情况
	# 推:rsync [选项...] 本地文件或目录 用户名@主机IP:路径
	rsync -avz /etc root@10.0.0.41:/root   # 推 
	# 拉:rsync [选项...] 用户名@主机IP:路径 本地文件或目录
	rsync -avz root@10.0.0.41:/root /etc
	
	同步中科大镜像站,rsync rsync://rsync.mirrors.ustc.edu.cn/repo/ .
	
守护进程方式-------------------------------------------服务,#不存在普通用户权限不足的情况,不存在不安全的情况(使用22号端口), 守护进程方式只能客户端 推或拉
	推:rsrnc -avz 文件或目录 用户@IP或域名::模块
	拉:rsync -avz 用户@IP或域名::模块 文件或目录
    
	
	
#服务端(小心注释)-----------------------------------备份的文件放在哪,谁就是服务端
1.[root@web01 ~]# yum install -y rsync
[root@web01 ~]# rpm -q rsync
rsync-3.1.2-10.el7.x86_64				#包名,版本,发布次数,适用系统,架构
[root@web01 ~]# rpm -qc rsync
/etc/rsyncd.conf		#配置文件
/etc/sysconfig/rsyncd	#从配置文件
[root@web01 ~]# rpm -ql rsync
/etc/rsyncd.conf
/etc/sysconfig/rsyncd
/usr/bin/rsync			#启动程序存放路径,在环境变量里面,可以tab,可以不加绝对路径执行
/usr/lib/systemd/system/rsyncd.service		#可以使用systemctl来管理
/usr/lib/systemd/system/rsyncd.socket
[root@web01 ~]# cat /etc/passwd|grep rsync  #查看rsync用户身份是否存在
[root@web01 ~]# id rsync || echo 不存在
id: rsync: no such user


2.修改配置文件(一般来说是以.conf 或 .cnf 或 .cfg结尾),
[root@web01 ~]# vim /etc/rsyncd.conf  #先删除,再拷贝
#################################### 服务相关配置 ###########################
uid = www	
#指定rsync进程启动的用户(打工的)---------useradd
gid = www			
#指定rsync进程启动的组
port = 873			
#指定rsync使用的监听端口(默认873端口,可以改)
fake super = yes	 
#无需让rsync以root身份运行,允许接收文件的  完整属性(属主属组不变)
use chroot = no		 	
#禁锢指定的目录(只能推到指定的目录,不紧固的话随便推)
max connections = 200	
#最大连接数(同时连接的主机数,减少服务端负载)
timeout = 600			
#超时时间
ignore errors			
#忽略报错
read only = false		
#不只读(可读可写)
list = false						
#不允许别人查看模块名
#################################### 命令相关配置 ###########################
auth users = bck			 
#传输文件的用户(相当于密码,没有实际意义)---------
secrets file = /etc/rsync.passwd	  
#传输用户文件的密码文件------------vim或echo/600
log file = /var/log/rsyncd.log		  
#日志文件,使用了rsync之后才会生成

[backupmk]								
#模块名,可以随便改,小心大写字母,空格,数字,多模块对应多主机(随便推?)
comment = welcome to oldboyedu backup!	   
#注释(废物)
path = /backup							 
#备份的目录-------mkdir/权限属主属组


3.根据配置文件的内容,创建出来需要的用户,目录,密码文件
[root@web01 ~]# groupadd www -g 666
[root@web01 ~]# useradd www -u 666 -g 666 -s /sbin/nologin -M

[root@web01 ~]# mkdir /backup
[root@web01 ~]# ll /backup
drwxr-xr-x    2 root root    6 May  6 20:40 backup
[root@web01 ~]# chown www.www /backup/
[root@web01 ~]# ll /backup/ -d
drwxr-xr-x 2 www www 6 May  6 20:40 /backup/

[root@web01 ~]# vim /etc/rsync.passwd
backupmk:123
或
[root@web01 ~]# echo backupmk:123 >/etc/rsync.passwd     (虚拟用户名:密码,必须要做)
或
esport RSYNC_PASSWORD=123
#修改传输文件的密码文件的权限
[root@web01 ~]# chmod 600 /etc/rsync.passwd
[root@web01 ~]# ll -d /etc/rsync.passwd
-rw------- 1 root root 18 May  6 20:44 /etc/rsync.passwd

4.启动服务,并且加入开机自启
[root@web01 ~]# systemctl enable rsyncd
Created symlink from /etc/systemd/system/multi-user.target.wants/rsyncd.service to /usr/lib/systemd/system/rsyncd.service.
[root@web01 ~]# systemctl start rsyncd
[root@web01 ~]# systemctl status rsyncd
[root@web01 ~]# netstat -lntup|grep 873
tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN      1483/rsync          
tcp6       0      0 :::873                  :::*                    LISTEN      1483/rsync
[root@web01 ~]# ps -ef|grep rsync
root       1483      1  0 20:49 ?        00:00:00 /usr/bin/rsync --daemon --no-detach
root       1493   1117  0 20:51 pts/0    00:00:00 grep --color=auto rsync


#客户端 -------------------------------------------------
rsync客户端不需要修改配置文件,有的服务需要修改客户端配置文件

#方法一
1.安装rsync
[root@backup ~]# yum install -y rsync
2.客户端需要创建一个密码文件
[root@backup ~]# vim /etc/rsync.pass
123
或
[root@backup ~]# echo 123 > /etc/rsync.passwd

3.修改密码文件的权限为600
[root@backup ~]# chmod 600 /etc/rsync.pass   # 必须

[root@web01 ~]# systemctl enable rsyncd
[root@web01 ~]# systemctl start rsyncd
[root@web01 ~]# systemctl status rsyncd

4.从客户端往服务端推送重要备份文件
rsync [-avz] 源文件 bck@10.0.0.41::[模块]
rsync -avz /etc rsync_bck@10.0.0.41::backupmk --password-file=/etc/rsync.pass

# 方式二:脚本中使用,强烈推荐方式
[root@nfs01 ~]# export RSYNC_PASSWORD=zls

客户端 拉取Rsync服务端 backupmk 模块数据至本地客户端的 /123目录

[root@nfs01 ~]# export RSYNC_PASSWORD=123    # 临时,密码可以是字母,立即生效
[root@nfs01 ~]# vim /etc/profile.d/rsync.ps.sh  #永久,需要重新加载(bash)
 export RSYNC_PASSWORD=123 
 或
[root@nfs01 ~]# echo export RSYNC_PASSWORD=123 >/etc/profile.d/rsync.ps.sh  #bash
 
[root@nfs01 ~]# rsync -avz /etc rsync_backup@172.16.1.41::backup

Rsync实现数据 无差异 同步 (两边一样,有空目录就完了),可以利用 --delete 实现删除的目的

一定要看好 推拉的目标

推的时候,无论全量备份还是增量备份,是推一次同名覆盖一次

拉的时候,无论全量备份还是增量备份,是拉一次同名覆盖一次,除非拉到别的目录

#拉取远端数据:远端与本地保持一致,远端没有本地有会被删除, 造成客户端数据丢失
[root@nfs01 ~]# export RSYNC_PASSWORD=123
[root@nfs01 ~]# rsync -avz --delete bck@172.16.1.41::backupmk /data/

#推送数据至远端:本地与远端保持一致, 本地没有远端会被删除, 造成服务器端数据丢失
[root@nfs01 ~]# export RSYNC_PASSWORD=zls
[root@nfs01 ~]# rsync -avz --delete /data/ rsync_backup@172.16.1.41::backupmk 

# 如果推的目录是空目录的话,服务端也被清空了,如果客户端某个重要文件被误删除了,服务端里的相应的数据也被删除了

#企业差异备份和无差异备份可能混合使用
[root@nfs01 ~]# rsync -avz /data/ rsync_backup@172.16.1.41::backupmkbackupmk
[root@nfs01 ~]# rsync -avz --delete /data/ rsync_backup@172.16.1.41::backupmk

Rsync的Limit限速(限制磁盘吞吐量 I/O)

#企业案例: 某DBA使用rsync拉取备份数据时,由于文件过大导致内部交换机带宽被沾满,导致用户的请求无法响应
[root@nfs01 ~]# export RSYNC_PASSWORD=zls
[root@nfs01 ~]# rsync -avz --bwlimit=1 rsync_backup@172.16.1.41::backup/ /data/

rsync总结

服务端

1.安装rsync
[root@backup ~]# yum install -y rsync
2.修改配置文件
[root@backup ~]# vim /etc/rsyncd.conf 
3.创建www用户
[root@backup ~]# groupadd www -g 666
[root@backup ~]# useradd www -u 666 -g 666 -s /sbin/nologin -M
4.创建密码文件
[root@backup ~]# echo 'bck:123' > /etc/rsync.passwd
或 export RSYNC_PASSWD=123
5.给密码文件授权600,不让其他用户看到用户名和密码(选做)
[root@backup ~]# chmod 600 /etc/rsync.passwd
6.创建备份目录
[root@backup ~]# mkdir /backup
7.授权备份目录的属组和属组为www
[root@backup ~]# chown www.www /backup/
8.启动服务并加入开机自启
[root@backup ~]# systemctl start rsyncd
[root@backup ~]# systemctl enable rsyncd
9.检查端口
[root@backup ~]# netstat -lntup|grep 873
10.检查进程
[root@backup ~]# ps -ef|grep [r]sync

rsync客户端

# 安装rsync服务
[root@web01 ~]# yum install -y rsync

[root@web01 ~]# exprot RSYNC_PASSWD=123

# 设置开机自启动
[root@web01 ~]# systemctl enable rsyncd
Created symlink from /etc/systemd/system/multi-user.target.wants/rsyncd.service to /usr/lib/systemd/system/rsyncd.service.
[root@web01 ~]# systemctl start rsyncd
原文地址:https://www.cnblogs.com/syy1757528181/p/12852903.html