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

本文详细介绍了如何使用Rsync在Windows和Linux服务器之间进行超大文件的单点传输,包括Rsync的性能验证、安装配置及传输示例。通过Rsync的同步更新备份性能验证,证明其在文件传输、同步、更新方面的高效性。同时,文章提供了Windows和Linux环境下Rsync的安装配置步骤,并展示了从Windows到Linux以及Linux到Linux的传输过程,以及如何通过Java调用shell脚本实现传输。

利用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 在 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 中都存在,如图: 
 

1.  传输同名小文件 

首先将小的文件5.16 GB的test.rar 传输到slaverone机器上
“/home/slaverone/2”目录下,传输的实时速度和平均速度如图所示:
 
可见传输在 15%时候的速度是 10.55MB/S,传输完的平均速度为
12.23MB/S,耗时7 分12 秒。 
 

2.  传输同名大文件 

接下来再将大的文件9.06 GB 的test.rar 同名文件上传到slaverone 的相同目
录下“/home/slaverone/2”,传输的实时速度和平均速度如图所示:

 

可见在传输在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 可以用于服务器间文件传输、同步、更新的速度提高。 
 
 
 
 

二、什么是Rsync 

rsync,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), 

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

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

1.  安装 

安装很简单,一路“next”,使用默认安装配置即可,如图所示: 
 
 
 
默认安装路径不必修改, 
 
默认已有,不必输入。 

 

2.  修改配置文件 

“rsyncd.conf”配置文件修改和新添加“rsyncd.motd”配置文件 
 
其中标注的“【test】、【1】、【2】”是提供服务传输文件的模块,即该模块路
径下的文件参与传输,后面会介绍。此处注意路径先要加上“/cygdrive/……”后
面才是具体盘符和文件路径。 
新添加“rsyncd.motd”,内容如图所示: 
 
这个是服务启动的标志,内容随意,不添加也行。 
 

3.  启动服务。 

首先在服务里面找到该Rsync 服务,如下: 
 
选择启动该服务, 
 
若启动不了(若正常启动可以跳过这步),报出“发生错误1069:由于登陆
失败而无法启动服务”错误,则右键该服务属性,单击【登陆】页签,选中“本
地系统账户”,选中“允许桌面交互”,点击确定,启动服务即可。 
 
接下来修改该服务为自启动,如图: 
 
 

四、Linux环境下Rsync的安装配置 

本文选取的CentOS7.2 和CentOS6.5 系统已经自带了Rsync,作为客户端是
可以直接使用,但是要提供服务,还需要配置相关文件和启动服务。所以本文选
取CentOS7.2 作为服务端,CentOS6.5 作为客户端。 
CentOS7.2 自带的Rsync 是3.0.9 版本,如图所示: 
 
CentOS6.5 自带的Rsync 是3.0.6 版本,如图所示: 
 
 
现在将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 
配置文件内容如下: 
 
注: 
host allow 是允许连接到该服务器的机器IP; 
关于auth users 是必须在服务器上存在的真实的系统用户,如果你想用多个
用户以“,”号隔开,比如auth users = easylife,root,slaverone 
 
 (2)密码文件 
密码文件的创建和添加,命令如下 
#touch /etc/rsyncd/rsyncd.secrets 
然后将该文件赋予权限600,属性归root 所有 
#chmod 600 /etc/rsyncd/rsyncd.secrets 
不赋予权限的话,文件传输时候,密码不正确,权限不对,会失败。 
密码文件的内容如下: 
 
密码格式: 
用户名:密码 
注:为了安全不能把系统用户的密码写在这里。比如你的系统用户 slaverone 密
码是 123456,为了安全你可以让 rsync 中的 slaverone 的明文密码为 slaverone。这
和 samba 的用户认证的密码原理是差不多的。 

 
(3)rysnc 服务器信息文件 
它是定义  rysnc  服务器信息的,也就是用户登录信息。比如让用户知道
这个服务器是谁提供的等;类似  ftp  服务器登录时,我们所看到的 
linuxsir.org  ftp  ……。  当然这在全局定义变量时,并不是必须的,可以用#
号注掉,或删除;这里写了一个  rsyncd.motd 的内容为: 
#vim /etc/rsyncd/rsyncd.motd 
如图所示: 
 
(4)模块定义和使用 
模块的定义就是定义服务器那个目录要被同步。每个模块都是[name]
形式,类似于 Samba 服务器提供的共享名,具体服务器真正同步的数据是
通过 path 指定的。根据不同的需求,指定多个模块,每个模块要指定认证
用户,密码文件,也可以指定排除不同步的目录(非必需)。 
如下例子: 
 
首先指定了模块是[3],path 是服务器同步的目录路径,auth  users 指定
了可以与该服务器同步交互的主机名称,secrets file 指定了服务器与客户端
交互的密码文件,最后的exclude 是排除了path 目录下的该“ansible/”不同
步,也可以写多个排除目录,用空格隔开即可。 
当然,conf 文件中的模块可以定义多个,这个根据具体需求决定。 
 
3.  启动服务 
rsync 服务启动有多种方式,本文只介绍daemon 参数方式 
#/usr/bin/rsync --daemon 
启动完成后检查一下873 端口是否监听 
#netstat -an|grep 873 
如图: 
 
此时服务启动完成。 
 
 
4.  防火墙设置 
873 端口通过不了防火墙,在客户端连接会报错如下: 
 
这个时候就需要防火墙开放873 端口。 
由于centsOS 7 默认使用firewall 管理防火墙设置,本次使用firewall 命令工
具,首先添加873 端口访问: 
#firewall-cmd --zone=public --add-port=873/tcp --permanent 
注:“--permanent”即是永久生效意思,不添加此参数,重启之后失效。 
接着,重新载入firewall: 
# firewall-cmd --reload 
具体如图所示: 
 
 
若是使用iptables 命令,则输入如下指令: 
# iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 873 -j ACCEPT 
然后: 
#iptables -L  (查看通过的  873 端口)如图: 
 
 
测试873 端口是否通过: 
 
 

五、传输示例 

1.  windows到linux 

将windows 上的文件拉到linux 上,执行以下命令: 
#  rsync  -avzP  --password-file=/usr/password/rsyncd.secrets 
master@26.47.129.226::fileTranser /usr/software/      (如图) 
 
首先是将服务器226上fileTranser模块下的文件拉到本地的/usr/software/  下
面  ,其他参数解释如下: 
-avzP  :即四个参数“-a -v -z -P” 
-a  :以archive 模式操作、复制目录、符号连接  ; 
-z  :传输时压缩; 
-v  :传输时的进度等信息,和-P 有关系; 
-P  :传输进度; 
--password-file=/usr/password/rsyncd.secrets    :    来指定密码文件,这样就可
以在脚本中使用而无需交互式地输入验证密码了,这里需要注意的是这份密
码文件权限属性要设得只有属主可读。 
在本地机(即客户端)创建密码文件,并赋予600 权限,如下: 
 
 

2.  linux到linux 

linux 将本地的文件推送到另外一台linux 上,执行以下命令: 
#  rsync  -avzP  --password-file=/usr/password/rsyncd.secrets  /usr/software/ 
master@26.47.136.250::software 
该命令就是将本机客户端的/usr/software/下的文件推送到服务器 250 上的
software 模块下,传输如图所示: 
 
 

3.  java调用该传输 

编写脚本once.sh  和second.sh,并赋予777 权限,具体如下: 
 
java 文件main 函数调用上述.sh 脚本并执行: 
 
然后控制台输入如下: 

 

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值