LizardFS介绍


LizardFS特点

  • support for many data centers and media types,支持多数据中心和多种介质
  • fast snapshots, 快速快照
  • transparent trash bin,透明的垃圾处理
  • QoS mechanisms,Quality of Service (QoS)服务质量机制
  • quotas,支持配额
  • 一系列方便运维的监控工具

Lizardfs功能列表

功能 举例或说明
支持多种磁盘介质 HDD或SSD
快照 基于COW的快照
QOS 利用带宽限制或流量限制保证服务质量
冗余策略 标准副本、XOR副本、EC
异地副本 支持跨数据中心数据副本
支持LTO库 支持后端为LTO存储
配额 提供告警信息值和严格限制值,当用户达到严格限制值便不能写新数据
兼容POSIX 提供了POSIX文件系统的所有特性
垃圾处理机制 提供类似Windows回收站的垃圾处理机制
监控 提供命令行接口和基于网页的图形化的监控
支持Hadoop 可用Hadoop任务直接访问Lizardfs集群上的数据
丰富的访问控制列表 支持Linux、MacOSX、Windows的ACLs

垃圾处理机制,提供类似Windows回收站的垃圾处理机制,并可对单个文件或文件夹设置一个单独的垃圾时间,在达到这个垃圾时间之前均可恢复文件或文件夹

Lizardfs架构


lizardfs将元数据(比如文件名、修改时间戳、文件目录树等)和数据分开保存。元数据保存在元数据服务器上(meta data server),数据保存在chunk server上。
典型的安装包含:
(1)至少2个元数据服务器,这两个服务器是主备模式以方便故障恢复。他们的角色任务是管理整个集群,所以活动的元数据服务器经常被叫做master server,备服务器则保持和主服务器同步,因此又叫shadow master servers。备服务器是随时准备好接替主服务器的。
元数据服务器推荐配置:
快速的CPU、至少32GB内存、至少一个SSD盘用于存元数据(几个G的盘就OK)。
(2)一定数量的chunk servers则用于存数据。每个文件被切分成64M的块,被称为chunk,这些chunk被存放在chunk servers上。推荐chunk server配置是要有大容量的JBOD或者RAID配置。CPU和RAM不是十分重要。至少要有2个chunk servers,也可以多达几百个。
(3)Client是使用存在Lizardfs上数据的机器。这些机器使用lizardfs mount(mfsmount)来访问集群上的文件和处理这些数据就像使用本地硬盘里的数据一样。存储在lizardfs上的文件可以被大量的client看到和访问,如果有这个需要的话。

扩展性

如果存储需要增加,现有的lizardfs集群可以通过添加新的chunk servers的方式扩展。可以在任何时间添加新的服务器,并且基本不会导致停服务,也就是说,这一切对client来说都是透明的。新加的chunk server的磁盘空间是没有限制的,也就是说,一个24TB的chunkserver添加到含有8TBchunkserver的集群中是完全没有问题的。

系统的性能是随磁盘的数量线性增加的,所以添加一个chunkserver并不仅仅是存储容量的增加而且使得整个存储系统整体的性能增加。Lizardfs自动分布数据到所有的chunkservers上,包括那些刚刚添加进来的chunkserver,因为lizardfs会平衡所有连接进来节点的磁盘利用率。去除服务器跟添加一样的容易。

硬件推荐

Lizardfs是完全硬件无关的。商业硬件可以被用来获取高效率。最低要求是有两个带有一些硬盘的专用节点,但为了获取高可用的集群,应该配置至少三个节点。这也可以让你用上erasure coding特性。

我们推荐每个节点之间至少由1Gbps的网卡连接。因为大多数商业硬盘都有一个100MB/s的吞吐量,所以你的网卡应该能够处理你的chunkservers的流量。

  • Master/Shadow : 至少2GHz CPU,64位
  • RAM:取决于文件的数量(4GB对于小集群来说已经够了)
  • Disk: 128G,HDD就可以,不过SSD可以改善性能
  • Chunkserver:推荐最少2GB RAM
  • Metalogger:推荐最少2GB RAM

特性介绍

Lizardfs提供各种实际和稳定的特性使得其成为了一个成熟的企业解决方案。你可以将lizardfs用于层级存储管理(HSM),也可以用于带有异步副本的灾难恢复中心,还可以用于减少副本需要的硬盘空间,也可以用于有效管理存储池(QOS,配额)等等。

Lizardfs是非常灵活的。如果你有其他的需要额外功能的使用场景,可以通过开发来满足你的特定需求。

快照

拷贝大文件和目录(比如虚拟机)通过快照特性是非常有效率的。当创建一个快照的时候,为了加快该操作,只复制了目标文件的元数据。原始的chunks和复制的文件是共享的,除非他们被修改。

例子:
比如/mnt/lizardfs/huge_vm里面包含了几个大文件,有512GB。使用一个拷贝备份命令” cp -r huge_vm huge_vm_backup”会花费一段比较长的时间并且会再占用512GB空间。

我们推荐使用” mfsmakesnapshot huge_vm huge_ vm_backup”命令来创建副本。相比之下,这个命令会立即执行完毕,并且仅另外占用少量空间。

现在考虑修改/mnt/lizardfs/huge_vm里面的一个文件的场景,该场景只会影响到2个chunks。当使用”mfsmakesnapshot”命令,只有修改了的chunk会被复制,影响到了2个chunk,那这个操作只会使用128MB,这跟使用”cp -r”消耗的512GB比较起来是微乎其微的。

QOS服务质量

Lizardfs为管理员提供设置读写带宽的机制,以限制由特定挂载点产生的流量,或者是多个client机器和多个挂载点的特定进程组产生的流量。这使得Lizardfs适合那些需要保证合适服务质量的关键应用。

例子:
假设一个集群有300个硬盘并且是根据我们的推荐配置的。一个人期望该集群对所有的client都可以达到20GB/s。想象一个包含了许多虚拟机的产品系统,使用了lizardfs作为他们的存储。如果一个管理员已经访问了主机并且在上面开始维护工作,那是可能使用带宽限制来确保系统运行流畅。

数据副本

存在LizardFS上的文件被切分成一块块的,这些块又被叫做chunks,每一个chunk 64MB。每一个chunk被保存在chunkservers上,并且管理员可以选择每一个文件保存多少个副本。
比如,选择保存为三副本(configuration goal=3), 在故障2个盘或者2个chunkservers的情况下,所有的数据都不会丢,因为LizardFS不会将同一个chunk的2份副本保存在同一个节点上面。

安全级别(副本数量)可以对单个文件和某个目录独立设置。当一个chunk失效,比如说由于磁盘故障,系统就会从该chunk剩余的副本复制出一个chunk以维持设置的副本数量。

数据均分分布在所有节点上。没有专用的镜像服务器,也就是说在副本数量为3的情况下,每一个chunk有三个副本,这三个副本是随机的分布在三个服务器上的。

这种独特的设计使得故障恢复非常快。如果一个盘失效了,由于备份的副本是均匀地分布在所有其他盘上的,所以集群中所有的盘都可以参与到复制的过程中来。因此,恢复丢失数据的速度随着系统中盘的数量增加而增加。

副本机制

LizardFS实现了2种副本机制:标准的和XOR 副本。

标准副本

这种副本机制运行设置每一个chunk所拥有的副本数量。注意既然不可能将同一个chunk的2个副本存储在同一个chunkserver上,这就意味着标准副本的目标应该与chunkservers的数量以及他们的标签符合(顺应,comply with)。

例子:标准的三副本表示每一个chunk应该被放在三个不同的chunkservers上的。这些chunk具体的位置由master服务器根据空间使用均衡来决定。

XOR 副本

这种副本机制根据“XOR 等级”参数把chunks分成更小的部分。一个文件带有XOR等级N就会被保存为N+1个chunks(N代表数据,1代表校验块)。XOR等级从2到10。

例子:全局的“xor3”意味着一个文件的每一个chunk将会被分为4个部分,并且分布在chunkservers上。如果有任何单个chunkserver故障了,那是可能从剩余的3 XOR chunks重构出该文件的。

EC– Erasure Coding replica (从 3.10.0版本开始有的特性)

对于每一个使用EC(K+M)的文件,系统会把文件切分成K个部分,并且生成M个校验块。K个部分是可以用来重现文件内容的。如果指定了标签,带标签的部分将会被存储在chunkservers上,否则,会使用默认的通配符标签。

EC(K+M)这种机制的目标允许K+M中的M份数据丢失,并且文件是仍然可以访问的。使用EC(K+M)额外占用M/K的空间,比如EC5+1额外占用20%的空间,然后EC 3+2额外占用66.6%的空间。

注意:最小的K是2,并且最小的M是1。EC的M为1时,等价于XOR 副本K。

地理副本(异地副本Georeplication (aka custom goals))

通过异地副本,你可以决定chunks存储在哪。这种拓扑特性允许当多于一个副本可用时,可以用于建议client读取哪个副本。当集群中有多个地域和多种介质类型的盘(比如有SSD,也有HDD)时,这种客户定制的特性使得LizardFS更有用。

管理员能够通过给chunkservers添加标签来使用该特性,以便系统决定怎样将chunks分布到可用的服务器上。这使得LizardFS能够承受整个数据中心的故障(灾难恢复),如下面的例子所示。
例子:当lizardfs部署在两个数据中心上,也就是说一个数据中心位于伦敦,一个位于巴黎,可以给伦敦的每一个服务器打上“london”的标签,并且给巴黎的服务器打上”paris”的标签。此外,还可以创建一个用户定义的目标,命名为2_locations,定义为”2_locations:paris and london”。每一个在带有2_locations定义的目录中创建文件将都会是2副本,一个副本在”london”标签的服务器上,另一个副本在”paris”标签的服务器上。这样就能保证当一个数据中心完全不可用的时候,文件在另一个数据中心的副本仍然可以正常提供读写功能。

支持LTO库

LizardFS提供对LTO库的原生支持。存储文档备份会耗费大量内存,即使这样的文件几乎不会被读到,这就意味着这种类型的数据存储在磁带上会更有效率。

Lizardfs提供了同LTO后端存储兼容的方式。通过设定一个磁带’goal’,文件可以被指定有一个备份副本在磁带上。从磁带存储上读数据是相当耗时的,所以存储在磁带上的数据应该很少有读取操作。

如果一个文件仍然有正常的副本(此处正常的副本指不位于磁带上的副本),那该副本将会用于读取操作。如果一个文件只存在于磁带上,那么首先是要恢复到Lizardfs上。为了达到这一点,必须使用lizardfs-restore-tape-copy工具:
$ lizardfs-restore-tape-copy 文件_路径
在运行这个命令之后,所有需要的数据将会从磁带中读取出来并加载到文件系统中,这样就可以让client端访问到这个文件了。

配额

Lizardfs支持类似POSIX系统的磁盘配额机制。它对文件和指定用户或指定用户组提供一个告警信息值和严格限制值。当一个用户达到严格限制值后就不能写往LizardFS写新数据了。
从3.10.0版本开始,LizardFS支持每一个文件夹的配额。

兼容POSIX

LizardFS提供了POSIX文件系统的所有特性,比如:

  1. 文件和目录的层级结构
  2. 文件属性,比如uid,gid,access mask, access time, modification time, change time
  3. 支持软链接硬链接以及其他特殊文件(unix sockets, devices)
  4. 访问控制列表(ACL)
  5. 扩展属性

Lizardfs访问权限的语义与POSIX文件系统(比如ext或者xfs)是完全一样的。因此使得Lizardfs兼容使用本地磁盘作为存储的所有应用。

垃圾处理机制

Lizardfs另一个特性是透明的和完全自动化的垃圾回收站。删除文件之后,文件会被放到仅对管理员可见的垃圾回收站。在垃圾回收站中文件可以被恢复或者永久删除。因此lizardfs上存储的数据比存放到硬件RAID上的更安全。

垃圾处理是自动清理的:在一定时间(trash time)后,系统会将文件从垃圾回收站中永久删除。任何文件或者目录的trash time随机可以调整。

提供类似Windows回收站的垃圾处理机制,并可对单个文件或文件夹设置一个单独的垃圾时间,在达到这个垃圾时间之前均可恢复文件或文件夹。

监控

提供命令行接口和基于网页的图形化的监控

参考资料

LizardFS官网
LizardFS白皮书

如果你觉得本文对你有帮助,欢迎打赏