一、Rsync简介
1、什么是rsync
rsync,remote synchronization,
开源,高速的,可实现本地及远程,全量以及增量的数据复制工具。
官方链接:http://www.samba.org/ftp/rsync/rsync.html
官方手册:man rsync/man rsync.conf
2、rsync的作用
工作中需要数据备份,本地服务器目录,不同机器,不同机房之间的数据备份,都可用rsync完成。
3、rsync功能特性
Rsync的特性如下(7个特性信息说明):
·支持拷贝普通文件与特殊文件,如链接文件、设备文件等。
·支持排除指定文件或目录同步的功能,相当于打包命令tar的排除功能。
·可以做到保持原文件或目录的权限、时间、软硬链接、属主、组等所有属性均不改变。
·可实现增量复制,即只复制发生变化的数据,因此数据传输效率很高。
·可以使用rcp、rsh、SSH等方式来配合进行隧道加密传输文件(Rsync本身不对数据加密)。
·可以通过socket(进程方式)传输文件和数据(服务端和客户端)。
4、增量复制原理
quick check 算法,它仅复制大小或
只对增量的部分复制,根据大小属性的变化进行复制。
2.x对比差异后复制,3.x一边比对一边复制
5、rsync三种工作模式介绍
1)本地(local)
语法:rsync 参数 源目录或文件 目的目录或文件
rsync就是一个命令
a、把数据从一个地方拷贝到另外一个地方,相当于cp。
b、通过加参数可用实现删除功能,相当于rm。
c、查看属性信息功能,相当于ls。
实践:
#rsync /etc/hosts /opt/ #<==本地复制
-rw-r--r-- 1 root root 367 Mar 15 15:05 hosts
属性最后少一个点,因为#getenforce,是Disabled
#rsync -zrtopg /etc/hosts /opt/ #<==保持属性
#rsync -r --delete null.txt /opt/hosts #<==删除文件内容
#rsync -r --delete /null /opt/ opt #<==目录下的文件都删除
#rsync /etc/hosts #<== 查看属性
2)远程shell模式
借助类似ssh隧道传输数据,适合不同的机器之间复制。
异地拷贝,相当于scp。
pull 拉:从远程拉取到本地。
rsync 参数 [认证用户]@[主机地址]:[源路径] 本地路径
#rsync -avz root@172.16.1.31:/etc/hosts /opt/
push推:从本地退到远程
rsync 参数选项 本地地址 [认证用户]@[主机地址]:[目标路径]
#rsync -avz /etc/hosts root@172.16.1.41:/opt/ #<==推到远程1.41服务器,加密传输。
#rsync -avz /etc/hosts -e 'ssh -p 22' root@172.16.1.41:/opt/ #<==-p指定端口参数,-e指定隧道。
推拉:
a、参照物,执行命令的机器
强调一个重点:只适合rsync
null和null/区别:null是目录和目录下的内容,
null/只是目录下的内容,不含本身
3)rsync守护进程模式
首先要搭建rsync服务端(要有守护进程),然后才能在客户端实现推拉数据。重要模式。
客户端语法:见下文。
rsync服务模式:*****开启后台进程,接受别人访问。
6、rsync命令参数

-v 进度
-z 压缩
-a rtopgDl
-r 递归
-t 保持修改时间属性
-o 保持属主不变
-p 保持权限不变
-g 保持用户组不变
-l 保持拷贝软链接
常用:
-avz
-vzrtopg
二、应用实践
rsync守护进程模式应用实践
查看版本:#rsync --version
如果没有请安装:#yum install rsync
1、服务端配置:
1)配置文件ls /etc/rsyncd.conf
cp /etc/rsyncd.conf{,.ori}
cat >/etc/rsyncd.conf<<EOF
#rsync_config
uid = rsync #<==管理备份目录的用户
gid = rsync #<==管理备份目录的用户组
fake super = yes #<==CentOS7比CentOS6增加的参数。不用root用户也可以存储文件的完整属性。
use chroot = no #<==安全功能,数据是否锁定到备份目录
max connections = 200 #<==并发连接,同时多少客户端访问
timeout = 600 #<==超时时间。
pid file = /var/run/rsyncd.pid #<==进程号所在文件
lock file = /var/run/rsync.lock #<==锁文件
log file = /var/log/rsyncd.log #<==日志文件,可以查看报错等
ignore errors #<==忽略错误
read only = false #<==可写
list = false #<==不允许列表
hosts allow = 172.16.1.0/24 #<==哪些主机可以访问
hosts deny = 0.0.0.0/32 #<==拒绝哪些主机访问,和上条只选一条
auth users = rsync_backup #<==远程虚拟连接用户
secrets file = /etc/rsync.password #<==存放密码的文件:格式:用户名:密码,权限要求必须是600。
[backup] #<==模块标识
comment = welcome to oldboyedu backup!
path = /backup/ #<==服务端用于备份的目录,用户和组,rsync.rsync。
EOF
2)
#systemctl start rsyncd 启动服务
3)创建用户,分配权限
#useradd rsync
#id rsync
#chown -R rsync.rsync /backup/
4)查看状态
#systemctl start rsyncd
#systemctl status rsyncd 查看状态
#systemctl enable rsyncd
检查进程:#ps -ef|grep sync|grep -v grep
检查端口:#netstat -lntup|grep 873
#lsof -i :873
如何查看某端口对应什么服务?
5)配置密码文件/etc/rsync.passwd
#echo "rsync_backup:user" >/etc/rsync.password
#chmod 600 /etc/rsync.password 权限一定为600
6)服务端配置完成。
2、客户端配置:
方法1:认证文件
这个密码文件必须和rsyncd.conf一致
#echo "user" >/etc/rsync.password 和服务端稍微不同。
方法2:如果客户端配置环境变量,则备份时忽略参数--password-file
#echo 'export RSYNC_PASSWORD=user' >>/etc/bashrc
#echo $RSYNC_PASSWORD
#. /etc/bashrc 生效
rsync客户端配置完成。
3、复制备份操作
守护进程模式,客户端rsync语法
配置服务器端守护进程,实现数据传输
服务端守护进程。客户端执行。
pull 拉:从远程拉取到本地。
语法1:rsync 参数 [虚拟用户]@[主机地址]::[模块名] 本地路径
语法2:rsync 参数 rsync://[虚拟用户]@[主机地址]/[模块名] 本地路径
push推:从本地退到远程
语法1:rsync 参数 本地路径 [虚拟用户]@[主机地址]::[模块名]
语法2:rsync 参数 本地路径 rsync://[虚拟用户]@[主机地址]/[模块名]
在客户端测试:
#rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password




