微波EDA网,见证研发工程师的成长!
首页 > 射频和无线通信 > 射频无线通信文库 > 基于Docker的私有云系统的设计

基于Docker的私有云系统的设计

时间:03-28 来源:电子产品世界 点击:

置和安装步骤。利用容器,仅需在容器配置文件过程中重新定义下该层即可。

  Seafile是2013年国内一个团队开发的开源云存储系统,提供了丰富的文件同步和管理功能,还有更好的数据隐私保护以及群组协作功能。在本文中,利用Seafile实现用户对数据的上传、下载、同步功能。除此之外,Seafile还有完善的隐私保护,用你的密码来加密文件,实现共享,可靠的文件储存,完整的快照、恢复说明,支持实时数据备份。提供操作历史、镜像恢复功能,可恢复在指定时间内被删除的文件,减少误操作的影响,日志功能齐全,便于审计,免费并易于部署,界面友好。

2 私有云系统构建

  分析本系统可知,主要是数据的存储和管理,所以由两层组成:数据存储层和服务提供层。

2.1 分布式存储环境建立

  本项目中,以Docker容器为计算存储节点,构建分布式环境,采用的分布式文件系统为MooseFS。MooseFS是一款网络分布式文件系统。它把数据分散在多台服务器上,但对于用户来讲,看到的只是一个源。MFS像其他类unix文件系统一样,包含了层级结构(目录树),存储着文件属性(权限,最后访问和修改时间),可以创建特殊的文件(块设备、字符设备、管道和套接字),符号链接,硬链接。在图3中可以看到,数据存储层使用的是MooseFS文件系统,主要由Master、Metalogger和Chunkserver这些部分组成。master负责在整个系统中管理数据。是整个系统的维护者。Metalogger做master数据备份的节点。chunkserver是mfs系统中的数据存储者,真正的用户数据按照算法被分成chunk,并分发到各个chunkserver上,这样就保证了数据的安全性,本项目中低层存储部署的方案如图3所示。

  这里需要注意的一点是,MooseFS的客户端程序也就是加载MooseFS磁盘系统的命令是使用fuse编写的,因此要想挂载MooseFS的服务器,必要的前提条件就是先安装fuse,这样编译MooseFS的时候才能顺利通过。接下来,来看看此分布式文件的读写过程。

  读取数据的时候分为六步,如图4所示(图中粗线为数据流方向,细线为控制消息方向)。首先应用程序向客户端发起访问请求,提交访问表(filename,byte range);然后客户端将访问表转换成可以识别的形式(filename,chunk index),然后发给master节点;接下来master节点返回给客户端数据块句柄以及数据块的位置;客户端按照master节点提供的信息,发送数据块句柄以及数据读取范围到相应的chunkserver上;chunkserver将所请求的数据发回给客户端;最后客户端将数据拷贝到应用程序中。

  写入数据到MooseFS中比较复杂一些,共分为九步,如图6所示。因为分布式系统中存在三个备份,在读取数据的时候只需要从这三个其中之一读取即可,但是写入数据的时候,必须往这三个备份里面都写入数据。首先,应用程序发起写入数据的请求,将文件名与数据发送给客户端;接下来客户端将请求表(文件名,数据)转换成块句柄(文件名,块索引),然后发送给master节点;master节点将块句柄和三个备份的位置全部返回给客户端;然后客户端将数据写到所有待写Chunkserver的内部buffer中;客户端发送写指令到主备份Chunkserver,主备份Chunkserver按照一定的顺序依次从buffer中把数据写入到数据块中,主备份Chunkserver写入操作完成后,由主备份Chunkserver发送同样写操作指令给次备份Chunkserver执行写任务,次备份Chunkserver写入数据完成后,向主备份Chunkserver报告写入状态,然后主备份Chunkserver向客户端返回写入状态。如果以上任意一个Chunkserver写入失败,客户端会建议新的节点进行再次写入。

2.2 用户接口通信模块设计

  与用户交互的接口主要使用Seafile完成。Seafile服务端主要由Httpserver、Seahub、Seafile 、Ccnet和Task Deamon这几大模块组成。这几个模块的功能是:Ccnet主要负责通信,是内部的RPC服务进程,连接其他几个组件;Seahub主要提供网页页面,供用户管理自己在服务器上的数据和账户信息;Httpserver主要负责网页端的文件上传与下载;Seafile是整个架构的核心,其功能是实现对原始文件的上传、下载和同步,是整个框架进行数据处理的实际执行者;Task Deamon主要处理后台邮件收发等任务。在模块的实现方面,Ccnet、Seafile和HttpServer这三个模块,主要使用C语言编写,架构上主要采用libevent事件循环与线程池处理异步任务。Seahub使用python Django框架实现,主要通过一个轻量级的python http服务器Gunicorn来提供网站支持服务,Seahub是作为Gunicorn一个进程来运行。Task Deamon主要采用python实现。Seafile的架构如图6所示。

3 整体系统搭建与测试

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top