云存储是分布式存储技术的发展和延续云和虚拟化

2014-04-08    来源:畅享网    编辑:佚名
云计算(cloudcomputing),是分布式计算技术的一种。云计算透过网络连接,将一切隐没在云端,普通用户不在关心数据存在哪里,不在关心数据的安全,不在关心应用程序是否需要升级,不

  一、概述

  云计算(cloudcomputing),是分布式计算技术的一种。云计算透过网络连接,将一切隐没在云端,普通用户不在关心数据存在哪里,不在关心数据的安全,不在关心应用程序是否需要升级,不在关心计算机病毒,这一切工作都由云计算中心负责解决,普通用户要做的就是选择自己喜爱的云服务商并购买自己需要的服务。云计算使普通用户有了享受高性能计算的机会,云计算中心几乎可能提供无限制的计算能力。

云存储是分布式存储技术的发展和延续

  Google提出的云计算强调的是云的重要性,因为Google从来都没有端,并且将GFS抛出作为诱饵欲占主动;微软则强调“云”加“端”才是云计算,因为微软的视窗一直是“端”的霸主;VMware则认为虚拟化是云计算的核心技术;Sun公司则重提多年前他们说的老话“网络就是计算机”;Adobe则通过Flex占领用户的眼球,使FlashPlayer进军云计算;另外大量的服务器托管公司则将服务器的租用称为云计算。云存储是在云计算概念上延伸和发展出来的一个新的概念,是云存储重要的存储资源。它通过集群计算、网格计算和分布式计算等功能,透过网络,将不同类型的存储设备通过软件协同工作,对网络用户提供数据存储和访问功能。

  二、云存储结构

  云存储将云系统的存储资源进行统一整合管理,提供存储虚拟化功能,为用户提供一个统一的存储空间,具有集中存储、分布式扩展、安全认证、数据加密等方面的优点。在云状存储系统中,所有存储资源对使用者都是透明的,使用者不必知道存储设备的型号、接口和传输协议,也不必建立庞大的独立的数据备份系统和应急容灾系统,这些状态监控、维护、备份和应急容灾在云存储系统中都能够自动完成,已经作为云的很自然的一部分。云存储的结构如图1所示。云存储结构模型由4层组成。

  1.存储层

  云存储设备可以是光纤通道存储设备,也可以是NAS或者iSCSI等网络存储设备。在云中,存储设备数量庞大,通常会分布在不同的地方,通过广域网、互联网或者专用的光纤网络连接。通常需要提供一个统一的存储设备管理系统,实现物理存储设备的逻辑化和虚拟化管理。

  2.基础管理层

  基础管理层是云存储核心的部分。该层通过集群存储、分布式存储和网格存储等技术,实现众多存储设备之间的协同工作,对外提供统一的存储访问服务。

  3.应用接口层

  是由众多的第三方软硬件厂商提供的插件层。运营单位可以根据实际业务需要,利用应用接口快速开发满足需求的应用程序,如云存储的视频监控应用、视频点播应用、网络存储的硬盘、远程数据备份应用等。

  4.访问层

  访问层提供给用户统一的访问登录接口。用户只有登录后,才可以使用云存储服务。不同的云存储系统提供的访问类型和访问手段不同,安全需求也会千差万别。用户可以根据自己的需求选择相应的服务。

  三、云存储平台设计与实现

  (一)设计方案论证比较

  GoogleGFSGoogle的数据存储与管理技术具有以下特点:基于大规模(几千到上万节点)通用PC构建集群;集群节点同时提供存储与计算服务;基于不可靠硬件环境实现了高可靠的集群软件系统;用于处理与生成海量数据集的分布式计算模型高度抽象,在数据密集型业务中应用广泛;数据管理系统不支持完整的关系模型,结构简单而轻量。

  Hadoop实现了一个分布式文件系统,简称HDFS。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力高速运算和存储。HDFS有着高容错性的特点,并且设计用来部署在低廉的硬件上。而且它提供高传输率来访问应用程序的数据,适合那些有着超大数据集的应用程序。HDFS采用master/slave架构。一个Namenod以及一定数目的Datanode组成一个HDFS集群。在集群中,每一个节点包含一个Datanode。一个文件则分割成一个或多个block,由Datanode集合提供存储block。HDFS采用java语言开发,这给运存储的部署带来很大的方便。

  Dynamo是亚马逊的key-value模式的存储平台,可用性和扩展性都很好,性能也不错:读写访问中99.9%的响应时间都在300ms内。Dynamo的可扩展性和可用性采用的都比较成熟的技术,数据分区采用改进的一致性哈希(consistenthashing)方式进行复制,利用数据对象的版本化实现一致性。复制时因为更新产生的一致性问题的维护采取NRW机制以及去中心化的复制同步协议。Dynamo是完全去中心化的系统,人工管理工作很小。Dynamo按分布式系统常用的哈希算法切分数据,分放在不同的node上。Read操作时,也是根据key的哈希值寻找对应的node。Dynamo使用了ConsistentHashing算法,node对应的不再是一个确定的hash值,而是一个hash值范围,key的hash值落在这个范围内,则顺时针沿ring找,碰到的第一个node即为所需。Dynamo对ConsistentHashing算法的改进在于:它放在环上作为一个node的是一组机器(而不是memcached把一台机器作为node),这一组机器是通过同步机制保证数据一致的。如果一个ring内的访问量大了,则可以在两个node间加入一个新node以缓解压力,这时会影响到其后继node的hash范围,需要调整数据。假设一个ring中原本只有node2、node3、node4,在加入新的node1之后,原先从node2查询的部分key将改为从node1查询,node1和node2中的数据就需要调整,主要是node1从node2中提取出属于它的数据,这样做需要选取性能压力不高的时候。Dynamo的一个node中一台机器建有一个MerkleTree,当两台机器不一致时,通过这个tree结构,可以快速定位不一致的Object来恢复数据。MerkleTree又叫HashTree,它把key分成几个range,每个range算出一个hash值,作为叶子,再一层层合并计算上去,这样,从root开始比较hash值,就可以快速找到哪几段range中的hash值变化了。

  SAN系统是在存储端构建存储的网络,将多个存储设备构成一个存储区域网络。前端的主机可以通过网络的方式访问后端的存储设备。而且,由于提供了块设备的访问方式,与前端操作系统无关。在SAN连接方式上,可以有多种选择。一种选择是使用光纤网络,能够操作快速的光纤磁盘。另外一种选择是使用以太网,采取iSCSI协议,能够运行在普通的局域网环境下。

  由于存储区域网络中的磁盘设备并没有与某一台主机绑定在一起,而是采用了非常灵活的结构,因此对于主机来说可以访问多个磁盘设备,从而能够获得性能的提升。SAN系统与分布式文件系统例如GoogleFileSystem并不是相互对立的系统,而是在构建集群系统的时候可供选择的两种方案。其中,在选择SAN系统的时候,为了应用程序的读写,还需要为应用程序提供上层的语义接口,此时就需要在SAN之上构建文件系统。而GoogleFileSystem正好是一个分布式的文件系统,因此能够建立在SAN系统之上。总体来说,SAN与分布式文件系统都可以提供类似的功能。

  (二)使用hadoop实现私有云存储

  Hadoop作为Google的开源实现,其具有以下几个优点。可扩展,不论是存储的可扩展还是计算的可扩展都是Hadoop的设计根本。经济,框架可以运行在任何普通的PC上。可靠,分布式文件系统的备份恢复机制以及MapReduce的任务监控保证了分布式处理的可靠性。高效:分布式文件系统的高效数据交互实现以及MapReduce结合LocalData处理的模式,为高效处理海量的信息作了基础准备。HDFS采用java语言开发,因此很少存在兼容性问题。Hadoop这些特点适合于企业实现私有云平台。

  所设计的云存储系统的体系结构由web客户端、Web操作系统、云存储服务器、云存储中心五个部分构成。其结构如图2所示。

  1.客户端

  客户端机群是云存储系统的前台系统,客户端机器上只需要安装浏览器就能够满足用户访问需求。用户通过浏览器访问云存储系统,其他的服务都由云存储系统在后台自动。

  2.Web操作系统

  这里的web操作系统采用了eysOS。EyeOS负责接收客户的访问请求,对客户的访问请求实施合法性验证。EyeOS中提供了大量的应用,允许用户根据自己的喜好下载和使用这些应用,实现系统的个性化配置,真正达到“一次配置,到处使用”。eysOS同时提供用户文件的存取接口,通过该接口可以将文件存储到Hadoop云端,同时可以通过它对文件进行各种操作。

  3.云存储服务器

  云存储服务器由大量的集群“云端服务器”构成,同时为Hadoop提供管理节点(NameNode),负责管理文件系统名称空间和控制外部客户机的访问。当然用户的数据也都是存储在这里的。

  4.云存储中心

  云存储中心由众多的服务器构成Hadoop的数据节点(DataNodes),负责保存文件数据,实现文件的分布式存储、负载平衡以及文件的容错控制。

  其实施过程主要包括:

  1.新建系统Hadoop用户

  Hadoop要求所有机器上hadoop的部署目录结构要相同,并且都有一个相同的用户名的帐户,所以需要每台机器建一个同名的用户。在这4台机器上建hadoop用户并加入到root组,密码:hadoop,默认路径/home/hadoop/。

  2.SSH设置

  Hadoop需要namenode到datanode的无密码SSH,所以需要设置namenode到其他3台datanode的无密码公钥认证方式的SSH。设置完成后,测试一下namenode到各个节点的SSH链接,包括到本机,如果不需要输入密码就可以SSH登录,说明设置成功了。

  3.安装JDK

  到sun网站下载JDK安装包,并在每台机器的root用户下面安装。安装软件会将JDK自动安装到/usr/java/jdk1.6.0_26目录下。安装完成后再设置JDK的环境变量。考虑到JDK可能会有其他系统用户也会用到,建议将环境变量直接设置在/etc/profile中。

  4.Hadoop集群配置

  用hadoop用户登录namenode,在namenode上下载hadoop-0.20.2.tar.gz,将其解压到/home/hadoop/目录下,然后在hadoop下创建tmp文件夹并把Hadoop的安装路径添加到/etc/profile中修改/etc/profile文件(配置java环境变量的文件),设置HADOOP_HOME和PATH的路径,并使其有效。另外在datanode上也需要如namenode一样修改配置HADOOP_HOME和PATH。

  编辑Hadoop配置文件。hadoop配置文件在conf目录下,包括:hadoop-env.sh:配置JAVA_HOME路径;core-site.xml:配置Common组件的属性;hdfs-site.xml:配置HDFS组件的属性;mapred-site.xml:配置map-reduce组件的属性;配置masters文件,加入namenode的ip地址;配置slaves文件,加入所有datanode的ip地址等。

1
3