利用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 在 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 可以用于服务器间文件传输、同步、更新的速度提高。
二、什么是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),
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
[email protected]::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到linuxlinux 将本地的文件推送到另外一台linux 上,执行以下命令:
# rsync -avzP --password-file=/usr/password/rsyncd.secrets /usr/software/
[email protected]::software
该命令就是将本机客户端的/usr/software/下的文件推送到服务器 250 上的
software 模块下,传输如图所示:
3. java调用该传输编写脚本once.sh 和second.sh,并赋予777 权限,具体如下:
java 文件main 函数调用上述.sh 脚本并执行:
然后控制台输入如下:
分别到250 和251 上可以查看到传输成功的文件:
利用Rsync技术在服务器之间的超大文件单点传输的实现相关教程