当前位置:首页 » 存储配置 » moosefs适合小文件存储

moosefs适合小文件存储

发布时间: 2023-09-03 20:50:20

A. 浅析 Haystack 图片存储系统

Facebook在2010年的时候发表过一篇在分布式存储系统领域很有名的一篇文章《Finding a needle in Haystack》来描述他们的图片存储系统,Haystack 存储了超过2600亿张图片,大约占了20TB的数据,用户每周都会上传10亿张图片,高峰时期的并发量在100万以上(这是2010年的数据,现在很有可能上了一个数量级)。

在这个数量级之下,需要考虑的问题不仅仅是高吞吐,低延时,保证数据的一致性,还要考虑如何能节省流量,容易扩展,容错等等。下面我们就来看下Haystack是怎样满足这些分布式系统的要素的。

图片存储系统的最大特点是数据只写一次,读取频繁,不会修改,很少删除。Facebook 一开始的存储系统是基于NFS的NAS(Network Attached Storage), 但这种基于 POSIX 的文件系统无法支撑如此大的负载。其中主要的问题在于在图片寻址的过程中会产生过多的磁盘操作。

我们知道从传统文件系统里面读取一个文件需要至少三次磁盘操作,第一次从硬盘中读取目录的 metadata 到内存中,然后读取inode到内存,最后才从磁盘中读取文件内容。

再者这些metadata里面包含了大量比如权限控制这些对于图片存储系统来说无用的信息,也浪费了大量的磁盘空间。当像图片这样的静态资源服务出现瓶颈的时候,自然就会想到使用 CDN (Content Delivery Networks) 系统。在传统的设计中,一个图片的 HTTP 请求发送后, 如果 CDN 有这个资源的缓存,就会立马返回,反之 ,CDN 会将根据请求的 URL 从存储系统里面读取图片,更新缓存,然后再返回。在这样的设计中,CDN 确实可以很有效地处理热点图片的请求。

但像 Facebook 这样的社交网络中,有大量的请求是针对那些非热点或者老内容的,用户在请求那些长尾 (long tail) 内容时将没有优化。当然,有些同学会说,那我可以将所有的图片都缓存到 CDN,那确实会解决这个问题,但将会极大地增加资源的开销。

为了减少那些直接 hit 到存储系统的请求的磁盘操作,他们想到在第一次读取文件的时候把filename到 file handle 的映射缓存到内存,在下一次读取文件的时候,会调用自定义的open_by_filehandle来减少磁盘操作,但这对于long tail的读取问题依然存在,因为这些文件的映射关系没有提前放在内存中。

于是,Facebook 决定从头研发图片存储系统,从前面我们可以看出,Haystack 的核心任务就是在处理每一次的请求中尽可能地减少磁盘操作。我们先来描述下 Haystack 读取和上传图片流程是怎样的,然后再来看其中的细节是如何处理的。

当发起一次图片读取请求的时候会通过一个事先构建好的 URL

http://///这个 URL 实际上显示出了访问的顺序,先从外部 CDN 读取,如果没有,访问内部 Cache,如果还是没有,就直接访问 Store Machine.(URL最后一部分提供了图片的唯一标识)

用户上传图片的时候先会上传到 web 服务器, 然后服务器从Directory中找到一个可写的physical volume,最后服务器会给这个图片生成一个唯一ID, 然后写入到这个logical volume 所对应的所有physical volume中。

上面的过程中出现了几个陌生的名词,别着急,我们一个个来看。我们先来介绍 Haystack 的三个主要组件:

Store,Directory,Cache.

Store 是核心组件,负责图片的存储。Store 的容量决定了这个存储系统的容量,整个 Store 组件由很多个 store machine 组成,store machine 的容量又由一系列的 physical volume 决定。

例:要提供 10TB容量,我们可分摊到 100 个 physical volume,每个 physical volume 提供 100 GB 的容量。这时候有的同学会问,那么数据冗余是怎么解决的呢?Haystack 借鉴了普通硬盘中的 logical volume 的概念,将不同机器上的多个 physical

volume 组成了一个虚拟的 logical volume。

当存储一张图片的时候,实际上是存储到了 logical volume 对应的所有 physical volume中。它们之间的映射关系连同其它的metadata都存储在 Directory组件中。每个physicalvolume 中都存储了上百万张图片,可以把它想象成一个巨大的 append-only 文件,然后通过 offset 来访问文件。

我们来详细看下这个文件到底是如何存放的,如何来达到减少磁盘操作目的的。对于每个这样超大的文件,都由一个 superblock 和一系列的 needles 组成,每个 needle 就是每张图片的信息。看下下面这张图,它的结构就一目了然了。

每个needle包含的细节信息有图片ID,图片大小,图片数据等等,还会有数据校验的属性。每个 store machine 都有若干个physical volume大文件, 为了提高检索needles 的速度,在内存里为每个physical volume都维护了一张图片I 到needle之间的映射表。

当store machine接收到读取请求时,首先从内存映射表中找到相应的metadata, 然后通过offset从硬盘中读取到整个needle, 通过数据校验后返回。如果接收到的是上传请求,会把组织好的needle追加到所有对应的physical volume文件中,并且更新内存里的映射表。如果是删除操作的话,我们注意到下图中有个Flags标志位其实就是用来标记是否是删除的状态,这样一来就很简单,直接在这个位置标记好,系统会在后面执行compaction 操作回收这些空间。

讲到这里,一个正常流程的存储过程已经很清楚了。这时候我们就需要考虑分布式系统一个必不可少的特性:容错性。当一个 store machine 宕机的时候,理论上我们可以读取所有的 physical volume 来重新构建内存映射表,但这就需要从磁盘重新读取 TB 级别的数据,显然是非常耗时和不高效的。为了解决这个问题,每个 store machine 为每个 physical volume 都维护了一个索引文件。这个索引文件类似于游戏中的存档点 (checkpoint),它的结构和 physical volume 文件类似,保存了查找每个 needle 所需的属性。为了性能,索引文件是异步更新的(写的时候异步更新,删的时候压根不会更新),这就会带来一个问题:索引文件有可能不是最新的。之前我们提到过,physical volume 文件是一个 append-only 的文件,索引文件也是。所以我们只需要在重启 store machine 的时候,从后向前扫描 physical volume 文件找到那几个没有被索引的文件,加到索引里去就行了。对于被删除的文件,在真正读取完整 needle 数据的时候,通过检查删除标志位来更新内存映射表。

我们之前提到可以使用 CDN 来缓解系统压力,但它无法很好地解决非热点图片的问题,并且如果 CDN 节点出现故障的话,没有 Cache 这一层会对底层的存储系统 Store 产生巨大的压力。Cache 组件主要缓存了最近上传的图片,它的概念很简单,实际上是一个分布式 hash table,通过图片的 ID 为 key 可以找到对应的数据。Cache 接收从 CDN 或者浏览器直接发来的 HTTP 请求,但只有在以下两个条件都满足的情况下才会缓存图片:

1) 请求来自用户浏览器而不是来自 CDN

2) 请求的 store machine 是可写的

这听上去有些费解,条件 1 的原因是如果一个请求在 CDN 缓存中 miss 其实也会在 Cache 中 miss (如果一张图片成为热门的话,那也能在 CDN 找到),条件 2 的原因则是避免让可写的 store machine 进行大量读操作,因为图片通常在刚刚上传后会被大量读取,文件系统通常在只读或者只写而不是既读又写的时候性能比较好。

如果没有 Cache 的话,可写的 store machine 将会同时处理写操作以及大量的读操作,会导致性能的急剧下降。

现在我们只剩下 Directory 组件没有讲了。除了之前我们提到的存储了 physical volume 到 logical volume 的映射关系以及图片 ID 到 logical physical 的映射关系,它还提供负载均衡服务以及为每个操作选择具体的 volume (因为写操作的对象是 logical volume,读操作的对象是 physical volume), 它还决定了一个请求是被 CDN 处理还是被 Cache 处理。Directory 还可以标记逻辑卷的状态,在运维需要或者空间满了的时候可以标记为只读状态。当往 Store 加新机器的时候,这些机器就会标记成可写的,只有可写的机器才能接受图片上传请求。这里有一个细节需要注意,图片 ID 到 logical physical 的映射表肯定无法存放在单机内存,文章中也没有交代具体实现。我们猜想可以使用 MySQL 分片集群和加上 Memcached 集群来实现。总的来讲,Directory 实际上根据 metadata,然后结合各种策略,实现了整个系统的调度器。

本文描述了 Haystack 图片存储系统的主要脉络,当然还有许多细节没有提到,比如整个系统的容错机制,如何实现批量写操作等等。经过这几年的发展,我们相信 Haystack 肯定也进行了更多的优化,现在一些开源的分布式存储系统也被应用到实际的生产系统中,比如淘宝的 TFS,MooseFS 等等。我们会在后续的文章中比较这些系统之间的异同,总结出解决其中典型问题的通用方法。

B. 分布式存储有哪些

问题一:当前主流分布式文件系统有哪些?各有什么优缺点 目前几个主流的分布式文件系统除GPFS外,还有PVFS、Lustre、PanFS、GoogleFS等。
1.PVFS(Parallel Virtual File System)项目是Clemson大学为了运行linux集群而创建的一个开源项目,目前PVFS还存在以下不足:
1)单一管理节点:只有一个管理节点来管理元数据,当集群系统达到一定的规模之后,管理节点将可能出现过度繁忙的情况,这时管理节点将成为系统瓶颈;
2)对数据的存储缺乏容错机制:当某一I/O节点无法工作时,数据将出现不可用的情况;
3)静态配置:对PVFS的配置只能在启动前进行,一旦系统运行则不可再更改原先的配置。
2.Lustre文件系统是一个基于对象存储的分布式文件系统,此项目于1999年在Carnegie Mellon University启动,Lustre也是一个开源项目。它只有两个元数据管理节点,同PVFS类似,当系统达到一定的规模之后,管理节点会成为Lustre系统中的瓶颈。
3.PanFS(Panasas File System)是Panasas公司用于管理自己的集群存储系统的分布式文件系统。
4.GoogleFS(Google File System)是Google公司为了满足公司内部的数据处理需要而设计的一套分布式文件系统。
5.相对其它的文件系统,GPFS的主要优点有以下三点:
1)使用分布式锁管理和大数据块策略支持更大规模的集群系统,文件系统的令牌管理器为块、inode、属性和目录项建立细粒度的锁,第一个获得锁的客户将负责维护相应共享对象的一致性管理,这减少了元数据服务器的负担;
2)拥有多个元数据服务器,元数据也是分布式,使得元数据的管理不再是系统瓶颈;
3)令牌管理以字节作为锁的最小单位,也就是说除非两个请求访问的是同一文件的同一字节数据,对于数据的访问请求永远不会冲突.

问题二:分布式存储是什么?选择什么样的分布式存储更好? 分布式存储系统,是将数据分散存储在多 *** 立的设备上。传统的网络存储系统采用集中的存储服务器存放所有数据,存储服务器成为系统性能的瓶颈,也是可靠性和安全性的焦点,不能满足大规模存储应用的需要。分布式网络存储系统采用可扩展的系统结构,利用多台存储服务器分担存储负荷,利用位置服务器定位存储信息,它不但提高了系统的可靠性、可用性和存取效率,还易于扩展。
联想超融合ThinkCloud AIO超融合云一体机是联想针对企业级用户推出的核心产品。ThinkCloud AIO超融合云一体机实现了对云管理平台、计算、网络和存储系统的无缝集成,构建了云计算基础设施即服务的一站式解决方案,为用户提供了一个高度简化的一站式基础设施云平台。这不仅使得业务部署上线从周缩短到天,而且与企业应用软件、中间件及数据库软件完全解耦,能够有效提升企业IT基础设施运维管理的效率和关键应用的性能

问题三:什么是分布式存储系统? 就是将数据分散存储在多 *** 立的设备上

问题四:什么是分布式数据存储 定义:
分布式数据库是指利用高速计算机网络将物理上分散的多个数据存储单元连接起来组成一个逻辑上统一的数据库。分布式数据库的基本思想是将原来集中式数据库中的数据分散存储到多个通过网络连接的数据存储节点上,以获取更大的存储容量和更高的并发访问量。近年来,随着数据量的高速增长,分布式数据库技术也得到了快速的发展,传统的关系型数据库开始从集中式模型向分布式架构发展,基于关系型的分布式数据库在保留了传统数据库的数据模型和基本特征下,从集中式存储走向分布式存储,从集中式计算走向分布式计算。
特点:
1.高可扩展性:分布式数据库必须具有高可扩展性,能够动态地增添存储节点以实现存储容量的线性扩展。
2 高并发性:分布式数据库必须及时响应大规模用户的读/写请求,能对海量数据进行随机读/写。
3. 高可用性:分布式数据库必须提供容错机制,能够实现对数据的冗余备份,保证数据和服务的高度可靠性。

问题五:分布式文件系统有哪些主要的类别? 分布式存储在大数据、云计算、虚拟化场景都有勇武之地,在大部分场景还至关重要。munity.emc/message/655951 下面简要介绍*nix平台下分布式文件系统的发展历史:
1、单机文件系统
用于操作系统和应用程序的本地存储。
2、网络文件系统(简称:NAS)
基于现有以太网架构,实现不同服务器之间传统文件系统数据共享。
3、集群文件系统
在共享存储基础上,通过集群锁,实现不同服务器能够共用一个传统文件系统。

4、分布式文件系统
在传统文件系统上,通过额外模块实现数据跨服务器分布,并且自身集成raid保护功能,可以保证多台服务器同时访问、修改同一个文件系统。性能优越,扩展性很好,成本低廉。

问题六:分布式文件系统和分布式数据库有什么不同 分布式文件系统(dfs)和分布式数据库都支持存入,取出和删除。但是分布式文件系统比较暴力,可以当做key/value的存取。分布式数据库涉及精炼的数据,传统的分布式关系型数据库会定义数据元组的schema,存入取出删除的粒度较小。
分布式文件系统现在比较出名的有GFS(未开源),HDFS(Hadoop distributed file system)。分布式数据库现在出名的有Hbase,oceanbase。其中Hbase是基于HDFS,而oceanbase是自己内部实现的分布式文件系统,在此也可以说分布式数据库以分布式文件系统做基础存储。

问题七:分布式存储有哪些 华为的fusionstorage属于分布式 您好,很高兴能帮助您,首先,FusionDrive其实是一块1TB或3TB机械硬盘跟一块128GB三星830固态硬盘的组合。我们都知道,很多超极本同样采用了混合型硬盘,但是固态硬盘部分的容量大都只有8GB到32GB之间,这个区间无法作为系统盘来使用,只能作

问题八:linux下常用的分布式文件系统有哪些 这他妈不是腾讯今年的笔试题么
NFS(tldp/HOWTO/NFS-HOWTO/index)
网络文件系统是FreeBSD支持的文件系统中的一种,也被称为NFS。
NFS允许一个系统在网络上与它人共享目录和文件。通过使用NFS, 用户和程序可以象访问本地文件一样访问远端系统上的文件。它的好处是:
1、本地工作站使用更少的磁盘空间,因为通常的数据可以存放在一台机器上而且可以通过网络访问到。
2、用户不必在每个网络上机器里面都有一个home目录。home目录可以被放在NFS服务器上并且在网络上处处可用。
3、诸如软驱、CDROM、和ZIP之类的存储设备可以在网络上面被别的机器使用。可以减少整个网络上的可移动介质设备的数量。
开发语言c/c++,可跨平台运行。
OpenAFS(openafs)
OpenAFS是一套开放源代码的分布式文件系统,允许系统之间通过局域网和广域网来分享档案和资源。OpenAFS是围绕一组叫做cell的文件服务器组织的,每个服务器的标识通常是隐藏在文件系统中,从AFS客户机登陆的用户将分辨不出他们在那个服务器上运行,因为从用户的角度上看,他们想在有识别的Unix文件系统语义的单个系统上运行。
文件系统内容通常都是跨cell复制,一便一个硬盘的失效不会损害OpenAFS客户机上的运行。OpenAFS需要高达1GB的大容量客户机缓存,以允许访问经常使用的文件。它是一个十分安全的基于kerbero的系统,它使用访问控制列表(ACL)以便可以进行细粒度的访问,这不是基于通常的Linux和Unix安全模型。开发协议IBM Public,运行在linux下。
MooseFs(derf.homelinux)
Moose File System是一个具备容错功能的网路分布式文件统,它将数据分布在网络中的不同服务器上,MooseFs通过FUSE使之看起来就 是一个Unix的文件系统。但有一点问题,它还是不能解决单点故障的问题。开发语言perl,可跨平台操作。
pNFS(pnfs)
网络文件系统(Network FileSystem,NFS)是大多数局域网(LAN)的重要的组成部分。但NFS不适用于高性能计算中苛刻的输入书橱密集型程序,至少以前是这样。NFS标准的罪行修改纳入了Parallel NFS(pNFS),它是文件共享的并行实现,将传输速率提高了几个数量级。
开发语言c/c++,运行在linu下。
googleFs
据说是一个比较不错的一个可扩展分布式文件系统,用于大型的,分布式的,对大量数据进行访问的应用。它运行于廉价的普通硬件上,但可以提供容错功能,它可以给大量的用户提供性能较高的服务。google自己开发的。

问题九:分布式存储都有哪些,并阐述其基本实现原理 神州云科 DCN NCS DFS2000(简称DFS2000)系列是面向大数据的存储系统,采用分布式架构,真正的分布式、全对称群集体系结构,将模块化存储节点与数据和存储管理软件相结合,跨节点的客户端连接负载均衡,自动平衡容量和性能,优化集群资源,3-144节点无缝扩展,容量、性能岁节点增加而线性增长,在 60 秒钟内添加一个节点以扩展性能和容量。

问题十:linux 分布式系统都有哪些? 常见的分布式文件系统有,GFS、HDFS、Lustre 、Ceph 、GridFS 、mogileFS、TFS、FastDFS等。各自适用于不同的领域。它们都不是系统级的分布式文件系统,而是应用级的分布式文件存储服务。
GFS(Google File System)
--------------------------------------
Google公司为了满足本公司需求而开发的基于Linux的专有分布式文件系统。。尽管Google公布了该系统的一些技术细节,但Google并没有将该系统的软件部分作为开源软件发布。
下面分布式文件系统都是类 GFS的产品。
HDFS
--------------------------------------
Hadoop 实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。 Hadoop是Apache Lucene创始人Doug Cutting开发的使用广泛的文本搜索库。它起源于Apache Nutch,后者是一个开源的网络搜索引擎,本身也是Luene项目的一部分。Aapche Hadoop架构是MapRece算法的一种开源应用,是Google开创其帝国的重要基石。
Ceph
---------------------------------------
是加州大学圣克鲁兹分校的Sage weil攻读博士时开发的分布式文件系统。并使用Ceph完成了他的论文。
说 ceph 性能最高,C++编写的代码,支持Fuse,并且没有单点故障依赖, 于是下载安装, 由于 ceph 使用 btrfs 文件系统, 而btrfs 文件系统需要 Linux 2.6.34 以上的内核才支持。
可是ceph太不成熟了,它基于的btrfs本身就不成熟,它的官方网站上也明确指出不要把ceph用在生产环境中。
Lustre
---------------------------------------
Lustre是一个大规模的、安全可靠的,具备高可用性的集群文件系统,它是由SUN公司开发和维护的。
该项目主要的目的就是开发下一代的集群文件系统,可以支持超过10000个节点,数以PB的数据量存储系统。
目前Lustre已经运用在一些领域,例如HP SFS产品等。

C. 互联网如何海量存储数据

目前存储海量数据的技术主要包括NoSQL、分布式文件系统、和传统关系型数据库。随着互联网行业不断的发展,产生的数据量越来越多,并且这些数据的特点是半结构化和非结构化,数据很可能是不精确的,易变的。这样传统关系型数据库就无法发挥它的优势。因此,目前互联网行业偏向于使用NoSQL和分布式文件系统来存储海量数据。

下面介绍下常用的NoSQL和分布式文件系统。
NoSQL
互联网行业常用的NoSQL有:HBase、MongoDB、Couchbase、LevelDB。

HBase是Apache Hadoop的子项目,理论依据为Google论文 Bigtable: A Distributed Storage System for Structured Data开发的。HBase适合存储半结构化或非结构化的数据。HBase的数据模型是稀疏的、分布式的、持久稳固的多维map。HBase也有行和列的概念,这是与RDBMS相同的地方,但却又不同。HBase底层采用HDFS作为文件系统,具有高可靠性、高性能。

MongoDB是一种支持高性能数据存储的开源文档型数据库。支持嵌入式数据模型以减少对数据库系统的I/O、利用索引实现快速查询,并且嵌入式文档和集合也支持索引,它复制能力被称作复制集(replica set),提供了自动的故障迁移和数据冗余。MongoDB的分片策略将数据分布在服务器集群上。

Couchbase这种NoSQL有三个重要的组件:Couchbase服务器、Couchbase Gateway、Couchbase Lite。Couchbase服务器,支持横向扩展,面向文档的数据库,支持键值操作,类似于SQL查询和内置的全文搜索;Couchbase Gateway提供了用于RESTful和流式访问数据的应用层API。Couchbase Lite是一款面向移动设备和“边缘”系统的嵌入式数据库。Couchbase支持千万级海量数据存储
分布式文件系统
如果针对单个大文件,譬如超过100MB的文件,使用NoSQL存储就不适当了。使用分布式文件系统的优势在于,分布式文件系统隔离底层数据存储和分布的细节,展示给用户的是一个统一的逻辑视图。常用的分布式文件系统有Google File System、HDFS、MooseFS、Ceph、GlusterFS、Lustre等。

相比过去打电话、发短信、用彩铃的“老三样”,移动互联网的发展使得人们可以随时随地通过刷微博、看视频、微信聊天、浏览网页、地图导航、网上购物、外卖订餐等,这些业务的海量数据都构建在大规模网络云资源池之上。当14亿中国人把衣食住行搬上移动互联网的同时,也给网络云资源池带来巨大业务挑战。

首先,用户需求动态变化,传统业务流量主要是端到端模式,较为稳定;而互联网流量易受热点内容牵引,数据流量流向复杂和规模多变:比如双十一购物狂潮,电商平台订单创建峰值达到58.3万笔,要求通信网络提供高并发支持;又如优酷春节期间有超过23亿人次上网刷剧、抖音拜年短视频增长超10倍,需要通信网络能够灵活扩充带宽。面对用户动态多变的需求,通信网络需要具备快速洞察和响应用户需求的能力,提供高效、弹性、智能的数据服务。

“随着通信网络管道十倍百倍加粗、节点数从千万级逐渐跃升至百亿千亿级,如何‘接得住、存得下’海量数据,成为网络云资源池建设面临的巨大考验”,李辉表示。一直以来,作为新数据存储首倡者和引领者,浪潮存储携手通信行业用户,不断 探索 提速通信网络云基础设施的各种姿势。

早在2018年,浪潮存储就参与了通信行业基础设施建设,四年内累计交付约5000套存储产品,涵盖全闪存储、高端存储、分布式存储等明星产品。其中在网络云建设中,浪潮存储已连续两年两次中标全球最大的NFV网络云项目,其中在网络云二期建设中,浪潮存储提供数千节点,为上层网元、应用提供高效数据服务。在最新的NFV三期项目中,浪潮存储也已中标。

能够与通信用户在网络云建设中多次握手,背后是浪潮存储的持续技术投入与创新。浪潮存储6年内投入超30亿研发经费,开发了业界首个“多合一”极简架构的浪潮并行融合存储系统。此存储系统能够统筹管理数千个节点,实现性能、容量线性扩展;同时基于浪潮iTurbo智能加速引擎的智能IO均衡、智能资源调度、智能元数据管理等功能,与自研NVMe SSD闪存盘进行系统级别联调优化,让百万级IO均衡落盘且路径更短,将存储系统性能发挥到极致。

“为了确保全球最大规模的网络云正常上线运行,我们联合用户对存储集群展开了长达数月的魔鬼测试”,浪潮存储工程师表示。网络云的IO以虚拟机数据和上层应用数据为主,浪潮按照每个存储集群支持15000台虚机进行配置,分别对单卷随机读写、顺序写、混合读写以及全系统随机读写的IO、带宽、时延等指标进行了360无死角测试,达到了通信用户提出的单卷、系统性能不低于4万和12万IOPS、时延小于3ms的要求,产品成熟度得到了验证。

以通信行业为例,2020年全国移动互联网接入流量1656亿GB,相当于中国14亿人每人消耗118GB数据;其中春节期间,移动互联网更是创下7天消耗36亿GB数据流量的记录,还“捎带”打了548亿分钟电话、发送212亿条短信……海量实时数据洪流,在网络云资源池(NFV)支撑下收放自如,其中分布式存储平台发挥了作用。如此样板工程,其巨大示范及拉动作用不言而喻。

D. 互联网如何海量存储数据

目前存储海量数据的技术主要包括NoSQL、分布式文件系统、和传统关系型数据库。随着互联网行业不断的发展,产生的数据量越来越多,并且这些数据的特点是半结构化和非结构化,数据很可能是不精确的,易变的。这样传统关系型数据库就无法发挥它的优势。因此,目前互联网大正蔽拦行业偏向于使用NoSQL和分布式文件系统来存储海量数据。

下面介绍下常用的NoSQL和分布式文件系统。

NoSQL

互联网行业常用的NoSQL有:HBase、MongoDB、Couchbase、LevelDB。

HBase是ApacheHadoop的子项目,理论依据为Google论文Bigtable:开发的。HBase适合存储半结构化或非结构化的数据。HBase的数据模型是稀疏的、分布式的、持久稳固的多维map。HBase也有行和列的概念,这是与RDBMS相同的地方,但却又不同。HBase底层采用HDFS作为文件系统,具有高可靠性、高性能。

MongoDB是一种支持高性能数据存储的开源文档型数据库。支持嵌入式数据模型以减少对数据库系统的I/O、利用索引实现快速查询,并且嵌入式文档和集合也支持索引,它复制能力被称作复制集(replicaset),提供了自动的故障迁移和数据冗余。MongoDB的分片策略将数据分布在服务器集群上。

Couchbase这种NoSQL有三个重滚并悔要的组件:Couchbase服务器、CouchbaseGateway、CouchbaseLite。Couchbase服务器,支持横向扩展,面向文档的数据库,支持键值操作,类似于SQL查询和内置的全文搜索;CouchbaseGateway提供了用于RESTful和流式访问数据的应用层API。CouchbaseLite是一款面向移动设备和“边缘”系统的嵌入式数据库。Couchbase支持千万级海量数据存储

分布式文件系统

如果针对单个大文件,譬如超过100MB的文件,使用NoSQL存储就不适当了。使用分布式文件系统的优势在于,分布式文件系统隔离底层数据存储和分布的细节,展示给用户的是一个统一的逻辑视图。常用的分布式文件系统有GoogleFileSystem、HDFS、MooseFS、Ceph、GlusterFS、Lustre等。

E. NFS 深入配置

1.1 NFS配置参数权限

参数名称
参数用途

rw
read-write,表示可读写权限

ro
read-only,表示只读权限

sync
请求或写入数据时,数据同步写入到硬盘才完成

async
异步写到远程缓冲区

all_squash
不管客户端什么用户,到服务端都会被压缩成匿名用户

anonuid
匿名用户的UID

anongid
匿名用户的GID

在配置文件内设置共享目录时所给予的权限:
[root@nfs01 ~]$ cat /etc/exports
/data 172.16.1.0/24(rw,sync) 10.0.0.0/24(ro)

配置好NFS服务后,/var/lib/nfs/etab文件中可以看到的配置参数以及默认自带的参数:
[root@nfs01 ~]$ cat /var/lib/nfs/etab
/data
172.16.1.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,
no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,
anongid=65534,sec=sys,rw,secure,root_squash,no_all_squash

1.1.1 更改NFS默认用户
1.1.1.1 nfs01服务端NFS、以及所有客户端:
[root@nfs01 ~] id www
uid=1111(www) gid=1111(www) 组=1111(www)

1.1.1.2 服务端NFS特殊配置
配置文件增加如下内容:
[root@nfs01 ~]$ tail -2 /etc/exports
/data 172.16.1.0/24(rw,sync,all_squash,anonuid=1111,anongid=1111)
/data1 10.0.0.0/24(ro)

共享目录更改用户和用户组:
[root@nfs01 ~] ls -ld /data
drwxr-xr-x 2 www www 70 4月 18 10:05 /data

1.1.1.3 服务端NFS重启
[root@nfs01 ~]$ systemctl reload nfs

1.1.1.4 每个客户端挂载
[root@web01 ~] df -h
文件系统 容量 已用 可用 已用% 挂载点
172.16.1.31:/data 19G 1.8G 18G 10% /data

新创建文件验证用户名:
[root@web01 /data]# touch new_web01.txt
[root@web01 /data]# ls -l
总用量 0
-rw-r--r-- 1 www www 0 4月 18 11:01 new_web01.txt
-rw-r--r-- 1 www www 0 4月 17 11:59 oldboy.txt
-rw-r--r-- 1 www www 0 4月 17 12:30 oldgirl.txt

1.2 NFS服务重点知识梳理
  当多个NFS客户端访问服务器端读写文件时,需要具有以下几个权限:

NFS服务器/etc/exports设置需要开放许可写入的权限,即服务器端的共享权限
NFS服务器实际要共享的NFS目录权限具有可写入w的权限,即服务器端本地目录的安全权限
每台机器都对应存在和NFS默认配置UID的相同UID的用户

下表列出了常用的重点NFS服务文件或命令。

NFS常用路径
说明

/etc/exports
NFS服务主配置文件,配置NFS具体共享服务的地点,默认内容为空

/var/lib/nfs/etab
NFS配置文件的完整参数设定的文件

/proc/mounts
客户端的挂载参数

1.3 NFS客户端挂载深入
1.3.1 mount -o 参数选项及系统默认设置

参数
参数意义
系统默认值

suid/nosuid
当挂载的文件系统上有任何SUID的程序时,只要使用nosuid就能够取消设置SUID的功能
suid

rw/ro
可以指定文件系统是只读(ro)或可读写(rw)
rw

dev/nodev
是否可以保留装置文件的特殊功能
dev

exec/noexec
是否具有执行文件的权限
exec

user/nouser
是否允许用户拥有文件的挂载与卸载功能
nouser

auto/noauto
auto指的是“mount -a”时会不会被挂载的项目,如果不需要这个分区随时被挂载,可以设置为noauto
auto

1.3.2 mount -o 参数详细说明

参数选项
说明

async
涉及文件系统I/O的操作都是异步处理,即不会同步写到磁盘,能提高性能,但会降低数据安全。

sync
有I/O操作时,都会同步处理I/O,会降低性能,但数据比较安全。

atime
在每一次数据访问时,会更新访问文件的时间戳,是默认选项,在高并发的情况下,可以通过添加noatime来取消默认项。

ro
以只读的方式挂载一个文件系统

rw
以可读写的方式挂载一个文件系统

auto
能够被自动挂载通过-a选项

noauto
不会自动挂载文件系统

defaults
这是fstab里的默认值,包括rw、suid、dev、exec、auto、nouser、async

exec
允许文件系统执行二进制文件,取消这个参数,可以提升系统安全性。

noexec
在挂载的文件系统中不允许执行任何二进制程序,进仅对二进制程序有效。

noatime
访问文件时不更新文件的时间戳,高并发情况下,一般使用该参数

nodiratime
不更新文件系统上的directory inode时间戳,高并发环境,推荐显式应用该选项,可以提高系统I/O性能。

nosuid
不允许set-user-identifier or set-group-identifier位生效。

suid
允许set-user-identifier or set-group-identifier位生效。

nouser
禁止一个普通用户挂载该文件系统,这是默认挂载时的默认选项。

remount
尝试重新挂载一个已经挂载了的文件系统,这通常被用来改变一个文件系统的挂载标志,从而使得一个只读文件系统变的可写,这个动作不会改变设备或者挂载点。当系统故障时进人single或rescue模式修复系统时,会发现根文件系统经常会变成只读文件系统,不允许修改,此时该命令就派上用场了。具体命令为:mount -o remount,rw /,表示将根文件系统重新挂载使得可写。single或rescue模式修复系统时这个命令十分重要。

dirsync
目录更新时同步写人磁盘。

1.3.3 企业生产场景NFS共享存储优化

硬件:使用ssd/sas磁盘,可以买多块,制作成raid10。
NFS服务器端配置:

/data 10.0.0.0/24(rw,sync,all_squash,anonuid=65534,anongid=65534)

NFS客户端挂载优化配置命令:

mount -t nfs -o nosuid,noexec,nodev,noatime,nodiratime,rsize=131072,
wsize=131072 172.16.1.31:/data /mnt <===兼顾安全性能

对NFS服务的所有服务器内核进行优化,执行命令如下:

cat >>/etc/sysctl.conf <<EOF
net.core.wmen_default = 8388608
net.core.rmen_default = 8388608
net.core.wmen_max = 16777216
net.core.rmen_max = 16777216
EOF

执行sysctl -p 生效

大型网站NFS网络文件系统的替代软件为分布式文件系统,如:Moosefs(mfs)、GlusterFS、FastDFS。

1.4 NFS系统应用的优缺点
1.4.1 优点

简单,容易上手,容易掌握。
NFS文件系统内数据是在文件系统之上的,即数据是能看得见的。
部署快速维护简单方便,且可控,满足需求就是最好的。
可靠,从软件层面上看,数据可靠性高,经久耐用。
服务非常稳定。

1.4.2 缺点(局限)

存在单点故障,如果NFS服务端宕机了,所有客户端都不能访问共享目录。
在大数据高并发的场合,NFS效率、性能有限。
客户端认证是基于IP和主机名的,权限要根据ID识别,安全性一般。
NFS数据是明文的,NFS本身不对数据完整性进行验证。
多台客户机挂载一个NFS服务器时,连接管理维护麻烦。

1.4.3 解决性能问题的方法

使用CDN加速以及自己搭建文件缓存服务(squid、nginx、varnish)。
把多个目录分配到不同的NFS服务器上。
弃用NFS(即读写分离)。

使用分布式文件系统。

热点内容
编译器咋用 发布:2025-08-28 14:29:03 浏览:688
新闻访问类型 发布:2025-08-28 14:22:25 浏览:937
从零基础学习编程 发布:2025-08-28 13:57:34 浏览:381
数据库在国外 发布:2025-08-28 13:42:53 浏览:891
androiddialog创建 发布:2025-08-28 13:09:26 浏览:950
初级服务器是指什么 发布:2025-08-28 13:08:39 浏览:100
微软dns服务器地址 发布:2025-08-28 13:07:20 浏览:607
2013款荣放顶配有哪些配置 发布:2025-08-28 13:05:32 浏览:667
dedecmssql注入漏洞 发布:2025-08-28 12:54:27 浏览:397
dash官网搭建服务器 发布:2025-08-28 12:45:17 浏览:746