利用Rsync技术在服务器之间的超大文件单点传输的实现

利用Rsync技术在服务器之间的超大文件单点传输的实现

利用Rsync技术在服务器之间的超大文件单点传输的实现根据需求,实现windows 服务器和linux 服务器,以及linux 服务器和linux服务器之间的文件单点传输功能。

本次示例选取,物理机为win7,vmware 虚拟机安装的俩台linux,共三台机器,将文件从windows 传输到 linux 再传输到另外一台 linux,其中使用 java 调用shell 脚本来实现过程,技术上使用Rsync。以CentOS7.2 作为Rsync 的客户端,来操作 Win7 和 CentOS6.5 的 Rsync 服务端,将文件从 Win7 上拉下来到CentOS7.2,再将文件推到CentOS6.5 上。

过程如图所示:

rsync比较文件一致性 rsync 大文件_linux

 

接下来,首先介绍Rsync 的传输性能方便的验证,主要针对其备份功能;再介绍Rsync 在 Windows 和Linux 下作为服务端的安装配置,最后再进行上述的传输示例。

一、Rsync同步更新备份性能验证首先针对Rsync传输文件的性能和可靠性进行验证。选取同名俩个大文件进行验证使用Rsync下的传输性能。 其中一个test.rar 大小:9.06 GB (9,729,232,997  字节),另一个test.rar 大小:5.16 GB (5,543,657,986  字节)。并且小的test.rar 中的文件在大的test.rar 中都存在,如图:

rsync比较文件一致性 rsync 大文件_linux_02

1.  传输同名小文件首先将小的文件5.16 GB的test.rar 传输到slaverone机器上

“/home/slaverone/2”目录下,传输的实时速度和平均速度如图所示:

rsync比较文件一致性 rsync 大文件_linux同步写大文件_03

可见传输在 15%时候的速度是 10.55MB/S,传输完的平均速度为

12.23MB/S,耗时7 分12 秒。

2.  传输同名大文件接下来再将大的文件9.06 GB 的test.rar 同名文件上传到slaverone 的相同目

录下“/home/slaverone/2”,传输的实时速度和平均速度如图所示:

rsync比较文件一致性 rsync 大文件_linux_04

rsync比较文件一致性 rsync 大文件_服务器_05

可见在传输在28%的时候的实时速度为39.63MB/S,当传输到58%时候,实

时速度为8.92MB/S,最终传输完的平均速度为16.17MB/S。

3.  对比和总结第二次9.06 GB 大文件的传输,可以看出50%之前的速度很高,期间一度达

到60MB/S 左右,在50%之后速度降下来变成10MB/S 左右和第一次传输小文件

(5.16 GB 的test.rar)速度差不多。这是因为,小文件(5.16 GB 的test.rar)大

概占大文件(9.06 GB 的test.rar)的50%多,所以前半部分传输时候,使用了rsync

算法,极大提高了传输相同文件的速度,后半部分传输则是传输不同类型的文件,

则速度正常值。

由此可以看出,rsync 可以用于服务器间文件传输、同步、更新的速度提高。

二、什么是Rsyncrsync,remote synchronize  顾名思意就知道它是一款实现远程同步功能的软

件,它在同步文件的同时,可以保持原来文件的权限、时间、软硬链接等附加信

息。  rsync  是用 “rsync  算法”  提供了一个客户机和远程文件服务器的文件同

步的快速方法,而且可以通过  ssh  方式来传输文件,这样其保密性也非常好,

另外它还是免费的软件。

rsync  包括如下的一些特性:

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

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

?  对于安装来说,无任何特殊权限要求

?  对于多个文件来说,内部流水线减少文件等待的延时

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

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

三、windows环境下Rsync的安装配置Window 下安装Rsync 服务器端使用的是cwRsync 的exe 安装程序,cwRsync

分为Server 和Client 此次我们只需要windows 作为服务器端提供文件服务即可,

故只安装Server,使用的版本为4.1.0(cwRsyncServer_4.1.0_Installer.exe),

rsync比较文件一致性 rsync 大文件_rsync比较文件一致性_06

cwRsync服务端下载地址:点击打开链接

cwRsync客户端下载地址:点击打开链接

1.  安装安装很简单,一路“next”,使用默认安装配置即可,如图所示:

rsync比较文件一致性 rsync 大文件_服务器_07

rsync比较文件一致性 rsync 大文件_rsync比较文件一致性_08

默认安装路径不必修改,

rsync比较文件一致性 rsync 大文件_客户端_09

默认已有,不必输入。

rsync比较文件一致性 rsync 大文件_rsync比较文件一致性_10

2.  修改配置文件“rsyncd.conf”配置文件修改和新添加“rsyncd.motd”配置文件

rsync比较文件一致性 rsync 大文件_linux_11

其中标注的“【test】、【1】、【2】”是提供服务传输文件的模块,即该模块路

径下的文件参与传输,后面会介绍。此处注意路径先要加上“/cygdrive/……”后

面才是具体盘符和文件路径。

新添加“rsyncd.motd”,内容如图所示:

rsync比较文件一致性 rsync 大文件_linux_12

这个是服务启动的标志,内容随意,不添加也行。

3.  启动服务。首先在服务里面找到该Rsync 服务,如下:

rsync比较文件一致性 rsync 大文件_linux同步写大文件_13

选择启动该服务,

rsync比较文件一致性 rsync 大文件_linux_14

若启动不了(若正常启动可以跳过这步),报出“发生错误1069:由于登陆

失败而无法启动服务”错误,则右键该服务属性,单击【登陆】页签,选中“本

地系统账户”,选中“允许桌面交互”,点击确定,启动服务即可。

rsync比较文件一致性 rsync 大文件_linux_15

接下来修改该服务为自启动,如图:

rsync比较文件一致性 rsync 大文件_linux_16

四、Linux环境下Rsync的安装配置本文选取的CentOS7.2 和CentOS6.5 系统已经自带了Rsync,作为客户端是

可以直接使用,但是要提供服务,还需要配置相关文件和启动服务。所以本文选

取CentOS7.2 作为服务端,CentOS6.5 作为客户端。

CentOS7.2 自带的Rsync 是3.0.9 版本,如图所示:

rsync比较文件一致性 rsync 大文件_linux同步写大文件_17

CentOS6.5 自带的Rsync 是3.0.6 版本,如图所示:

rsync比较文件一致性 rsync 大文件_客户端_18

现在将CentOS7.2 的Rsync 服务配置起来并启动。CentOS6.5 只作为客户端,

并且是shell 脚本执行的机器,其角色是将Windows 上的文件pull 拉下来,然后

再push 推送到另一台Linux(即本文的CentOS7.2)。

1.  安装(CentOS7.2 已经安装过,可以跳过此步骤)

(1)软件包安装

# sudo apt-get    install    rsync (注:在debian、ubuntu  等在线安装方法)
# yum install rsync  (注:Fedora、Redhat  等在线安装方法)
# rpm -ivh rsync  (注:Fedora、Redhat  等rpm 包安装方法)

其它Linux 发行版,请用相应的软件包管理方法来安装。

(2)源码包安装

# tar xvf    rsync-xxx.tar.gz
# cd rsync-xxx
# ./configure --prefix=/usr    ;make ;make install

注:在用源码包编译安装之前,得安装gcc 等编译开具才行。

2.  配置

rsync 的主要有以下三个配置文件rsyncd.conf(主配置文件)、rsyncd.secrets(密

码文件)、rsyncd.motd(rysnc 服务器信息)。

(1)主配置文件

服务器配置文件主配置文件rsyncd.conf,该文件默认在/etc 下不存在,先在

该目录下创建该文件。创建命令:

# touch /etc/rsyncd.conf

配置文件内容如下:

rsync比较文件一致性 rsync 大文件_客户端_19

注:

host allow 是允许连接到该服务器的机器IP;

关于auth users 是必须在服务器上存在的真实的系统用户,如果你想用多个

用户以“,”号隔开,比如auth users = easylife,root,slaverone

(2)密码文件

密码文件的创建和添加,命令如下

#touch /etc/rsyncd/rsyncd.secrets

然后将该文件赋予权限600,属性归root 所有

#chmod 600 /etc/rsyncd/rsyncd.secrets

不赋予权限的话,文件传输时候,密码不正确,权限不对,会失败。

密码文件的内容如下:

rsync比较文件一致性 rsync 大文件_linux_20

密码格式:

用户名:密码

注:为了安全不能把系统用户的密码写在这里。比如你的系统用户 slaverone 密

码是 123456,为了安全你可以让 rsync 中的 slaverone 的明文密码为 slaverone。这

和 samba 的用户认证的密码原理是差不多的。

(3)rysnc 服务器信息文件

它是定义  rysnc  服务器信息的,也就是用户登录信息。比如让用户知道

这个服务器是谁提供的等;类似  ftp  服务器登录时,我们所看到的

linuxsir.org  ftp  ……。  当然这在全局定义变量时,并不是必须的,可以用#

号注掉,或删除;这里写了一个  rsyncd.motd 的内容为:

#vim /etc/rsyncd/rsyncd.motd

如图所示:

rsync比较文件一致性 rsync 大文件_服务器_21

(4)模块定义和使用

模块的定义就是定义服务器那个目录要被同步。每个模块都是[name]

形式,类似于 Samba 服务器提供的共享名,具体服务器真正同步的数据是

通过 path 指定的。根据不同的需求,指定多个模块,每个模块要指定认证

用户,密码文件,也可以指定排除不同步的目录(非必需)。

如下例子:

rsync比较文件一致性 rsync 大文件_服务器_22

首先指定了模块是[3],path 是服务器同步的目录路径,auth  users 指定

了可以与该服务器同步交互的主机名称,secrets file 指定了服务器与客户端

交互的密码文件,最后的exclude 是排除了path 目录下的该“ansible/”不同

步,也可以写多个排除目录,用空格隔开即可。

当然,conf 文件中的模块可以定义多个,这个根据具体需求决定。

3.  启动服务

rsync 服务启动有多种方式,本文只介绍daemon 参数方式

#/usr/bin/rsync --daemon

启动完成后检查一下873 端口是否监听

#netstat -an|grep 873

如图:

rsync比较文件一致性 rsync 大文件_客户端_23

此时服务启动完成。

4.  防火墙设置

873 端口通过不了防火墙,在客户端连接会报错如下:

rsync比较文件一致性 rsync 大文件_服务器_24

这个时候就需要防火墙开放873 端口。

由于centsOS 7 默认使用firewall 管理防火墙设置,本次使用firewall 命令工

具,首先添加873 端口访问:

#firewall-cmd --zone=public --add-port=873/tcp --permanent

注:“--permanent”即是永久生效意思,不添加此参数,重启之后失效。

接着,重新载入firewall:

# firewall-cmd --reload

具体如图所示:

rsync比较文件一致性 rsync 大文件_rsync比较文件一致性_25

若是使用iptables 命令,则输入如下指令:

# iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 873 -j ACCEPT

然后:

#iptables -L  (查看通过的  873 端口)如图:

rsync比较文件一致性 rsync 大文件_linux同步写大文件_26

测试873 端口是否通过:

rsync比较文件一致性 rsync 大文件_rsync比较文件一致性_27

五、传输示例

1.  windows到linux将windows 上的文件拉到linux 上,执行以下命令:

#  rsync  -avzP  --password-file=/usr/password/rsyncd.secrets

[email protected]::fileTranser /usr/software/      (如图)

rsync比较文件一致性 rsync 大文件_服务器_28

首先是将服务器226上fileTranser模块下的文件拉到本地的/usr/software/  下

面  ,其他参数解释如下:

-avzP  :即四个参数“-a -v -z -P”

-a  :以archive 模式操作、复制目录、符号连接  ;

-z  :传输时压缩;

-v  :传输时的进度等信息,和-P 有关系;

-P  :传输进度;

--password-file=/usr/password/rsyncd.secrets    :    来指定密码文件,这样就可

以在脚本中使用而无需交互式地输入验证密码了,这里需要注意的是这份密

码文件权限属性要设得只有属主可读。

在本地机(即客户端)创建密码文件,并赋予600 权限,如下:

rsync比较文件一致性 rsync 大文件_客户端_29

2.  linux到linuxlinux 将本地的文件推送到另外一台linux 上,执行以下命令:

#  rsync  -avzP  --password-file=/usr/password/rsyncd.secrets  /usr/software/

[email protected]::software

该命令就是将本机客户端的/usr/software/下的文件推送到服务器 250 上的

software 模块下,传输如图所示:

rsync比较文件一致性 rsync 大文件_服务器_30

3.  java调用该传输编写脚本once.sh  和second.sh,并赋予777 权限,具体如下:

rsync比较文件一致性 rsync 大文件_linux同步写大文件_31

java 文件main 函数调用上述.sh 脚本并执行:

rsync比较文件一致性 rsync 大文件_linux同步写大文件_32

然后控制台输入如下:

rsync比较文件一致性 rsync 大文件_服务器_33

rsync比较文件一致性 rsync 大文件_linux同步写大文件_34

 

分别到250 和251 上可以查看到传输成功的文件:

rsync比较文件一致性 rsync 大文件_服务器_35

利用Rsync技术在服务器之间的超大文件单点传输的实现相关教程