rsync远程同步
rsync(Remote Sync)是一个Unix/linux系统下的文件同步和传输工具。Rsync通过“rsync算法”提供了一个客户机和远程文件服务器的文件同步的快速方法。每次只传送两个文件的不同部分(即支持增量备份),而不是每次都整份传送
rsync包括如下的一些特性:
能更新整个目录树和文件系统;
有选择性的保持符号链链、硬链接、文件属性、权限、设备以及时间等;
传输前执行压缩,因此非常适用于异地备份、镜像服务器等应用。
能用rsh、ssh或直接端口做为传输端口;
支持匿名rsync同步文件,是理想的镜像工具;
Rsync可以通过rsh或ssh使用,也能以daemon模式去运行,在以daemon方式运行时Rsync server会打开一个873端口,等待客户端去连接。
Rsync的官方站点位于http://rsync.samba.org
rsync服务器架设比较简单,可能我们安装好rsync后,并没有发现配置文件,以及rsync服务器启动程序,因为每个管理员可能对rsync用途不一样,所以一般的发行版只是安装好软件就完事了,让管理员来根据自己的用途和方向来自己架设rsync服务器;因为这个rsync应用比较广,能在同一台主机进行备份工作,还能在不同主机之间进行工作。在不同主机之间的进行备份,是必须架设rsync服务器的。
在远程同步任务中,负责发起rsync同步操作的客户机称为发起端,而负责响应来自客机的rsync同步操作的服务器称为备份源。在下行同步(下载)中,备份源负责提供文档的原始位置,发起端应对该位置具有读取权限;在上行同步(上传)中,备份源负责提供文档的目标位置,发起端应对该位置具有写入权限。如下图所示:
使用rsync同步工具时,备份源既可以是SSH服务器,也可以是以服务器模式运行的rsync程序,下面分别讲解配置SSH备份源、rsync备份源的方法。
(本文以CentOSL6.5_x86_64系统中的rsync-3.0.6-9.el6_4.1.x86_64为例)
1.配置SSH备份源
使用SSH协议的好处是能够基于更安全的远程连接,增强备份的保密性。这种方式的备份源最容易配置,只要确认源文件夹的位置,并准备一个备份操作用户即可,以服务A(备份源)为例,若要将网站目录/var/www/html作为备份源,允许用户rget做下行备份,用户rput做上行备份,操作步骤如下:
在备份源服务器(IP地址为:172.16.41.4)上新建备份用户rget、rput,分别用来实现下载、上传操作:
确认sshd服务正常运行,且允许用户rget、rput能访问ssh服务器。在/etc/ssh/sshd_config文件中添如下配置项,只允许rget和rput能远程登录ssh服务器。并重启sshd服务,确保修改生效。
调整备份源所提供文档所在目录的权限(如/var/www/html目录),使rget用户有权读取、rput用户有权写入。在linux系统中,正常创建的目录权限为755,文件权限为644,因此对于rget用户来说,默认权限已经满足下行备份的要求。
但是对于rput用户来说,要能够写入才有权限做上行备份,建议使用ACL访问控制机制设置用户rput对/var/www/html的写入权限。
其中”-R”选项表示递归操作,”-m”选项表示修改权限,default表示在html/目录新建的文档用户rput也具有rwx权限。当需要清除所设置的ACL属性时,setfacl命令的-x或-b选项,分别表示用来个别删除和全部删除。到此SSH备份源配置完毕。
有了备份源服务器以后,就可以使用rsync工具来执行远程同步了。本文讲解的备份操作均在客户机(发起端,IP为:172.16.41.3)执行。实际上备份源与发起端可以是同一台主机,其效果相当于本地备份而不是异地备份。
rsync命令的基本用法:
格式:rsync【选项】 源文件 目标文件
常见的选项:
-a,--archive归档模式,表示以递归的方式传输文件,并且保持文件属性,等同于-rlptgoD
-r,�Crecursive对子目录以递归模式处理
-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=FILE从FILE中得到密码
--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目录下有文件:
在客户机本地创建目标目录:
在客户机上执行rsync命令实现下行同步。
验证同步结果:
上行同步SSH备份源:
将客户机中的/usr/share/doc/HTML/目录中的内容上传同步到SSH服务器的/var/www/html目录下,由于备份用户rput并非root用户,因此”-g”、”-o”等选项将无法使用。
验证结果:在172.16.41.4主机上显示/var/www/html目录下的列表
编写rsync备份脚本:
实际生产环境中的备份工作通常是按计划重复执行的,例如每晚上2点30分对服务器网站目录做一次下行同步,定期任务可以交给 crond服务来完成,而实际的备份操作则可以写到shell脚本中。
由于计划备份中的脚本在后台执行,无法根据提示来输入密码,因此编写rsync备份脚本时如何解决交互验证的问题就成为关键所在。
SSH备份源的无交互验证:
对于SSH服务器来说,采用密钥验证是避免交互式登录的最佳方法,只要在客户机中创建无私钥短语的密钥对,然后将公钥文件分发给服务器中的备份用户,就可以实现无密码自动登录了。
在客户机上创建密钥对:
将公钥文件分发给服务器:
在客户机测试SSH的密钥验证:
成功实现免交互自动登录后,再次使用rsync访问SSH备份源时,也就不再提示需要密码验证了,注意,执行脚本的必须是在客户机中创创建密钥对的用户。
编写SSH备份源的shell脚本:
脚本内容如下:
对建好的备份脚本设置适当权限:
创建crond计划任务:
至此SSH备份源的rsync远程备份搭建完毕。
由于篇幅偏长影响阅读质量,故下篇博文接着介绍有关rsync备份源的方法