1. 程式人生 > >分散式檔案系統的對比

分散式檔案系統的對比

本文對常用的分散式檔案系統進行一個簡要的對比,設計的分散式檔案系統有: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 <gluster2 ip addr>
gluster peer probe <gluster3 ip addr>

建立卷

冗餘卷 (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/