1. RSYNC介绍

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

远程数据备份工具,可以实现全备份及增量备份,也可以本地备份。

英文全称是Remote synchronization.

具有以下三种功能:

  1. 远程copy的功能:相当于ssh自带的scp命令,但是又优于scp命令,scp每次都是全量拷贝。rsync高在增量拷贝,scp每次都是全量copy。
  2. 本地copy功能:相当于是cp命令,但是又优于cp命令,因为cp每次都是全量copy。
  3. rsync还可以实现删除功能:相当于rm命令。

CentOS5.X中自带的rsync版本都是2.6.x的版本,该版本存在的问题主要是性能方面的,比如,同步大量小文件时容易出现内存溢出或同步中断等现象,这主要与其2.6版本采用先列文件列表,再进行同步的处理机制有关,在处理大文件同步时也市场发生同步文件不完整的现象.不过在CentOS6.x系列rsync版本都进行了升级,本篇文章使用的linux系统是CentOS6.7, 自带的rsync的版本是3.0.6.

2. RSYNC的特性

下面的特性是从rsync官方网站上抄录的:

  1. support for copying links, devices, owners, groups, and permissions

    支持拷贝链接,设备,用户,用户组和属性权限。
  2. exclude and exclude-from options similar to GNU tar

    支持像tar一样排除(或者从文件中排除)备份文件的特性
  3. a CVS exclude mode for ignoring the same files that CVS would ignore

    支持CVS排除文件模式
  4. can use any transparent remote shell, including ssh or rsh

    支持远程shell(ssh,rsh等)数据传输
  5. does not require super-user privileges

    不需要超级用户的权限
  6. pipelining of file transfers to minimize latency costs

    rsync3.x版本以后是一边比较文件一边进行传输,减少了文件传输的延迟
  7. support for anonymous or authenticated rsync daemons (ideal for mirroring)

    支持匿名或需要验证的rsync守护进程模式

3. 使用的工作场景

  1. 把所有客户数据数据同步到备份服务器(可以配合定时任务,实现每天定时备份)

  2. 实时同步(解决存储服务器的单点故障问题),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拷贝时使用的是增量拷贝,即只会把不同的内容拷贝过去,这样就大大提升了性能。

  1. 语法格式

     rsync [OPTION...] SRC... [DEST]
  2. 语法说明:

     1. rsync为同步的命令
    2. [option]为同步时需要的参数
    3. SRC为源,即待拷贝的分区,文件或目录
    4. [DEST]为目的分区,文件或目录
  3. 示例:

     本地拷贝命令
    [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 ~]#
  4. 重要参数介绍

     -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搭建备份服务器的更多相关文章

  1. 九、搭建备份服务器 使用rsync服务

    简介 Rsync是开源快速.多功能,可以实现全量和增量的本地或者远程数据同步备份的优秀工具.增量备份效率更高,可以同步内容也可以同步属性 [root@backup-41 ~]# rpm -qa rsy ...

  2. 通过rsync搭建一个远程备份系统(二)

    Rsync+inotify实时备份数据 rsync在同步数据的时候,需要扫描所有文件后进行对比,然后进行差量传输,如果文件达到了百万或者千万级别以上是,扫描文件的时间也很长,而如果只有少量的文件变更了 ...

  3. 通过rsync搭建一个远程备份系统(一)

    前言 我公司是电子商务公司,全部是linux系统,每天的网站数都在增加,为了保证安全,需要建立一个远程容灾系统,将网站数据每天凌晨1点备份到远程服务器上,由于数据量大,每天进行进行增量备份,仅仅备份当 ...

  4. [原创]Rsync搭建和使用

    rsync服务的搭建和使用 ***下载安装: #wget https://download.samba.org/pub/rsync/src/rsync-3.1.2.tar.gz #tar -zxvf ...

  5. rsync搭建

    服务器: 查看是否安装:rpm -qa rsync 未安装则:yum install -y rsync 添加rsync用户 useradd -s /sbin/nologin -M rsync 编辑/e ...

  6. 使用windos模拟搭建web集群(二)

    一.通过rsync搭建备份服务器 这三个目录我们需要做实时热备,他们分别是  系统的脚本目录  系统的配置文件目录  系统的定时任务目录 [root@mage-monitor- ~]# cat /se ...

  7. Rsync+inotify搭建使用

    ## Rsync搭建 ### 1.1 环境准备 ``` Rsync-Server 192.168.1.174 Client-Rsync 192.168.1.173 服务启动用户都是root,客户端的用 ...

  8. rsync+inotify实现服务器之间文件实时同步--转

    之前做了“ssh信任与scp自动传输脚本”的技术文档,此方案是作为公司里备份的方法,但在实际的运行中,由于主服务器在给备份服务器传输的时候,我们的主服务器需要备份的文件是实时.不停的产生的,造成不知道 ...

  9. inotify+rsync文件实时同步

    原文转自http://dl528888.blog.51cto.com/2382721/771533/ 之前做了“ssh信任与scp自动传输脚本”的技术文档,此方案是作为公司里备份的方法,但在实际的运行 ...

随机推荐

  1. Java位向量的实现原理与巧妙应用

    Java位向量的巧实现原理与巧妙应用 1.博文介绍 本篇博文将会介绍几本的位运算含义.位向量介绍.BitSet实现原理.Java位向量的应用.拓展介绍Bloom Filter等. 2.位运算介绍 1) ...

  2. Shell常见用法小记

    shell的简单使用 最近发现shell脚本在平常工作中简直算一把瑞士军刀,很多场景下用shell脚本能实现常用的简单需求,而之前都没怎么学习过shell,就趁机把shell相关的语法和常见用法总结了 ...

  3. [C++]STL容器Vector的内存释放

    直接抛出两句话,说明到底应该如何释放Vector占用的内存. “vector的clear不影响capacity,你应该swap一个空的vector.” <Effective STL>中的“ ...

  4. iOS 中的单例设计模式

    单例设计模式:在它的核心结构中只包含一个被称为单例类的特殊类.例如文件管理中的NSUserDefault,应用程序中的UIApplication,整个应用程序就这一个单例类,负责应用程序的一些操作,单 ...

  5. 利用php数组函数进行函数式编程

    因为一个BUG, 我在一个摇摇欲坠,几乎碰一下就会散架的项目中某一个角落中发现下面这样一段代码 这段程序与那个BUG有密切的关系. 我来回反复的捉摸这段代码, 发现这段代码实现了两个功能 第一个是在一 ...

  6. JAVA加密算法系列-AES

    package ***; import java.io.UnsupportedEncodingException; import java.security.InvalidKeyException; ...

  7. ubuntu 12.04 x86_64:java.lang.UnsatisfiedLinkError: Could not load SWT library. Reasons

    sy@sy-Aspire-:~$ .0_155965261/configuration/.log !SESSION -- ::39.595 ------------------------------ ...

  8. 1135: 零起点学算法42——多组测试数据(求和)IV

    1135: 零起点学算法42--多组测试数据(求和)IV Time Limit: 1 Sec  Memory Limit: 64 MB   64bit IO Format: %lldSubmitted ...

  9. Vxlan与网卡offload性能

    背景 由于数据链路层MTU的限制,发送端TCP/UDP数据在交付到IP层时需要与MTU相匹配,TCP数据不能超过mss,较长的UDP需要分片(Fragmentation)以满足MTU要求:接收端协议栈 ...

  10. 跟着刚哥梳理java知识点——集合(十二)

    Java集合分为Collection和Map两种体系 一.Collection接口: Collections接口为我们提供了以下方法: size():返回集合中元素的个数 add(Object obj ...