分布式文件系统的对比

本文对常用的分布式文件系统进行一个简要的对比,设计的分布式文件系统有:HSFS,IRODS,Ceph,ClusterFs,Lustre,MooseFS.

架构

Lustre把metadata存储到单节点sever的硬盘。客户端的rps(client request per second)受到metadata server的限制。HDFS 和MooseFS也面临相同的问题,不过他们是把metadata存储到内存。iRODS采用面向中心的架构设计,用数据库来管理和存储metadata.这三种面向中心的架构设计,都会受到metadata server的限制,无论是放到硬盘,内存还是数据库,metadata是单机的。GlusterFS把metadata和数据存储到一起,可以快速增加sever进行水平的扩张,可以接受大量的客户端请求。Ceph为了处理客户端大量的请求,需要增加metadata或data sever,这样系统扩张更加复杂。

表 1:概要对比

  HDFS iRODS Ceph GlusterFS Lustre
Architecture Centralized Centralized Distributed Decentralized Centralized
Naming Index Database CRUSH EHA Index
API

CLI, FUSE

REST, API

CLI, FUSE

API

FUSE, mount

REST

FUSE, mount FUSE
Fault detection Fully connect P2P Fully connect Detected Manually
System availability No failover No failover High High Failover
Data availability Replication Replication Replication RAID-like No
Placement strategy Auto Manual Auto Manual No
Replication Async. Sync Sync Sync RAID-like
Cache consistency WORM, lease Lock Lock No Lock
Load balancing Auto Manual Manual Manual N

 

表 2 :I/O 性能

  HDFS iRODS Ceph GlusterFS Lustre MooseFS
Input/Output I O I O I O I O I O I O
1 × 20GB 407s 401s 520s 500s 419s 382s 341s 403s 374s 415s 448s 385s
1000 × 1MB 72s 17s 86s 23s 76s 21s 59s 18s 66s 5s 68s 4s

注意:红色代表性能好,绿色代表性能差。测试环境 grid5000平台,2个cluster.

结论

HDFS, MooseFS, iRODS and Lustre 更适合存储小文件, Ceph and GlusterFS对大小文件都适合。该测试除了iRODS,文件都是采用的分条(striping),striping能够提高大文件的性能,对于小文件没有明显的作用。测试结果依赖网络,但是这不影响得出下面的结论,gluster去中心化的架构,表现的要比其他架构更好。

想了解更多的测试结果和对比信息,请点击下面的链接:点击打开链接


下面附上docker安装glusterFS


下载节点容器镜像

1
docker pull gluster/gluster-centos

创建元数据目录

1
mkdir -p /etc/glusterfs{1,2,3} /var/lib/glusterd{1,2,3} /var/log/glusterfs{1,2,3}

创建节点容器实例

1
2
3
4
5
6
7
8
9
10
for i in `seq 1 3`; do
        mkdir -p $etc$i $var$i $log$i
        docker run -d --privileged=true --name gluster$i --hostname=gluster$i \
                -v /etc/glusterfs$i:/etc/glusterfs:z \
                -v /var/lib/glusterd$i:/var/lib/glusterd:z \
                -v /var/log/glusterfs$i:/var/log/glusterfs:z \
                -v /sys/fs/cgroup:/sys/fs/cgroup:ro \
                -v /dev:/dev \
                gluster/gluster-centos
done

组建集群

1
docker exec -ti gluster1 /bin/bash
1
2
gluster peer probe 
gluster peer probe 

创建卷

冗余卷 (replica)

1
gluster peer volume create v1 replica 3 172.17.0.{2,3,4}:/mnt/v1 force

条带卷 (stripe)

1
gluster peer volume create v2 strip 3 172.17.0.{2,3,4}:/mnt/v2 force

纠删码卷 (disperse)

1
gluster peer volume create e3 disperse 3 redundancy 1 172.17.0.{2,3,4}:/mnt/v3 force
  • 由于这些容器实例的/mnt与/在同一个分区,故需要指定force参数。
  • 创建卷时,目录/mnt/v{1,2,3}将被gluster自动创建,前提是父目录 (/mnt)已存在

挂载卷

通过FUSE挂载

1
mount -t glusterfs 172.17.0.2:/v1 /mnt/glusterfs/


你可能感兴趣的:(分布式文件系统的对比)