rsync远程同步

rsync(Remote Sync)是一个Unix/linux系统下的文件同步和传输工具。Rsync通过“rsync算法”提供了一个客户机和远程文件服务器的文件同步的快速方法。每次只传送两个文件的不同部分(即支持增量备份),而不是每次都整份传送

rsync包括如下的一些特性:

能更新整个目录树和文件系统;
有选择性的保持符号链链、硬链接、文件属性、权限、设备以及时间等;

传输前执行压缩,因此非常适用于异地备份、镜像服务器等应用。
能用rsh、ssh或直接端口做为传输端口;
支持匿名rsync同步文件,是理想的镜像工具;

Rsync可以通过rshssh使用,也能以daemon模式去运行,在以daemon方式运行时Rsync server会打开一个873端口,等待客户端去连接。

Rsync的官方站点位于http://rsync.samba.org

rsync服务器架设比较简单,可能我们安装好rsync后,并没有发现配置文件,以及rsync服务器启动程序,因为每个管理员可能对rsync用途不一样,所以一般的发行版只是安装好软件就完事了,让管理员来根据自己的用途和方向来自己架设rsync服务器;因为这个rsync应用比较广,能在同一台主机进行备份工作,还能在不同主机之间进行工作。在不同主机之间的进行备份,是必须架设rsync服务器的。

在远程同步任务中,负责发起rsync同步操作的客户机称为发起端,而负责响应来自客机的rsync同步操作的服务器称为备份源。在下行同步(下载)中,备份源负责提供文档的原始位置,发起端应对该位置具有读取权限;在上行同步(上传)中,备份源负责提供文档的目标位置,发起端应对该位置具有写入权限。如下图所示:

wKioL1M3_vvDBc2CAAELsV0vb5w993.jpg

使用rsync同步工具时,备份源既可以是SSH服务器,也可以是以服务器模式运行的rsync程序,下面分别讲解配置SSH备份源、rsync备份源的方法。

(本文以CentOSL6.5_x86_64系统中的rsync-3.0.6-9.el6_4.1.x86_64为例)

wKiom1M3_2STdw7PAABdMdg7Iyc244.jpg

1.配置SSH备份源

使用SSH协议的好处是能够基于更安全的远程连接,增强备份的保密性。这种方式的备份源最容易配置,只要确认源文件夹的位置,并准备一个备份操作用户即可,以服务A(备份源)为例,若要将网站目录/var/www/html作为备份源,允许用户rget做下行备份,用户rput做上行备份,操作步骤如下:


在备份源服务器(IP地址为:172.16.41.4)上新建备份用户rgetrput,分别用来实现下载、上传操作:

wKioL1M3_z-zCBu-AAFyqTw7MVQ528.jpg


确认sshd服务正常运行,且允许用户rgetrput能访问ssh服务器。在/etc/ssh/sshd_config文件中添如下配置项,只允许rgetrput能远程登录ssh服务器。并重启sshd服务,确保修改生效。

wKiom1M3_2jBtff5AAAVBHtsSG4290.jpg


wKioL1M3_0KCyOGvAABbjJROngI852.jpg


调整备份源所提供文档所在目录的权限(如/var/www/html目录),使rget用户有权读取、rput用户有权写入。在linux系统中,正常创建的目录权限为755,文件权限为644,因此对于rget用户来说,默认权限已经满足下行备份的要求。

wKiom1M3_2uCOwODAAB-Dy3I0S8554.jpg


但是对于rput用户来说,要能够写入才有权限做上行备份,建议使用ACL访问控制机制设置用户rput/var/www/html的写入权限。

wKiom1M3_26BqxBIAAHVcvbI9TU309.jpg

其中”-R”选项表示递归操作,”-m”选项表示修改权限,default表示在html/目录新建的文档用户rput也具有rwx权限。当需要清除所设置的ACL属性时,setfacl命令的-x-b选项,分别表示用来个别删除和全部删除。到此SSH备份源配置完毕。

有了备份源服务器以后,就可以使用rsync工具来执行远程同步了。本文讲解的备份操作均在客户机(发起端,IP为:172.16.41.3)执行。实际上备份源与发起端可以是同一台主机,其效果相当于本地备份而不是异地备份。

rsync命令的基本用法:

格式:rsync【选项】 源文件 目标文件

常见的选项:

-a,--archive归档模式,表示以递归的方式传输文件,并且保持文件属性,等同于-rlptgoD

-r,–recursive对子目录以递归模式处理

-l,--links表示拷贝链接文件

-p , --perms表示保持文件原有权限

-t , --times表示保持文件原有时间

-g , --group表示保持文件原有属用户组

-o , --owner表示保持文件原有属主

-D , --devices表示块设备文件信息

-z , --compress表示压缩传输

-H表示硬连接文件

-A保留ACL属性信息

-P显示传输进度

-u, --update仅仅进行更新,也就是跳过所有已经存在于目标位置,并且文件时间晚于要备份的文件。(不覆盖更新的文件)

--port=PORT指定其他的rsync服务端口

--delete删除那些目标位置有而原始位置没有的文件

--password-file=FILEFILE中得到密码
--bwlimit=KBPS
限制I/O带宽,KBytes /second

--filter-文件名”需要过滤的文件

--exclude=:需要过滤的文件

-v显示同步过程的详细信息


rsync备份操作示例:

下行同步SSH备份源:

将服务器172.16.41.4中的/var/www/html文件夹与客户机(172.16.41.3)本地的/wwwroot文件夹进行同步,保持文件权限和属性、软/硬链接、ACL属性、删除/wwwroot目录中多余的文件,并在传输过程中进行压缩。


确保备份源服务器中/var/www/html目录下有文件:

wKioL1M3_0jgCxJSAACLToFuN7c094.jpg


在客户机本地创建目标目录:

wKiom1M3_3CxBW4dAAAs0PjmcQM045.jpg


在客户机上执行rsync命令实现下行同步。

wKioL1M3_0rjOl0hAAEwtauvvaQ093.jpg


验证同步结果:

wKiom1M4ARDwaKO3AAB7xgJRjAY465.jpg


上行同步SSH备份源:

将客户机中的/usr/share/doc/HTML/目录中的内容上传同步到SSH服务器的/var/www/html目录下,由于备份用户rput并非root用户,因此”-g””-o”等选项将无法使用。

wKioL1M4AOrCAhXTAAGouuO_B_g810.jpg


验证结果:在172.16.41.4主机上显示/var/www/html目录下的列表

wKiom1M4ARSyx5X2AACweDjFyGE428.jpg


编写rsync备份脚本:

实际生产环境中的备份工作通常是按计划重复执行的,例如每晚上2点30分对服务器网站目录做一次下行同步,定期任务可以交给 crond服务来完成,而实际的备份操作则可以写到shell脚本中。

由于计划备份中的脚本在后台执行,无法根据提示来输入密码,因此编写rsync备份脚本时如何解决交互验证的问题就成为关键所在。

SSH备份源的无交互验证:

对于SSH服务器来说,采用密钥验证是避免交互式登录的最佳方法,只要在客户机中创建无私钥短语的密钥对,然后将公钥文件分发给服务器中的备份用户,就可以实现无密码自动登录了。

在客户机上创建密钥对:

wKioL1M4A-PTVNZAAAJNWYCarYw341.jpg


将公钥文件分发给服务器:

wKiom1M4BA2xaCFlAAAwq7pxN9I580.jpg


在客户机测试SSH的密钥验证:

wKioL1M4AHrTY5UbAAB6HXlOKFE862.jpg


成功实现免交互自动登录后,再次使用rsync访问SSH备份源时,也就不再提示需要密码验证了,注意,执行脚本的必须是在客户机中创创建密钥对的用户。


编写SSH备份源的shell脚本:

wKioL1M4BXjyEyXPAAAz0Dw6yWc520.jpg


脚本内容如下:

wKiom1M4ARvxUNOdAACWokYm_6M414.jpg


对建好的备份脚本设置适当权限:

wKioL1M4AHziiLouAABEiECxHe8027.jpg


创建crond计划任务:wKiom1M4AKXT8gMjAABdemHnKNU052.jpg


至此SSH备份源的rsync远程备份搭建完毕。

由于篇幅偏长影响阅读质量,故下篇博文接着介绍有关rsync备份源的方法