韩源,资深工程师,存储和灾备专家。

随着 IT 的发展,无论是企业还是个人,文件类的数据越来越多,随之而来的文件传递、共享、同步等需求愈加旺盛。传统的文件拷贝、U 盘传递、ftp 等方式已无法满足需要。前些年公有网盘迅猛发展,但是由于各种原因,最近各种公有网盘服务都逐渐停止或者缩减服务项目,不能提供很好的服务,并且敏感数据放入公有网盘有数据泄露的风险。

本文将介绍如何通过 Azure 搭建企业或个人的私有云盘来实现数据转移、共享、备份等功能。

私有网盘需求

传统的拷贝等方式,属于串行操作,每个步骤都必须完成,才能进行下一步,并且需要人工干预。一些同步软件例如 rsync、synctoys 等虽然可自动化同步,但是每次需要手工执行或者放入 crontab 里定期执行,无法完全自动化。所以我们希望通过私有网盘来解决这些问题

一个合格的私有网盘应具备如下基本功能:

  1. 透明:无需人工干预,放入同步文件夹的文件可自动同步
  2. 安全:传输及保存可加密
  3. 管理:可为不同用户分配不同的读写或禁止权限
  4. 跨平台:可在 windows、linux、mac、ios、android 甚至侵入设备如树莓 Pi 等使用
  5. 断点续传:如设备离线、重新上线后可自动继续上传下载

有些客户甚至需要更多的特性,例如:

  • 分块传输:避免大文件修改后整体上传,提升效率
  • 多目录同步:无需将所有文件放置在一个固定目录
  • 快速传递:可设置多个服务器,自动选择最快节点,全局同步

这些功能也是我们搭建私有网盘的目标。

准备工作

Azure

当然,首先得有 Azure 账号,如果需要国内外都可以快速同步,最好是同时具备 azure.cn 和 azure.com 的账号。

同步软件

强烈推荐 Resilio Sync(以下简称 Resilio)。

该软件有全平台的客户端,并且通过 P2P 方式进行同步,也就是某个文件只要在一个节点上有完整版,其它节点即可同步。例如,一个企业里,员工 A 完成一个文件后需要传给国外的员工 B 进行下一步工作。如果使用 Resilio,只要这个文件在同步文件夹里,A 保存后自动向 Azure 服务器和 B 的电脑里同步文件,由于 Azure 在国内,速度较快,很快完成了同步,此时 A 的电脑无需再保持在线,服务器会自动将剩余部分同步到 B 的电脑里。

Resilio 有多个版本,区别如下:

 

对普通用户,免费版即可满足需求。

私有网盘搭建

服务器安装配置

首先,在 Azure 新建一台虚机,OS 选择 CentOS7.3,Resilio 对性能要求不高,使用 D1v2 即可;其它如网络等设置根据实际要求配置,PubicIP 最好使用固定 IP,为了方便测试,NSG 添加一条规则,允许所有入站访问:

 

安装完成后,通过 SSH 工具等你到虚机

 

对于 CentOS 等类 RedHat 系统,Resilio 提供了 RPM 的安装方式,只需要把 Resilio 加入到 YUM 源,即可在线安装。

创建新的 repo 文件 /etc/yum.repos.d/resilio-sync.repo,并添加如下内容:

 

 

导入公钥:

 

安装 Resilio 软件:

 

 

Resilio 安装后需要一个做配置文件(有模板),不过也可以通过直接指定参数的方式运行:

直接指定参数

 

参数里的 0.0.0.0 表示允许所有的 IP 访问,8888 表示 web 服务的端口。

通过配置文件运行

通过模板生成配置文件:

 

可根据实际情况修改配置文件,例如,希望把同步文件的目录设置在 /share,web 访问端口设置为 8123,对应修改如下:

 

 

通过指定配置文件的方式运行 Resilio:

 

在一台其他电脑,通过浏览器访问 http://ip:8123 的方式访问管理界面:

 

第一次运行,需配置用户名和密码:

 

为i该设备取个名字(用作同步时显示),并同意协议:

 

输入刚才设置的用户名和口令后,进入管理界面(会提示输入 email 订阅 newsletter,直接关闭即可):

 

在此,我们可以添加一个共享目录:

 

可以看到,可创建不同类型的共享目录(部分功能需要专业版支持),这里我们以标准共享目录为例创建;点击 Standard folder:

 

选择新建共享目录的存放位置,由于在配置文件里指定了 /share 作为 Resilio 的根目录,所以默认在 /share 下,点击 New Folder 创建一个新目录 demo01 作为共享目录的存放位置:

 

再点击 Open 创建共享目录,可看到有三种方式来发布共享目录:Link、Key、QR code,每种方式都有只读和读写两种权限:

 

三种方式的使用方法如下:

  • Link:通过邮件、IM 工具等将 Link 发送给客户机,客户机如果已安装 Resilio,浏览器打开 Link 时会自动跳转到 Resilio 添加共享目录
  • Key:客户机在 Resilo 软件里输入 Key 即可添加工项目
  • QR code:主要给移动设备使用,安装 Resilo 后通过扫描二维码添加共享目录
  • 此处先不共享,直接关掉该窗口即可:

 

再次进入 SSH,查看 /share 目录,发现多出一个子目录 demo01,即刚才添加的共享目录:

 

为了服务器重启时,Resilo 可自动运行,将命令放入 /etc/rc.local 文件:

 

 

注:/etc/rc.local是/etc/rc.d/rc.local的链接,在CentOS7里,不建议将开机启动软件放入rc.local,suoyi默认/etc/rc.d/rc.local没有可执行权限,需手工修改其权限。

至此,服务器端安装配置完毕。

客户端安装配置

客户端的安装配置比较简单,以 windows 平台为例,到 Resilio 官网下载对应安装软件,运行后一路 next 即可,安装后自动运行如下:

 

点击添加:

 

选择 Enter a key ok link:

 

在服务器的 web 管理界面里,鼠标移至需要共享的目录后边,将显示 share 功能:

 

将出现该目录的共享菜单,本次选择 Key:

 

复制 Read & Write 的 Key,填如客户机,并点击 Next:

 

选择共享目录在本地的保存位置:

 

添加完成,在客户机里可看到共享目录:

 

在客户机的目录里添加一个文件,稍等即可看到开始同步,速度取决于到 azure.cn 的带宽:

 

同步完成,SSH 到服务器,可看到 /share/demo01/ 多出客户机拷贝的文件:

 

删除此文件:

 

稍等,即可看到,客户机的该文件也被删除:

 

其他客户端的安装配置也基本类似,可根据需要自行选择安装配置。

移动设备(IOS 或者 Android)也具备相应客户端,可远程访问共享文件。

私有网盘的功能扩展

通过 Resilio 搭建的私有网盘的同步方式是 P2P 的方式,即是否存在同步服务器并不影响文件操作,但是配置同步服务器可以实现许多更高级的功能。

同步服务器的高可靠

azure 的 SLA 99.95% 说明了需要通过两台在不同故障域和更新域的服务器来实现。所以,如果要保证同步服务器的持续在线,需要使用可用性集(Av set)来实现。

可用性集将同样功能的堕胎虚机分布在不同的故障域和更新域,当某个域出现故障或者更新重启时,其它域的虚机可持续提供服务,避免业务中断。

下边,将 Resilio 部署到可用性集实现高可靠。

可用性集必须在创建虚机时配置,如需加入或移除可用性集,必须重新创建虚机。

按照之前的方式创建一台 CentOS7.3 的虚机 SyncDemo01,在可用性集选项新建一个可用性集 SyncDemoSet:

 

然后创建第二台虚机 SyncDemo02,配置同 SyncDemo01,使用 SyncDemo02相同的 vnet、subnet、nsg 等,可用性集选择第一台创建的可用性集。

由于采用了 P2P 的同步方式,Resilio 并不关心中心节点,所以 Resilio 高可靠最简单的实现方式是把这两台服务器当作两台独立的 Resilio 服务器,分别安装配置好软件,在其中一台建立共享文件夹,并在另一台添加(同客户机的共享文件夹添加方式),可用性集保证了两台同步服务器不会同时宕机,始终有一台提供同步服务。

跨区域同步

某客户有中外两个办公室,如果没有同步服务器,所有同步都需要在客户员工的工作电脑完成,面临两个问题:

1.跨国同步受到骨干网带宽影响,速度较慢,员工必须等到同步完成才能关闭电脑,造成下班时间拖延,或者员工只能提前停止工作,等到在下班前完成与对端员工电脑的同步;而两地由于时差,可能根本没有交叉的时间可供同步

2.数据保存在员工电脑里,存在丢失风险

基于这种需求,可在该客户两个办公地点较近的 Azure Region(或者更多地点)配置两套 Resilion 同步服务器,当地员工放入共享文件夹的文件自动同步到就近 Azure Region 的同步服务器,不受跨国带宽的影响,可迅速完成。各 Region 的同步服务器之间的数据同步后台自动进行,无需员工电脑在线,不影响员工的下班。另一地点员工上班时,共享文件会自动从就近的同步服务器同步到员工电脑,尽快开展工作。由于同步基于 internet,甚至可带回家同步。同时如果员工电脑出现损坏、丢失等情况,数据在 azure 的服务器上仍有亿份,无须担心数据丢失。

文件版本管理

Resilio 提供了版本管理功能,默认保存 30 天的历史文件记录,在共享文件夹的 Pefreference 可以修改是否保存历史版本:

 

 

在 Resilio 客户端的 Preferences-Advanced-Open power preferences-sync_trash_ttl 可以设置历史版本的保留天数:

 

通过不同的历史版本保留策略,可以设置在客户机不保留历史版本或很短时间的历史版本,节约客户机空间;在服务器端可以设置长时间的历史版本保留策略,实现对历史文件的长时间回溯。

总结

Resilio 还具备很多其他功能,例如指定文件同步(文件在客户机只有一个链接,使用时下载,节约客户机空间)、权限管理、企业版还有传输加速等高级功能。

结合 Azure 上部署的同步服务器,完全可以满足企业和个人的私有网盘需求,并可扩充很多扩展功能如协同办公、版本管理、替代邮件附件等,更好的促进工作效率。

注: 本文的私有网盘解决方案只为阅读者提供一个思路,由于涉及到非微软认证的第三方软件,故不对整体方案的 SLA 及数据安全提供保障。