rsync: - a fast, versatile, remote (and local) file-copying tool
rsync:是一种快速,多功能,远程和本地文件拷贝的工具
rsync --version:查看rsync软件版本
备份服务重要性: 企业中全部要进行操做的数据文件,必定操做前备份。
企业备份数据方法:重要数据须要保存在专门备份服务器上 第三方网盘存储。
算法
全量:将主机A的数据所有传送给主机B
增量:将主机A新增的数据传送给主机B
数据库
方式一: 对源数据和目标目录中的数据进行比对属性信息
在同步备份数据时,默认状况下,Rsync经过其独特的“quick check”算法,它仅同步大小或者最后修改时间发生变化的文件或目录,固然也可根据权限,属主等属性的变化同步,但须要指定相应的参数,甚至能够实现只同步一个文件里有变化的内容部分,因此,能够实现快速的同步备份数据。
方式二: 利用文件指纹进行判断文件是否相同
md5运算生成校验数值信息(指纹信息)验证文件是否改变
将生成的md5值发送给目标主机,目标主机验证接收的md5值是否与本机文件所产生的md5相同,如何不相同。则进行传输。
安全
rsync便是软件也是命令。服务器
相似于 cp 命令 | 实现本地备份传输数据 | |
---|---|---|
相似于scp 命令 | 远程备份传输数据 | |
相似于 rm 命令 | 实现无差别同步备份 | |
相似于 ls 命令 | 本地文件信息查看 |
备份文件:rsync /etc/hosts /tmp 备份目录:rsync -a /aaa /tmp
scp:远程传输数据app
传输文件: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 将目录自己和目录下面的数据内容进行传输**
ssh
快速清空数据socket
mkdir null #建立一个空目录 rsync -avz --delete /null/ /test
注释:--delete 无差别同步参数 将两个目录中的数据保持高度一致。
能够理解为我(/null)有的东西,你也有。我(/null)没有的东西,你也不能有。null是个空目录,--delete保证了无差别同步,因此test目录的内容被清空。
tcp
查看文件:rsync /etc/hosts 查看目录:rsync /test
(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)支持匿名的或认证(无需系统用户)的进程模式传输,可实现方便安全的进行数据备份及镜像。
本地复制备份文件 == cp Local: rsync [OPTION...] SRC... [DEST] SRC:要备份的数据 Dest:要备份到什么路径中 语法:rsync /etc/hosts /tmp
推送,拉取都是在客户端操做
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目录
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)能够实现安全访问控制
文字说明:
(1)客户端:发送要传输数据的请求
rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
(2)服务端:接收到传输数据请求,进行用户认证操做。
服务端确认用户信息是否正确,确认客户端输入的用户 == 服务端配置文件里的用户
服务端确认用户密码是否正确,确认客户端输入的密码 == 服务端相应用户的密码信息
在进行用户认证时,须要判断两个文件的权限是不是600
(3)客户端:将数据传输到服务端,会转换传输的身份,将数据信息权限改动 rsync
(4)服务端:若是想让数据正确保存,修改备份目录属主属组为rsync.rsync
yum install -y rsync #安装rsync软件 rpm -qa rsync #查看rsync软件版本 rsync-3.1.2-4.el7.x86_64 #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或者将说明中#号注释的所有删掉。
id rsync #查看如下是否有rsync这个用户 useradd rsync -M -s /sbin/nologin #建立rsync虚拟用户
echo "rsync_backup:oldboy123" >/etc/rsync.password chmod 600 /etc/rsync.password #只能root用户才能查看密码
mkdir /backup chown rsync.rsync /backup
systemctl start rsyncd systemctl restart rsyncd systemctl enable rsyncd
rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup
执行命令后显示以下图,则证实服务端部署成功。在这里注意的是输入的密码是3.1.4步骤中的密码。
echo oldboy123 >/etc/rsync.password #将3.1.4步骤中的密码写入到rsync.password(可任意起名) chmod 600 /etc/rsync.password #修改权限只能root查看密码
rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup
rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
-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服务 |
环境条件:
人员 | 模块 | 模块对应备份目录 |
---|---|---|
开发人员 | 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/
环境准备:
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
rsync -avz /oldboy/ rsync_backup@172.16.1.41::backup/sa/ --password-file=/etc/rsync.password
ps:模块目录下建立目录是一级一级建立,不能一次性建立多级目录
hosts allow = 172.16.1.0/24 --- 容许172.16.1.0网段主机存储数据
hosts deny = 0.0.0.0/32 --- 阻止0.0.0.0地址主机存储数据
备份服务配置文件中:全局配置 局部配置
全局配置:在模块之上配置都是全局配置 能够影响全部模块
局部配置:在模块中的配置都是局部配置 能够影响指定模块
PS:局部配置优先于全局配置,白名单优先于黑名单
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"
--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
服务端端口号发生改变 --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
若是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端口 |
优势:实现增量备份数据 缺点:在同步大量小文件,容易形成数据丢失 (能够将目录进行压缩处理,而后进行同步) 在同步大文件数据,容易形成数据传输中断,断点续传功能不强。(能够用FTP进行同步)