1 rsync简介

1.1 什么是rsync

rsync: - a fast, versatile, remote (and local) file-copying tool
rsync:是一种快速,多功能,远程和本地文件拷贝的工具
rsync --version:查看rsync软件版本
备份服务重要性:  企业中所有要进行操作的数据文件,一定操作前备份。  
企业备份数据方法:重要数据需要保存在专门备份服务器上  第三方网盘存储。

1.2 rsync特点

可以实现全量和增量备份

1.2.1 全量和增量示意图

全量:将主机A的数据全部传送给主机B
增量:将主机A新增的数据传送给主机B

1.2.2 增量备份的原理

方式一: 对源数据和目标目录中的数据进行比对属性信息
在同步备份数据时,默认情况下,Rsync通过其独特的“quick check”算法,它仅同步大小或者最后修改时间发生变化的文件或目录,当然也可根据权限,属主等属性的变化同步,但需要指定相应的参数,甚至可以实现只同步一个文件里有变化的内容部分,所以,可以实现快速的同步备份数据。

方式二: 利用文件指纹进行判断文件是否相同
md5运算生成校验数值信息(指纹信息)验证文件是否改变

将生成的md5值发送给目标主机,目标主机验证接收的md5值是否与本机文件所产生的md5相同,如何不相同。则进行传输。

1.3 rsync软件功能介绍

rsync即是软件也是命令。

类似于 cp 命令 实现本地备份传输数据
类似于scp 命令 远程备份传输数据
类似于 rm 命令 实现无差异同步备份
类似于 ls 命令 本地文件信息查看

1.3.1 rsync=cp

备份文件:rsync /etc/hosts /tmp
备份目录:rsync -a /aaa /tmp

1.3.2 rsync=scp

scp:远程传输数据

传输文件:scp /etc/hosts root@172.16.1.41:/tmp
传输目录:scp -rp /aaa root@172.16.1.41:/tmp

rsync

备份文件:rsync  /etc/hosts root@172.16.1.41:/tmp
备份目录:rsync -rp /aaa root@172.16.1.41:/tmp

利用rsync传输目录数据
目录数据后面有/  /aaa/   将目录下面的数据内容进行传输
** 目录数据后面没/  /aaa    将目录本身和目录下面的数据内容进行传输**

1.3.3 rsync=rm

快速清空数据

mkdir null		#创建一个空目录
rsync -avz --delete /null/ /test

注释:--delete 无差异同步参数  将两个目录中的数据保持高度一致。
可以理解为我(/null)有的东西,你也有。我(/null)没有的东西,你也不能有。null是个空目录,--delete保证了无差异同步,所以test目录的内容被清空。

1.3.4 rsync=ls

查看文件:rsync /etc/hosts
查看目录:rsync /test

1.4 rsync的7个特性总结

(1)支持拷贝普通文件与特殊文件如链接文件,设备等。
(2)可以有排除指定文件或目录同步的功能,相当于打包命令tar的排除功能。
  #tar zcvf backup_1.tar.gz  /opt/data  -exclude=clsn  
        说明:在打包/opt/data时就排除了clsn命名的目录和文件。
(3)可以做到保持原文件或目录的权限、时间、软硬链接、属主、组等所有属性均不改变-p。
(4)可实现增量同步,既只同步发生变化的数据,因此数据传输效率很高(tar -N)。
    # 将备份/home 目录自 2008-01-29 以来修改过的文件
    # tar -N 2008-01-29 -zcvf /backups/inc-backup_$(date +%F).tar.gz /home
    # 将备份 /home 目录昨天以来修改过的文件
    # tar -N $(date -d yesterday "+%F") -zcvf /backups/inc-backup_$(date +%F).tar.gz /home
    # 添加文件到已经打包的文件
    # tar -rf all.tar *.gif
    说明:这条命令是将所有.gif的文件增加到all.tar的包里面去。-r是表示增加文件的意思。
(5)可以使用rcp,rsh,ssh等方式来配合进行隧道加密传输文件(rsync本身不对数据加密)
(6)可以通过socket(进程方式)传输文件和数据(服务端和客户端)*****。重点掌握
(7)支持匿名的或认证(无需系统用户)的进程模式传输,可实现方便安全的进行数据备份及镜像。

2 rsync命令使用方法

2.1 rsync的工作方式

2.1.1 本地数据备份(同步)方式

本地复制备份文件 == cp
Local: rsync [OPTION...] SRC... [DEST]
SRC:要备份的数据
Dest:要备份到什么路径中
语法:rsync /etc/hosts /tmp

2.1.2 远程数据备份(同步)方式

推送,拉取都是在客户端操作

Access via remote shell:远程数据备份文件
Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]====客户端将远程主机数据拉取到本地主机
Pull: 拉取
[USER@]: 指定以什么用户身份登录到远程主机(默认是当前系统用户)
HOST: 远程主机IP地址或者主机名称
SRC: 远程要拉取的数据信息
DEST: 保存到本地路径信息
语法:rsync root@10.0.0.41:/tmp/test.txt /aaa #将10.0.0.41主机的test.txt文件拉取到本地主机
Push: rsync [OPTION...] SRC... [USER@]HOST:DEST====客户端将本地主机数据推送到远端主机
[USER@]: 指定以什么用户身份登录到远程主机(默认是当前系统用户)
Push: 推送
HOST: 远程主机IP地址或者主机名称
SRC: 本地要推送的数据信息
DEST: 保存到远程路径信息
语法: rsync /etc/hosts root@172.16.1.41:/tmp #将hosts文件推送给10.0.0.41主机/tmp目录

2.1.3 守护进程方式备份(同步)数据

Access via rsync daemon====利用守护进程方式备份数据
Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
Push: 客户端验证rsync方式
(1)rsync [OPTION...] SRC... [USER@]HOST::DEST
src: 本地要推送的数据信息
[USER@] 认证用户名称信息
HOST: 备份服务器IP地址或者主机名称,host后面需要有两个冒号
DEST: 指定模块信息的名字backup
语法: rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup
(2)rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST #不常用,理解即可
PORT:端口是之前默认的可以不写,但如果改变要加上端口
DEST:备份的路径

守护进程方式作用:
(1)控制备份传输数据连接数
(2)可以实现免交互传输数据
(3)可以实现认证访问功能
(4)可以实现安全访问控制

2.1.4 守护进程方式备份数据原理


文字说明:
(1)客户端:发送要传输数据的请求
rsync -avz /etc/hosts  rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
(2)服务端:接收到传输数据请求,进行用户认证操作。
服务端确认用户信息是否正确,确认客户端输入的用户 == 服务端配置文件里的用户
服务端确认用户密码是否正确,确认客户端输入的密码 == 服务端相应用户的密码信息
在进行用户认证时,需要判断两个文件的权限是否是600
(3)客户端:将数据传输到服务端,会转换传输的身份,将数据信息权限改动 rsync  
(4)服务端:如果想让数据正确保存,修改备份目录属主属组为rsync.rsync

3 rsync服务部署

3.1 服务端部署

3.1.1 安装rsync

yum install -y rsync		#安装rsync软件
rpm -qa rsync #查看rsync软件版本
rsync-3.1.2-4.el7.x86_64 #3.1.2版本

3.1.2 编辑配置文件

vi /etc/rsyncd.conf

#rsync_config
#created by HQ at 2017
##rsyncd.conf start## uid = rsync #虚拟用户rsync,管理备份目录
gid = rsync #虚拟用户组rsync,管理备份目录
port = 873 #服务默认端口号873
fake super = yes #伪装管理员功能开启 便于可以执行chgrp命令
use chroot = no #安全配置
max connections = 200 #最大连接数 同时支持200个客户端连接
timeout = 300 #连接超时时间 单位:秒
pid file = /var/run/rsyncd.pid #进程信息文件,便于获取进程号停止进程,判断服务是否启动,避免反复启动
lock file = /var/run/rsync.lock #锁文件:在最大连接数达到200时,会进行限制连接操作
log file = /var/log/rsyncd.log #服务运行时日志文件
ignore errors #忽略传输过程中一些小的问题
read only = false #指定备份目录的权限为可读可写 false:假
list = false #改为true,客户端可以列表显示服务端模块详细信息
hosts allow = 172.16.1.0/24 #安全策略配置,设置一个白名单,只允许172.16.1这个网段进行访问
hosts deny = 0.0.0.0/32 #安全策略配置 设置一个黑名单,不允许哪个网段进行访问
auth users = rsync_backup #定义认证用户 rsync_backup为认证用户
secrets file = /etc/rsync.password #密码文件 用户密码信息 格式:rsync_backup:oldboy123
[backup] #模块的名称(可以任意起名)
comment = "backup dir by oldboy" #模块注释说明信息
path = /backup #备份的目录

以上为rsync配置文件的说明,如需配置请下载rsyncd.zip或者将说明中#号注释的全部删掉。

3.1.3 创建虚拟用户rsync

id rsync		#查看以下是否有rsync这个用户
useradd rsync -M -s /sbin/nologin #创建rsync虚拟用户

3.1.4 创建密码文件并修改访问权限为600

echo "rsync_backup:oldboy123" >/etc/rsync.password
chmod 600 /etc/rsync.password #只能root用户才能查看密码

3.1.5 创建备份目录/修改目录属主和属组信息

mkdir /backup
chown rsync.rsync /backup

3.1.6 启动服务程序/重启服务程序

systemctl start rsyncd
systemctl restart rsyncd
systemctl enable rsyncd

3.1.7 客户端备份存储测试

rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup

执行命令后显示如下图,则证明服务端部署成功。在这里注意的是输入的密码是3.1.4步骤中的密码。

3.2 客户端部署

3.2.1 创建密码文件 并修改权限

echo oldboy123 >/etc/rsync.password		#将3.1.4步骤中的密码写入到rsync.password(可任意起名)
chmod 600 /etc/rsync.password #修改权限只能root查看密码

3.2.2 交互式传输数据

rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup

3.2.3 免交互式传输数据

rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password

执行命令后显示如下图,则证明客户端部署成功。

4 rsync命令参数说明

-avz 常用参数
-a 属于一个归档参数,等于直接使用 -rlptgoD 的参数效果
-v 显示数据传输过程信息
-z 传输文件时,对文件进行压缩处理(提高传输效率 节省带宽)
-r 递归备份传输数据
-l 保持链接文件属性不变
-p 保持普通文件属性权限不变
-t 保持文件时间信息不被改变(mtime修改时间)
-g 保持文件属组信息不变
-o 保持文件属主信息不变
-D 保持设备文件属性信息不变
--delete 实现无差异同步参数 
让服务器目录中数据信息和备份目录中的数据信息保持高度一致
--exclude=PATTERN 指定排除不需要传输的文件信息
--exclude-from=file 文件名所在目录文件,即可以实现排除多个文件
--bwlimit=RATE 限速功能,单位为M
--daemon daemon表示以守护进程的方式启动rsync服务

5 企业备份服务应用

5.1 企业备份服务多模块配置

环境条件:

人员 模块 模块对应备份目录
开发人员 devop /devop
运维人员 sa /sa
数据库人员 dba /dba

第一步:修改配置文件
vi /etc/rsyncd.conf

[sa]
comment = "backup dir by sa"
path = /sa
[devop]
comment = "backup dir by devop"
path = /devop
[dba]
comment = "backup dir by dba"
path = /dba

第二步:创建并修改备份目录

mkdir /{sa,dev,dba} -p
chown rsync.rsync /{sa,dev,dba}
ll -d /{sa,dev,dba}
drwxr-xr-x 2 rsync rsync 6 Jul 15 16:24 /dba
drwxr-xr-x 6 rsync rsync 140 Jul 15 16:23 /dev
drwxr-xr-x 2 rsync rsync 6 Jul 15 16:24 /sa

补充扩展:如果统一将数据存储在一个目录中,如何进行区分不同数据是哪个用户存储的?又或者如何保持推送的数据属主属组不变?
要推送的数据:

[root@yang home]#ll 5.txt
-rw-r--r-- 1 oldgirl oldgirl 0 Jul 14 11:42 5.txt

修改配置文件:

uid = root
gid = root
#fake super = yes

修改备份目录权限

chown root.root /backup/

5.2 企业备份数据进行排除备份

环境准备:

mkdir /oldboy/{a..c} -p
touch /oldboy/{a..c}/oldboy{01..03}.txt
[root@yang oldboy]#tree
.
├── a
│   ├── oldboy01.txt
│   ├── oldboy02.txt
│   └── oldboy03.txt
├── b
│   ├── oldboy01.txt
│   ├── oldboy02.txt
│   └── oldboy03.txt
└── c
├── oldboy01.txt
├── oldboy02.txt
└── oldboy03.txt

参数:
--exclude:            排除指定单个数据信息
--exclude-from:    排除指定多个数据信息
要求1:备份/oldboy整个数据,排除b目录不要同步备份 排除c目录中oldboy03.txt文件不要备份

[root@yang /]#rsync -avz /oldboy/ --exclude=b --exclude=c/oldboy03.txt rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
sending incremental file list
./
a/
a/oldboy01.txt
a/oldboy02.txt
a/oldboy03.txt
c/
c/oldboy01.txt
c/oldboy02.txt sent 385 bytes received 134 bytes 1,038.00 bytes/sec
total size is 0 speedup is 0.00

PS:--exclude指定排除数据信息,目录结构必须是相对路径,相对于传输的目录而言

要求2:备份/oldboy整个数据,排除b目录中01.txt ,02.txt  c目录中 01.txt, 02 .txt
exclude-from=file        要创建一个文件

vi /oldboy/exclude.txt		#编辑exclude.txt
b/oldboy01.txt #写入要排除的
b/oldboy02.txt
c/oldboy01.txt
c/oldboy02.txt

执行命令:

[root@yang oldboy]#rsync -avz /oldboy/ --exclude-from=/oldboy/exclude.txt rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
sending incremental file list
./
exclude.txt
a/
a/oldboy01.txt
a/oldboy02.txt
a/oldboy03.txt
b/
b/oldboy03.txt
c/
c/oldboy03.txt sent 514 bytes received 161 bytes 1,350.00 bytes/sec
total size is 60 speedup is 0.09

5.3 企业备份服务创建多级模块目录

rsync -avz /oldboy/  rsync_backup@172.16.1.41::backup/sa/ --password-file=/etc/rsync.password

ps:模块目录下创建目录是一级一级创建,不能一次性创建多级目录

5.4 企业备份数据访问控制

hosts allow = 172.16.1.0/24   --- 允许172.16.1.0网段主机存储数据
hosts deny = 0.0.0.0/32         --- 阻止0.0.0.0地址主机存储数据

备份服务配置文件中:全局配置 局部配置
全局配置:在模块之上配置都是全局配置  可以影响所有模块  
局部配置:在模块中的配置都是局部配置  可以影响指定模块
PS:局部配置优先于全局配置,白名单优先于黑名单

5.5 企业备份数据模块列表功能

list = false   --- 如果改为true,客户端可以列表显示服务端详细模块信息
list=true

[root@backup ~]#rsync -avz rsync_backup@172.16.1.41::
backup "backup dir by oldboy"
sa "backup dir by sa"
devop "backup dir by devop"
dba "backup dir by dba"

5.6 企业应用无差异同步

--delete:保证客户端和服务端数据高度一致

清空数据目录:rsync -avz --delete /null/  172.16.1.41:/test	#null为空目录
清空数据文件:rsync -avz --delete /aaa.txt /test/test.txt #aaa.txt为空文件
rsync -avz --delete /aaa.txt 172.16.1.41:/bbb/bbb.txt

补充:传输大的文件,如何显示传输过程 (-P)

[root@yang ~]# rsync -avzP /tmp/500M rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
sending incremental file list
500M
524,288,000 100% 115.28MB/s 0:00:04 (xfr#1, to-chk=0/1) sent 509,967 bytes received 43 bytes 68,001.33 bytes/sec
total size is 524,288,000 speedup is 1,027.00

5.7 企业中rsync端口号发生改变

服务端端口号发生改变 --port 端口号

[root@yang ~]# rsync -avzP /tmp/500M rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password --port 874
sending incremental file list sent 47 bytes received 20 bytes 134.00 bytes/sec
total size is 524,288,000 speedup is 7,825,194.03

5.8 企业服务端配置文件保存路径不对

如果rsyncd.conf配置文件不在/etc目录下,而是在/tmp下,该如何启动rsync服务

[root@yang ~]# rsync --daemon --config=/tmp/rsync.conf
[root@yang ~]# netstat -lntup|grep rsync
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 9933/rsync
tcp6 0 0 :::873 :::* LISTEN 9933/rsync
[root@yang ~]# rsync --daemon --address=172.16.1.41
[root@yang ~]# netstat -lntup |grep 873
tcp 0 0 172.16.1.41:873 0.0.0.0:* LISTEN 2583/rsync

--daemond的参数

daemon启动扩展参数
--daemon daemon表示以守护进程的方式启动rsync服务。
--address 绑定指定IP地址提供服务。
--config=FILE 更改配置文件路径,而不是默认的/etc/rsyncd.conf
--port=PORT 更改其它端口提供服务,而不是已经改变的873端口

6 备份服务的优缺

优点:实现增量备份数据  
缺点:在同步大量小文件,容易造成数据丢失      (可以将目录进行压缩处理,然后进行同步)
         在同步大文件数据,容易造成数据传输中断,断点续传功能不强。(可以用FTP进行同步)

rsync 服务及部署的更多相关文章

  1. Rsync服务端部署流程

    Rsync服务端部署流程       Rsync服务端部署流程: 一.rsync服务端配置流程 配置rsync配置文件/etc/rsyncd.conf 创建同步的本地目录/dingjian 并根据需要 ...

  2. rsync 服务快速部署手册

    一.rsync服务端安装 1.查看rsync安装包 # rpm -qa rsync rsync-3.0.6-12.el6.x86_64 2.安装rsync 系统默认都会安装rsync软件包的,如果查看 ...

  3. Rsync服务部署使用

    rsync服务搭建过程(daemon模式) 配置服务 在/etc/rsyncd.conf文件中写入相应的配置: uid = root gid = root use chroot = no max co ...

  4. CentOS7下部署rsync服务

    说明: 在CentOS7下部署rsync服务和在CentOS6上部署基本上是一样的,只是CentOS7自带了rsyncd启动脚本,由systemd管理而已. rsync服务端配置 [root@SERV ...

  5. rsync 服务部署详解

    第1章 rsync 软件介绍 1.1 什么是rsync rsync 是一款开源的.快速的.多功能的.可实现全量及增量的本地或远程数据同步备份的优秀工具. http://www.samba.org/ft ...

  6. Rsync 服务部署与参数详解

    Rsync 简介 rsync 是一款开源的.快速的.多功能的.可实现全量及增量的本地或远程数据同步备份的优秀工具.Rsync软件适用于unix/linux/windows等多种操作系统平台. 传统的 ...

  7. Rsync服务

    第1章 Rsync开篇介绍 1.1 rsync的定义 Rsync是一款开源的.快速的.多功能的.可实现全量及增量的本地或远程数据同步备份的优秀工具.Rsync软件适用于unix/linux/windo ...

  8. Rsync服务实战

    目录 1 安装rsync软件 2 配置 /etc/rsyncd.conf 3 创建用户(运行rsync服务的用户身份) 4 创建虚拟用户密码文件(客户端连接时候使用) 5启动 rsync 服务,并加入 ...

  9. CentOS7 Rsync服务搭建-Rsync+Inotify架构实现实时同步

    一.rsync 概念 1.rsyncrsync是类unix/linux系统下的数据镜像备份工具.使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他SSH.rsync主机同 ...

随机推荐

  1. 通过bat文件 进行mysql 连接 或者 操作涉及 密码的,如果密码 中有 % 号的话要特殊处理

    比如我想在bat文件中进行一个数据库的连接 或者进行一个数据库中的 数据 导入或者导出(mysqldump) 这样子都会用到数据库密码, 假如这个数据库的密码 中又有 % 的话就要特殊转义一下才行执行 ...

  2. 如何假装黑客,使用python去批量破解朋友的网站密码

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取http ...

  3. 8. input限制手机输入

    1. 只能输入数字: <input id="num" type="number" value="0" onkeyup="va ...

  4. 1. webpack 复制文件

    1. npm install --save-dev copy-webpack-plugin2. var CopyWebpackPlugin = require('copy-webpack-plugin ...

  5. beanshell 常用的内置变量与函数

    官方详细文档:https://github.com/beanshell/beanshell/wiki log:用来记录日志文件 log.info("jmeter"); vars - ...

  6. 使用mysqlbinlog查看二进制日志

    (一)mysqlbinlog工具介绍 binlog类型是二进制的,也就意味着我们没法直接打开看,MySQL提供了mysqlbinlog来查看二进制日志,该工具类似于Oracle的logminer.my ...

  7. js上传文件前判断获取文件大小并且加以判断

    描述:要求浏览器单个上传文件大小不超过10M. 解决方案: var fileSize = $("#fileId")[0].files[0].size/(1024*1024);if( ...

  8. 【Linux常见命令】touch命令

    touch - change file timestamps touch [文件名] 就是“摸”一下文件,如果文件不存在,就建立新文件:如果文件存在,就改变文件的访问时间atime等时间戳信息. 语法 ...

  9. Python爬虫,抓取淘宝商品评论内容!

    作为一个资深吃货,网购各种零食是很频繁的,但是能否在浩瀚的商品库中找到合适的东西,就只能参考评论了!今天给大家分享用python做个抓取淘宝商品评论的小爬虫! 思路 我们就拿"德州扒鸡&qu ...

  10. 批量将制定文件夹下的全部Excel文件导入微软SQL数据库

    以下代码将c:\cs\文件夹下的全部Excle中数据导入到SQL数据库 declare @query vARCHAR(1000) declare @max1 int declare @count1 i ...