如何使用RSYNC搭建备份服务器
1. RSYNC介绍
RSYNC是一款开源的,快速的,多功能的,可实现全量及增量的本地或远程数据同步备份的优秀工具。Rsync软件适用于unix/linux/windows等多种操作系统平台。
远程数据备份工具,可以实现全备份及增量备份,也可以本地备份。
英文全称是Remote synchronization.
具有以下三种功能:
- 远程copy的功能:相当于ssh自带的scp命令,但是又优于scp命令,scp每次都是全量拷贝。rsync高在增量拷贝,scp每次都是全量copy。
- 本地copy功能:相当于是cp命令,但是又优于cp命令,因为cp每次都是全量copy。
- rsync还可以实现删除功能:相当于rm命令。
CentOS5.X中自带的rsync版本都是2.6.x的版本,该版本存在的问题主要是性能方面的,比如,同步大量小文件时容易出现内存溢出或同步中断等现象,这主要与其2.6版本采用先列文件列表,再进行同步的处理机制有关,在处理大文件同步时也市场发生同步文件不完整的现象.不过在CentOS6.x系列rsync版本都进行了升级,本篇文章使用的linux系统是CentOS6.7, 自带的rsync的版本是3.0.6.
2. RSYNC的特性
下面的特性是从rsync官方网站上抄录的:
- support for copying links, devices, owners, groups, and permissions
支持拷贝链接,设备,用户,用户组和属性权限。 - exclude and exclude-from options similar to GNU tar
支持像tar一样排除(或者从文件中排除)备份文件的特性 - a CVS exclude mode for ignoring the same files that CVS would ignore
支持CVS排除文件模式 - can use any transparent remote shell, including ssh or rsh
支持远程shell(ssh,rsh等)数据传输 - does not require super-user privileges
不需要超级用户的权限 - pipelining of file transfers to minimize latency costs
rsync3.x版本以后是一边比较文件一边进行传输,减少了文件传输的延迟 - support for anonymous or authenticated rsync daemons (ideal for mirroring)
支持匿名或需要验证的rsync守护进程模式
3. 使用的工作场景
把所有客户数据数据同步到备份服务器(可以配合定时任务,实现每天定时备份)

实时同步(解决存储服务器的单点故障问题),rsync结合inotify的功能做实时数据同步。

4. RSYNC的工作方式
Rsync大致使用三种主要的传输数据的方式:
- 单个主机本地之间的数据传输(此时类似于cp命令的功能)[本地传输模式]
- 借助rcp,ssh等通道来传输数据(此时类似于scp命令的功能)[远程shell传输模式]
- 以守护进程(socket)的方式传输数据(这个是rsync自身的重要的功能)[守护进程模式]
官方介绍:
1. Local: rsync [OPTION...] SRC... [DEST]
2. Access via remote shell:
Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
3. Access via rsync daemon:
Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
以上这些就是关于rsync的一些基本理论介绍。看着比较枯燥,下面开始实战之旅:
5. 实战环境介绍
众所周知,linux有不同的发行商,内核也有不同的版本,下面是本篇文章的实验版本:
[root@backup ~]# cat /etc/redhat-release
CentOS release 6.7 (Final)
[root@backup ~]# uname -a
Linux backup 2.6.32-573.26.1.el6.x86_64 #1 SMP Wed May 4 00:57:44 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
[root@backup ~]#
Rsync的版本:
[root@backup ~]# rsync --version
rsync version 3.0.6 protocol version 30
首先确认Rsync是否已经安装:
[root@backup ~]# rpm -qa rsync
rsync-3.0.6-12.el6.x86_64
[root@backup ~]#
出现了这个信息说明已经安装,如果系统上没有安装rsync可以使用下面的命令进行安装:
yum install rsync -y
6. 实战之本地传输模式
本地传输模式实现的是本地同步功能,相当于是cp,rm等命令,说的简单一点就是在同一台机器上把数据从一个地方拷贝到另一个地方或者删除数据,rsync比cp命令高级的地方在于,rsync拷贝时使用的是增量拷贝,即只会把不同的内容拷贝过去,这样就大大提升了性能。
语法格式
rsync [OPTION...] SRC... [DEST]
语法说明:
1. rsync为同步的命令
2. [option]为同步时需要的参数
3. SRC为源,即待拷贝的分区,文件或目录
4. [DEST]为目的分区,文件或目录
示例:
本地拷贝命令
[root@backup ~]# cp /etc/hosts /tmp #使用cp命令拷贝文件
[root@backup ~]# rsync /etc/hosts /opt #使用rsync命令拷贝文件
[root@backup ~]# ls /opt/hosts
/opt/hosts
[root@backup ~]# 本地删除命令:(这个功能比较危险,一般不建议用)
[root@backup ~]# mkdir /null -p #创建一个不包含任何文件的空目录,名称随意
[root@backup ~]# ls /tmp/
a.txt hosts today_backup_file.txt
[root@backup ~]# rsync -avz --delete /null/ /tmp #然后把这个空目录拷贝到要删除的目录,加--delete参数就实现了rsync的删除功能, 这里需要注意/null/这个目录后面一定要加/,不能写成/null这样,写成这样的话,就会把/null这个目录(包含目录名)拷贝到/tmp目录下,就实现不了删除的功能了。
sending incremental file list
./
deleting .ICE-unix/
deleting today_backup_file.txt
deleting hosts
deleting a.txt
deleting .pwd.lock sent 29 bytes received 15 bytes 88.00 bytes/sec
total size is 0 speedup is 0.00
[root@backup ~]#
重要参数介绍
-r --recursive 递归模式,子目录下的所有目录都同样传输
-t --times 保持文件时间信息
-o --owner 保持文件属主信息
-p –perms 保持文件权限
-g --group保持文件属性
-P --progress 显示同步的过程及传输时的进度等信息
-D --devices 保持设备文件信息
-l --links 保留软连接
-e --rsh=command 使用的通道协议,指定替代rsh的shell程序,例如ssh等
--exclude=PATTERN 指定排除不需要传输的文件模式
--exclude-from=file (文件名所在的目录文件)
--bwlimit=RATE 限制传输的速度
更多参数,请参照:
http://www.samba.org/ftp/rsync/rsync.html
三个常用参数:
-v –verbose 详细输出模式,传输时的进度等信息
-z –compress 传输时进行压缩以提高传输效率, --compress-level=NUM可按级别压缩
-a --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rtopgDl
7. 通过远程shell进行数据传输(remote shell mode)
用于两台机器之间数据的传输,比如把重要数据备份到服务器。这个模式相当于是scp命令实现的功能,不过rsync还是可以实现增量的拷贝,而且支持目录的拷贝,这个是比rsync好用的地方。
通过远程shell(rcp,ssh等)传输可以分为两种情况,其语法分别为:
拉: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
推: rsync [OPTION...] SRC... [USER@]HOST:DEST
语法说明:
1. rsync 为同步的命令
2. [OPTION...]为同步时的参数选项
3. [USER@]HOST:SRC...为同步的远程的链接用户和主机地址
4. SRC为源,即待copy的分区,文件或目录等,和HOST之间用一个冒号连接
5. [DEST]为目的分区,文件或目录等
拉取表示从远端主机把数据同步到执行命令的本地主机相应的目录;
推送表示从本地主机执行命令把本地的数据同步到远端主机指定目录下。
拉取的语法示例:
rsync -avz -e 'ssh -p 22' root@172.16.1.41:/opt/ /tmp/
推送的语法示例:
rsync -avz -e 'ssh -p 22' /etc/ root@172.16.1.41:/tmp/
特别提示:
注意一下两个命令的区别:
rsync –avz /opt/ /tmp/
rsync -avz /opt /tmp/
/opt/表示推送或拉取/opt目录下的内容,/opt表示推送或拉取/opt目录及其里面的内容。
8. 实战之使用RSYNC守护进程模式(重点)
可以说,前面讲的都是铺垫,这个才是重中之重。
工作原理:

RSYNC守护进程模式,包含服务器以及客户机,服务器上启动rsync的守护进程,客户机配置对应的用户名和密码,实现客户机到服务器的备份功能。RSYNC守护进程启动的机器就是我们文章标题所说的备份服务器。 其他的机器作为客户端,向这台机器推送数据,或从这台机器上拉取数据。
在本篇文章的实战中服务器端的host那么是backup,所以我们简称这台服务器为backup, 客户机端的hostname是nsf01,同理,我们简称这台客户机为nfs01.
8.1 服务器端(bakup机器)配置
a. 首先确认软件是否安装:
[root@backup ~]# rpm -aq rsync
rsync-3.0.6-12.el6.x86_64
[root@backup ~]#
b. 创建用户
[root@backup ~]# useradd rsync -s /sbin/nologin -M #这个是rsync进程使用的用户
[root@backup ~]# id rsync
uid=501(rsync) gid=501(rsync) 组=501(rsync)
[root@backup ~]#
客户端连到服务器用rsync用户访问权限访问数据
c. 创建服务器端的配置文件(rsyncd.conf)
#rsync_config_______________start
#created by grewan 07::23 2016-05-28
#Email:wangqj541@163.com blog: http://www.cnblogs.com/greta/
##rsyncd.conf start##
uid = rsync
gid = rsync
use chroot = no
max connections = 200
timeout = 300
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log #这个是rsync的log文件,比较有用
[backup]
path = /backup/
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
#rsync_config_______________end
配置文件说明:
| 参数 | 说明 |
|---|---|
| uid=rsync | rsync使用的用户ID。缺省uid为-2,通常为nobody |
| gid=rsync | rsync使用的组(用户所在的组)。缺省gid为-2,通常为nobody |
| use chroot=no | 如果为true,daemon会在给客户端传输文件前“chroot to the path”。这是rsync安全的一个配置,因为我们大多数都是在内网使用rsync,所以不用配置也可以 |
| max connections=200 | 设置最大连接数,默认为0,意思为无限制,负值为关闭这个模块 |
| timeout=300 | 默认为0,意思为no timeout,建议为300-500(s) |
| pid file=/var/run/rsyncd.pid | rsync daemon启动后将其进程PID写入此文件。如果这个文件已经存在,rsync进程不会覆盖该文件,而是会终止 |
| lock file=/var/run/rysncd.lock | 指定loc文件用来支撑max connections的参数,使得总连接数不会超过限制,默认为/var/run/rsyncd.lock |
| log file = /var/log/rsyncd.log | rsync的日志文件 |
| ignore errors | 忽略IO错误 |
| read only = false | 指定客户端是否可以上传文件,默认对所有模块都为true |
| list = false | 是否允许客户端可以查看可用模块列表(类似ls),默认为true |
| hosts allow = 172.16.1.0/24 | 指定可以联系的客户端主机名或者ip地址或者地址段,默认情况没有此参数,即都可以连接 |
| hosts deny = 0.0.0.0/32 | 指定不可联系的客户端主机名或IP地址或地址段,禁止他们连接。默认情况没有此参数,即都可以连接 |
| auth users = rsync_backup | 指定以空格或逗号分隔的用户可以使用哪些模块,用户不需要在本地系统中存在,默认所有用户无密码的访问 |
| secrets file = /etc/rsync.password | 指定用户名和密码存放的文件。格式:用户名:密码, 密码不超过8位 |
| [backup] | 模块名称,需要用中括号括起来,起名没有特殊要求,但最好是有意义的名称,便于以后维护 |
| path = /backup/ | 在这个模块中,daemon使用的文件系统或目录,目录的权限要注意和配置文件中的权限一致,否则会遇到读写问题。 |
d. 创建备份目录
[root@backup ~]# mkdir /backup
[root@backup ~]# chown -R rsync.rsync /backup/ #一定记得修改文件的用户和用户组
[root@backup ~]# ls -ld /backup/
drwxr-xr-x 2 rsync rsync 4096 5月 22 15:05 /backup/
[root@backup ~]#
e. 创建密码文件(根据配置文件生生成)
[root@backup ~]# echo "rsync_backup:grewan" > /etc/rsync.password
[root@backup ~]# chmod 600 /etc/rsync.password
f. 启动服务
[root@backup ~]# rsync --daemon
[root@backup ~]# lsof -i :873 #rsync的端口是873, 使用这个命令检查rsync服务是否启动成功
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rsync 3894 root 4u IPv4 15807 0t0 TCP *:rsync (LISTEN)
rsync 3894 root 5u IPv6 15808 0t0 TCP *:rsync (LISTEN)
更多信息参考:[root@backup ~]# man rsyncd.conf
8.2 客户端(nsf01机器)配置
a. 配置密码文件
[root@nfs01 ~]# echo "grewan" > /etc/rsync.password
b. 修改密码文件权限
[root@nfs01 ~]# chmod 600 /etc/rsync.password
8.3 示例测试
注意:这里的示例都是在客户机端(nsf01)上进行操作的,一般的使用场景都是从客户机备份数据到服务器。
语法格式:
Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST] #推数据到服务器,这种方式比较常用
rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST::DEST #从服务器拉数据,这种方式比较常用
rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
1.在客户端(nfs01)上创建/backup目录,及测试文件
[root@grewan backup]# mkdir /backup -p #创建目录
[root@grewan backup]# touch {1..10} #创建10个测试文件
[root@grewan backup]# ls
1 10 2 3 4 5 6 7 8 9
2.把客户端/backup目录中的内容,备份到备份服务器:
[root@nfs01 backup]# rsync -avz /backup/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
sending incremental file list
./
1
10
2
3
4
5
6
7
8
9
sent 450 bytes received 201 bytes 1302.00 bytes/sec
total size is 0 speedup is 0.00
[root@nfs01 backup]#
命令说明:
rsync -avz这个是命令和对应的参数
/backup/: 把backup目录下的内容推送到服务器
rsync_backup@172.16.1.41::backup : 这个是服务器的信息,rsync_backup是配置文件/etc/rsyncd.conf中配置的用户名,
172.16.1.41是服务器的ip地址,backup是/etc/rsyncd.conf中配置的模块名,这个地方一定不要弄错,
可以再回去看看配置文件,加深印象
--password-file:指定密码文件,不加这个参数的情况下,要手动输入密码。
3.在备份服务器端(backup机器)查看备份的结果
[root@backup ~]# cd /backup/
[root@backup backup]# ls
1 10 2 3 4 5 6 7 8 9
[root@backup backup]#
4.第二种推送的方式
使用rsync协议的方式进行推送
[root@nfs01 backup]# rsync -avz /backup/ rsync://rsync_backup@172.16.1.41/backup --password-file=/etc/rsync.password
sending incremental file list
./
1
2
3
4
5
sent 239 bytes received 106 bytes 690.00 bytes/sec
total size is 0 speedup is 0.00
[root@nfs01 backup]#
5.从备份服务器拉取内容
[root@nfs01 backup]# rsync -avz rsync_backup@172.16.1.41::backup /backup/ --password-file=/etc/rsync.password
receiving incremental file list
./
1
2
3
4
5
sent 162 bytes received 326 bytes 325.33 bytes/sec
total size is 0 speedup is 0.00
[root@nfs01 backup]# ls
1 2 3 4 5
[root@nfs01 backup]#
6.第二种拉取的方式
[root@nfs01 backup]# rm -f *
[root@nfs01 backup]# rsync -avz rsync://rsync_backup@172.16.1.41/backup /backup/ --password-file=/etc/rsync.password
receiving incremental file list
./
1
2
3
4
5
sent 162 bytes received 326 bytes 976.00 bytes/sec
total size is 0 speedup is 0.00
[root@nfs01 backup]#
7.删除rsync同步进程
kill `cat /var/run/rsyncd.pid`
kill `/var/run/rsyncd.pid`
9. 多目录共享
多目录共享的意思是说客户端可以向服务器端多个目录下进行推送或拉取。这个实现起来很简单,就是在配置文件中配置多个模块,每个模块可以指定不同的用户名,密码等等信息。如果所有推送的模块基本信息都相同,就可以把配置信息放在多个模块的上面,模块只配置一个对应的路径即可,像下面这个示例这样:
[root@backup backup]# cat /etc/rsyncd.conf
#rsync_config_______________start
#created by grewan 07::23 2016-05-28
#Email:wangqj541@163.com blog: http://www.cnblogs.com/greta/
##rsyncd.conf start##
uid = rsync
gid = rsync
use chroot = no
max connections = 200
timeout = 300
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
[backup] #这里配置多个模块,共同的配置项目,移动到模块的上面
path = /backup/
[test]
path = /test/
#rsync_config_______________end
如何使用RSYNC搭建备份服务器的更多相关文章
- 九、搭建备份服务器 使用rsync服务
简介 Rsync是开源快速.多功能,可以实现全量和增量的本地或者远程数据同步备份的优秀工具.增量备份效率更高,可以同步内容也可以同步属性 [root@backup-41 ~]# rpm -qa rsy ...
- 通过rsync搭建一个远程备份系统(二)
Rsync+inotify实时备份数据 rsync在同步数据的时候,需要扫描所有文件后进行对比,然后进行差量传输,如果文件达到了百万或者千万级别以上是,扫描文件的时间也很长,而如果只有少量的文件变更了 ...
- 通过rsync搭建一个远程备份系统(一)
前言 我公司是电子商务公司,全部是linux系统,每天的网站数都在增加,为了保证安全,需要建立一个远程容灾系统,将网站数据每天凌晨1点备份到远程服务器上,由于数据量大,每天进行进行增量备份,仅仅备份当 ...
- [原创]Rsync搭建和使用
rsync服务的搭建和使用 ***下载安装: #wget https://download.samba.org/pub/rsync/src/rsync-3.1.2.tar.gz #tar -zxvf ...
- rsync搭建
服务器: 查看是否安装:rpm -qa rsync 未安装则:yum install -y rsync 添加rsync用户 useradd -s /sbin/nologin -M rsync 编辑/e ...
- 使用windos模拟搭建web集群(二)
一.通过rsync搭建备份服务器 这三个目录我们需要做实时热备,他们分别是 系统的脚本目录 系统的配置文件目录 系统的定时任务目录 [root@mage-monitor- ~]# cat /se ...
- Rsync+inotify搭建使用
## Rsync搭建 ### 1.1 环境准备 ``` Rsync-Server 192.168.1.174 Client-Rsync 192.168.1.173 服务启动用户都是root,客户端的用 ...
- rsync+inotify实现服务器之间文件实时同步--转
之前做了“ssh信任与scp自动传输脚本”的技术文档,此方案是作为公司里备份的方法,但在实际的运行中,由于主服务器在给备份服务器传输的时候,我们的主服务器需要备份的文件是实时.不停的产生的,造成不知道 ...
- inotify+rsync文件实时同步
原文转自http://dl528888.blog.51cto.com/2382721/771533/ 之前做了“ssh信任与scp自动传输脚本”的技术文档,此方案是作为公司里备份的方法,但在实际的运行 ...
随机推荐
- 使用Python对Excel进行读写操作
学习Python的过程中,我们会遇到Excel的读写问题.这时,我们可以使用xlwt模块将数据写入Excel表格中,使用xlrd模块从Excel中读取数据.下面我们介绍如何实现使用Python对Exc ...
- 关于SQL的一些小知识
在代码中调用存储过程的时,必须先测试存储过程,存储过程测试成功之后再去java中去调用!!@!@#!@!@! 以后自己写的存储过程写一个本地保存一个.!~~~!!(这个很关键) 以后在代码中的SQL都 ...
- Activity间传递数据
1.从当前的Activity传递数据到下一个Activity: (1)发送方(当前的Activity): Bundle bundle = new Bundle(); bundle.putString ...
- 设计模式(三)—代理模式
目录: 一.概述 二.静态代理 三.动态代理 四.静态代理和动态代理的区别 一.概述 代理模式就是多一个代理类出来,替原对象进行一些操作,比如我们在租房子的时候回去找中介,为什么呢?因为你对 ...
- Git版本切换
前面的话 本文将以一个简单实例的形式来介绍Git版本切换 初始版本 首先,在一个自定义的位置,创建目录a,比如在D盘下 [注意]本文会用到一些常用的Linux的Shell命令,详细信息移步至此 先使用 ...
- 想询问一个职业规划的问题,前端开发 or nodejs?
先说说个人情况,目前个人定位于初中级前端吧,工作近两年,目前前端开发和nodejs都有一定的了解,水平感觉可以搭一些小型的网站.作为前端开发,目前掌握的技术是javascript,平时更多的是用jqu ...
- 0.0 ABP官方文档翻译目录
一直想学习ABP,但囿于工作比较忙,没有合适的契机,当然最重要的还是自己懒.不知不觉从毕业到参加工作七年了,没留下点儿什么,总感觉很遗憾,所以今天终于卯足劲鼓起勇气开始写博客.有些事能做的很好,但要跟 ...
- 事件的preventDefault方法
事件有一个preventDefault()方法,该方法可以用来取消事件的默认行为.许多事件都有默认执行的关联行为.例如,如果用户在文本字段中键入一个字符,则默认行为就是在文本字段中显示该字符.由于可以 ...
- Spring事务隔离级别与传播机制详解,spring+mybatis+atomikos实现分布式事务管理
原创说明:本文为本人原创作品,绝非他处转载,转账请注明出处 1.事务的定义:事务是指多个操作单元组成的合集,多个单元操作是整体不可分割的,要么都操作不成功,要么都成功.其必须遵循四个原则(ACID). ...
- vue2-loading-bar 一款基于Vue2的进度条插件
自学了N久vue,奈何没有练手项目,终于决心拿个东西来试试手.基于对音乐的热爱,选择的第一个demo是音乐播放器.一般播放器都有进度条,于是无意间找到这个插件,就是vue2-loading-bar,这 ...