rsync远程同步

一关于rsync

·rsync远程同步

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

·rsync的特性

能更新整个目录树和文件系统;

有选择性的保持符号链链、硬链接、文件属性、权限、设备以及时间等;

传输前执行压缩,因此非常适用于异地备份、镜像服务器等应用。

能用rsh、ssh 或直接端口做为传输端口;

支持匿名rsync 同步文件,是理想的镜像工具;

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

官方网站:http://rsync.samba.org/

·rsync的工作流程

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

9 rsync远程同步_下行同步

·rsync同步源

使用rsync同步工具时,备份源既可以是SSH服务器,也可以是以服务器模式运行的rsync程序(本文以RHEL6系统中的rsync-3.0.6-5为例讲解)

指备份操作的远程服务器,也称为备份源

主要包括两种:rsync源SSH源

RHEL6系统中的rsync默认已安装

9 rsync远程同步_上行同步_02

·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=FILE 从FILE中得到密码

--bwlimit=KBPS 限制I/O带宽,KBytes /second

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

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

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

二 SSH备份源与发起端的配置

·配置SSH备份源

使用SSH协议的好处是能够基于更安全的远程连接,增强备份的保密性。这种方式的备份源最容易配置,只要确认源文件夹的位置,并准备一个备份操作用户即可

以服务A(备份源)为例,若要将网站目录/var/www/html作为备份源,允许用户rget做下行备份,用户rput做上行备份

1在备份源服务器(IP192.168.1.1)上新建备份用户rget、rput,分别用来下载、上传

9 rsync远程同步_rsync_03

2确认sshd服务正常运行,且允许用户rget、rput能访问ssh服务器

在/etc/ssh/sshd_config文件中添如下配置项,只允许rget和rput能远程登录ssh服务器。并重启sshd服务,确保修改生效。

9 rsync远程同步_rsync_04

3调整备份源所提供文档所在目录的权限(如/var/www/html目录),使rget用户有权读取、rput用户有权写入

在linux系统中,正常创建的目录权限为755,文件权限为644,因此对于rget用户来说,默认权限已经满足下行备份的要求

9 rsync远程同步_rsync_05

但是对于rput用户来说,要能够写入才有权限做上行备份,建议使用ACL访问控制机制设置用户rput对/var/www/html的写入权限(不改变其他用户对该目录的原有权限,如httpd服务的运行用户daemon对该目录具有的权限)

9 rsync远程同步_上行同步_06

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

·发起端的SSH备份操作示例

有了SSH备份源服务器以后,就可以使用rsync工具在发起端来执行远程同步了;实际上备份源与发起端可以是同一台主机,其效果相当于本地备份而不是异地备份

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

下行同步SSH备份源:

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

9 rsync远程同步_rsync_07

2在发起端客户机上准备目标目录

9 rsync远程同步_下行同步_08

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

9 rsync远程同步_马向军_09

4验证同步结果

9 rsync远程同步_上行同步_10

上行同步SSH备份源:

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

9 rsync远程同步_下行同步_11

·编写rsync备份脚本

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

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

SSH备份源的无交互验证:

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

1在客户机上创建密钥对

9 rsync远程同步_远程同步_12

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

9 rsync远程同步_rsync_13

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

9 rsync远程同步_上行同步_14

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

脚本内容如下

9 rsync远程同步_马向军_15

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

9 rsync远程同步_马向军_16

2创建crond计划任务

每天22:30执行脚本

9 rsync远程同步_下行同步_17

9 rsync远程同步_下行同步_18

三 rsync备份源与发起端的配置

rsync不仅仅用作远程同步的发起端(客户端),也可以作为守护进程运行,为其他客户机提供备份源,配置rsync备份源需要建立配置文件 rsync.conf,创建备份账户,然后将rsync程序以"- -daemon"选项运行

·配置rsync备份源

1建立/etc/rsyncd.conf配置文件

配置文件rsyncd.conf位于/etc/目录下,需自行建立,配置内容的格式与samba服务器类似,具体可以参考man手册页,下面将以源目录/var/www/html、备份账号backuper为例

9 rsync远程同步_马向军_19

9 rsync远程同步_上行同步_20

基于安全性考虑,对于rsync 的备份源最好仅允许以只读方式做下行同步,若确实需要做上行同步时,建议改用SSH备份源。另外,下行备份可以采用匿名的方式,只要将其中的"auth users"和"secrets file"配置记录去掉就可以了

下面是常见的全局配置参数,

port:指定后台程序使用的端口号,默认为873。

uid:该选项指定当该模块传输文件时守护进程应该具有的uid,配合gid选项使用可以确定哪些可以访问怎么样的文件权限,默认值是" nobody" 。

gid:该选项指定当该模块传输文件时守护进程应该具有的gid。默认值为" nobody" 。

max connections:指定该模块的最大并发连接数量以保护服务器,超过限制的连接请求将被告知随后再试。默认值是0,也就是没有限制。

lock file:指定支持max connections参数的锁文件,默认值是/var/run/rsyncd.lock。

motd file:" motd file" 参数用来指定一个消息文件,当客户连接服务器时该文件的内容显示给客户,默认是没有motd文件的。

log file:" log file" 指定rsync的日志文件,而不将日志发送给syslog。

pid file:指定rsync的pid文件,通常指定为"/var/run/rsyncd.pid",存放进程ID的文件位置。

hosts allow = 单个IP地址或网络地址 //允许访问的客户机地址

下面是常见的模块配置参数

主要是定义服务器哪个目录要被同步输出。

其格式必须为"[共享模块名]"形式,这个名字就是在rsync客户端看到的名字,其实有点象Samba服务器提供的共享名。而服务器真正同步的数据是通过 path来指定的。

Comment:给模块指定一个描述,该描述连同模块名在客户连接得到模块列表时显示给客户。默认没有描述定义。

Path:指定该模块的供备份的目录树路径,该参数是必须指定的。

read only :yes为只允许下载,no为可以下载和上传文件到服务器

exclude:用来指定多个由空格隔开的多个文件或目录(相对路径),将其添加到exclude列表中。这等同于在客户端命令中使用—exclude或----filter来指定某些文件或目录不下载或上传(既不可访问)

exclude from:指定一个包含exclude模式的定义的文件名,服务器从该文件中读取exclude列表定义,每个文件或目录需要占用一行

include:用来指定不排除符合要求的文件或目录。这等同于在客户端命令中使用--include来指定模式,结合include和exclude可以定义复杂的exclude/include规则。

include from:指定一个包含include模式的定义的文件名,服务器从该文件中读取include列表定义。

auth users:该选项指定由空格或逗号分隔的用户名列表,只有这些用户才允许连接该模块。这里的用户和系统用户没有任何关系。如果" auth users" 被设置,那么客户端发出对该模块的连接请求以后会被rsync请求challenged进行验证身份这里使用的challenge/response认证协议。用户的名和密码以明文方式存放在" secrets file" 选项指定的文件中。默认情况下无需密码就可以连接模块(也就是匿名方式)。

secrets file:该选项指定一个包含定义用户名:密码对的文件。只有在" auth users" 被定义时,该文件才有作用。文件每行包含一个username:passwd对。一般来说密码最好不要超过8个字符。没有默认的secures file名,注意:该文件的权限一定要是600,否则客户端将不能连接服务器。

hosts allow:指定哪些IP的客户允许连接该模块。定义可以是以下形式:

单个IP地址,例如:192.167.0.1,多个IP或网段需要用空格隔开,

整个网段,例如:192.168.0.0/24,也可以是192.168.0.0/255.255.255.0

"*"则表示所有,默认是允许所有主机连接。

hosts deny:指定不允许连接rsync服务器的机器,可以使用hosts allow的定义方式来进行定义。默认是没有hosts deny定义。

list:该选项设定当客户请求可以使用的模块列表时,该模块是否应该被列出。如果设置该选项为false,可以创建隐藏的模块。默认值是true。

Timeout:通过该选项可以覆盖客户指定的IP超时时间。通过该选项可以确保rsync服务器不会永远等待一个崩溃的客户端。超时单位为秒钟,0表示没有超时定义,这也是默认值。对于匿名rsync服务器来说,一个理想的数字是600

2为备份账户创建数据文件:

添加一行用户记录,以冒号分隔,用户名称为backuper,密码为pwd123。由于账号信息采用明文存放,因此应调整文件权限,避免账号信息泄露。

9 rsync远程同步_下行同步_21

3启动rsync服务程序

执行"rsync --daemon"命令就可以启动rsync服务,以独立监听服务的方式运行,若要关闭rsync服务,可以采用kill进程的方式

9 rsync远程同步_马向军_22

将"rsync --daemon"保存到/etc/rc.local文件中,确保系统启动后自动启动rsync服务。

9 rsync远程同步_远程同步_23

或者可以将rsync交给超级服务xinted管理,只需修改相应配置并启动xinetd服务即可启动rsync服务

9 rsync远程同步_下行同步_24

如果没有安装xinet软件包,请先安装

9 rsync远程同步_下行同步_25

9 rsync远程同步_上行同步_26

4在iptables防火墙上创建规则允许873端口的通信

9 rsync远程同步_远程同步_27

若selinux开启要修改selinux的布尔值:

9 rsync远程同步_下行同步_28

9 rsync远程同步_rsync_29

·rsync发起端的备份操作示例

使用rsync备份工具实现备份操作。

格式1:

rsync 选项 用户名@备份源服务器IP::共享模块名 目标目录

格式2:

rsync 选项 rsync://用户名@备份源服务器IP/共享模块名 目标目录

1在客户机上执行rsync命令实现下行同步操作

将服务器中的wwwroot共享模块中的内容下载到本地的/myweb、目录中

9 rsync远程同步_上行同步_30

9 rsync远程同步_上行同步_31

2编写rsync脚本

rsync备份源的无交互验证,对于rsync备份源来说,可使用环境变量RSYNC_PASSWORD来存放密码。执行 rsync备份任务时,会自动读取该变量,并在需要时发送给rsync源服务器来进行验证

无交互式验证

9 rsync远程同步_马向军_32

脚本内容

9 rsync远程同步_rsync_33

设置x权限:

9 rsync远程同步_远程同步_34

设置计划任务,在 crond计划任务中按指定计划执行脚本