一、rsync是什么

在开始正式学习 rsync 之前,我们先来回答这个问题:rsync 是什么。

rsync(remote synchronize)是 Liunx/Unix 下的一个远程数据同步工具。它可通过 LAN/WAN 快速同步多台主机间的文件和目录,并适当利用 rsync 算法(差分编码)以减少数据的传输。rsync 算法并不是每一次都整份传输,而是只传输两个文件的不同部分,因此其传输速度相当快。除此之外,rsync 可拷贝、显示目录属性,以及拷贝文件,并可选择性的压缩以及递归拷贝。

二、rsync优点

rsync有以下几个优点:

  • 可以镜像保存整个目录树和文件系统。
  • 可以很容易做到保持原来文件的权限、时间、软硬连接等。
  • 无需特殊权限即可安装。
  • 拥有优化的流程和比较高的文件传输效率。
  • 可以使用shell(rsh、ssh)方式来传输文件。
  • 支持匿名运行。

与 scp 相比,rsync 传输速度绝对远远超过 scp 的传输速度。

我们在局域网中经常用 rsync 和 scp 传输大量 mysql 数据库文件,发现 rsync 传输文件速度至少要比 scp 快 20 倍以上。

所以如果需要在 Liunx/Unix 服务器之间互传海量数据时,建议选择 rsync 进行传输。

三、运行模式(服务器)

rsync 有两种常用的认证方式,一种是 rsync-daemon 方式,另外一种是 ssh 方式(类似于 scp)。在平时使用过程,我们使用最多的是 rsync-daemon 方式。

这种模式是基于 C/S 模式的,在这种模式下,rsync 在后台启用了一个守护进程,这个守护进程在 rsync 服务器永久运行,用于接收请求传输文件,因此,客户端既可以把文件推送( push )给守护进程,也可以向守护进程拉取( pull )文件。rsync 的服务器模式非常适合为异地的中心备份服务器或数据异地存储库来使用。

案例介绍:
我们使用 pull 模式,我们有多个应用的服务器作为服务端,备份服务器作为客户端,备份服务器向每个应用服务器拉取需要备份的数据,放到相应的目录下面。
CentOS 7使用rsync实现数据备份

四、安装配置 rsync

1、安装 rsync

为了简便,我们这里直接使用 yum 进行安装即可。

yum install rsync -y

2、配置 rsync 服务端(应用服务器)

我们有一台云盘的服务器,IP为 10.0.2.15,我们在这台服务器上面进行服务端的配置,我们需要备份的路径为 /data/nextcloud,首先进行配置文件的设定,配置的详细解释在文中最后有介绍,我们设置的如下:

# cat /etc/rsyncd.conf

uid = root
gid = root
use chroot = yes
max connections = 10
pid file = /var/run/rsyncd.pid
log file = /var/log/rsync.log
transfer logging = yes
timeout = 900
ignore nonreadable = yes
dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2

[nextcloud]
path = /data/nextcloud
comment = pan.wzlinux.com
read only = yes
write only = no
hosts allow = 10.0.2.30
list = no
ignore errors
auth users = backup
secrets file = /etc/rsyncd.pass  

增加密码认证文件:

# cat /etc/rsyncd.pass

backup:123456     #具有拉取数据的账号密码
chmod 600 /etc/rsyncd.pass

启动服务器:

systemctl start rsyncd.service

3、配置 rsync 客户端(备份服务器)

配置密码认证文件,这里只需配置密码即可,账号我们会在命令里面指定:

# cat /etc/rsyncd.pass
123456

# chmod 600 /etc/rsyncd.pass

4、进行数据拉取测试

我们在备份服务器上面同样安装 rsync,然后进行如下指令进行数据拉取:

rsync -vzrtopg --delete --progress --password-file=/etc/rsyncd.pass backup@10.0.2.15::nextcloud /data/10.0.2.15/nextcloud

CentOS 7使用rsync实现数据备份

  • v是“--verbose”显示详细输出模式
  • z是“--compress”压缩模式
  • r是“--recursive”以子目录递归模式
  • t是“--times“用来保持文件信息时间
  • o是”--owner“用来保持文件的属主信息
  • p是”--perms“用来保持文件权限
  • g是”--group“用来保持文件的属组
  • --progress:用来显示数据镜像同步的过程
  • --delete:指定以rsync服务器为基准进行数据镜像同步,也就是要保持rsync服务器端目录与客户端目录的完全一致
  • --exclude:用于排除不需要文件传输的类型
  • /date/10.0.2.15/nextcloud:用户指定备份文件在客户端机器上的存放路径

5、客户端添加定时任务

# crontab -l

# 10.0.2.15 backup
00 01 * * * root /usr/bin/rsync -vzrtopg --delete --progress --password-file=/etc/rsyncd.pass backup@10.0.2.15::nextcloud /data/10.0.2.15/nextcloud

6、CentOS 6启动方法

CentOS 6 服务模式的启动方法可以参照命令rsync --daemon --help查进行查看,我们使用如下:

rsync --daemon --config=/etc/rsyncd.conf &

五、Windows系统安装

我们可能会遇到部分应用服务器为 Windows 系统,这里我们可以使用 DeltaCopy 这个软件代替 rsync server。
下载地址为:http://www.aboutmyx.com/files/DeltaCopy.zip ,下载完成之后,直接在系统上面安装即可。

1、注册服务

点击注册 Windows 服务,第一次打开的时候会提示你输入系统的登陆用户名和密码,这里输入的用户名和密码是为启用该软件的服务用的。点击右边的Start Server,可能会出现错误,启动不了,我们可以进入服务,右击DeltaCopy Server,选择属性,然后选择登陆,选择本地系统帐户,保存,然后启动该服务,这样就可以了。

CentOS 7使用rsync实现数据备份

2、启动服务

点击启动服务,测试是否可以启动。

CentOS 7使用rsync实现数据备份

3、配置备份目录

Create virtual directories on the server, which is similar to a virtual directory on an FTP or HTTP server.

CentOS 7使用rsync实现数据备份

4、备份测试

我们登录到备份服务器,然后测试数据是否可以拉取过来。

/usr/bin/rsync -vzrtopg --delete --progress --password-file=/etc/rsyncd.pass oabackup@10.0.1.3::oabackup /data/10.0.1.3

CentOS 7使用rsync实现数据备份

数据完整的备份过来了。

我们还可以增加多个备份目录,只需要右键添加即可。

CentOS 7使用rsync实现数据备份

附录:配置文件

以下是配置文件的一些参数讲解:

pid file = /var/run/rsyncd.pid #进程 pid 文件所在位置
port = 873 #指定监听端口,默认是873,可以自己指定
address = 10.0.2.15 #服务器监听的IP地址,可省略
uid = root #守护进程所属的uid,默认是nobody,可能会碰到文件或目录权限问题,此处偷懒用的 root
gid = root #守护进程的gid
#chroot,即改变程序执行时所参考的根目录位置,在传输文件之前,服务器守护程序在将chroot 到文件系统中的目录中
#这样做的好处是可能保护系统被安装漏洞侵袭的可能。缺点是需要超级用户权限。另外对符号链接文件,将会排除在外
#也就是说,你在 rsync服务器上,如果有符号链接,你在备份服务器上运行客户端的同步数据时,
#只会把符号链接名同步下来,并不会同步符号链接的内容
use chroot = yes
read only = yes #只读选择,只让客户端从服务器上读取文件
write only = no #只写选择,只让客户端到服务器上写入
#允许访问的IP,可以指定单个IP,也可以指定整个网段,能提高安全性。
#格式是 ip 与 ip 之间、ip 和网段之间、网段和网段之间要用空格隔开;
hosts allow = 192.168.1.0/255.255.255.0 10.0.1.0/255.255.255.0
max connections = 5 #客户端最多连接数
log file = /var/log/rsync.log #rsync 服务器的日志;
transfer logging = yes #记录传输文件的日志
log format = %t %a %m %f %b #日志格式
syslog facility = local3 #日志级别
#通过该选项可以覆盖客户指定的IP超时时间。可以确保rsync服务器不会永远等待一个崩溃的客户端。
#超时单位为秒钟,0表示没有超时定义,这也是默认值。对于匿名rsync服务器来说,一个理想的数字是600。
timeout = 300
#模块定义
#主要是定义服务器哪个目录要被同步。
#每个模块都要以[name]形式。这个名字就是在 rsync 客户端看到的名字。
#但是服务器真正同步的数据是通过 path 指定的。可以依次创建多个模块。
#每个模块要指定认证用户、密码文件,但排除并不是必须的。
[nextcloud] #模块名,以下配置都属于此模块
path = /data/nextcloud #文件目录所在位置
list = no #当查看服务器上提供了哪些目录时是否列出来,no比较安全
ignore errors #忽略I/O错误
#指定由空格或逗号分隔的用户名列表,只有这些用户才允许连接该模块。这里的用户和系统用户没有任何关系,是 rsyncd.secrets 中的用户名!
#如果"auth users"被设置,那么客户端发出对该模块的连接请求以后会被rsync请求challenged进行验证身份。
#这里使用的 challenge/response 认证协议。
#用户的名和密码以明文方式存放在"secrets file"选项指定的文件中。默认情况下无需密码就可以连接模块(也就是匿名方式)。
auth users = backup
secrets file = /etc/rsyncd.pass #密码文件

参考文档:<https://rsync.samba.org/documentation.html>;