glusterfs architecture

GlusterFS 体系结构

1
在GlusterFS中逻辑卷(volume)是一组存储块(bricks)的集合,GlusterFS可以支持多种类型的逻辑卷,以实现不同的数据保护级别和存取性能
  1. 分布存储卷(Distributed Glusterfs Volume)

    1
    2
    3
    4
    5
    6
    7
    分布存储是Glusterfs默认使用的存储卷类型.文件会被分布得存储到逻辑卷中的各个存储块上去.以两个存储块的逻辑卷为例,文件file1可能被存放在brick1或brick2中,但不会在每个块中都存一份.分布存储不提供数据冗余保护.

    创建分布存储的命令格式为:
    gluster volume create NEW-VOLNAME [transport [tcp | rdma | tcp,rdma]] NEW-BRICK...

    样例:
    gluster volume create test-volume server1:/exp1 server2:/exp2 server3:/exp3 server4:/exp4
  2. 镜像存储卷(Replicated Glusterfs Volume)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    在镜像存储逻辑卷中,数据至少会在不同的brick上被存储两份,具体采取存储几份的冗余数据则可以在创建镜像存储卷时予以设定.镜像存储可以有效得预防存储块损坏可能引发的数据丢失的风险.

    创建镜像存储的命令格式为:
    gluster volume create NEW-VOLNAME [replica COUNT] [transport [tcp | rdma | tcp,rdma]] NEW-BRICK...

    样例:
    gluster volume create test-volume replica 2 transport tcp server1:/exp1 server2:/exp2

    关于镜像存储卷的仲裁盘配置:
    gluster volume create <VOLNAME> replica 3 arbiter 1 host1:brick1 host2:brick2 host3:brick3

    在镜像存储卷中使用一个独立的bricks作为仲裁盘,是为了避免发生脑裂后无法认定数据一致性的问题.
    注:对于任何涉及到镜像存储的逻辑卷,在创建时都不能把同一个主机节点上的两个brick设置到同一组镜像复制关系中.即使尝试这样做,也会创建失败.
  3. 分片式存储卷(Striped Glusterfs Volume)

    1
    2
    3
    4
    5
    6
    7
    在分片式存储卷中,一个文件会被切分成多份,数量等于brick的数量,然后每个brick中存一份.这种方式不提供数据冗余保护

    创建分片式存储的命令格式为:
    gluster volume create NEW-VOLNAME [stripe COUNT] [transport [tcp | dma | tcp,rdma]] NEW-BRICK...

    样例:
    gluster volume create test-volume stripe 2 transport tcp server1:/exp1 server2:/exp2
  4. 分布式镜像存储卷(Distributed Replicated Glusterfs Volume)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    在这种逻辑卷中,文件是跨镜像存储块的集合(replicated sets of bricks)进行分布式存储的,即文件可能被存储在某一个镜像存储块集合中,但不会同时存储到多个集合.而在一个镜像存储块的集合内,文件是在每个存储块(brick)上各存一份.在我们使用命令创建分布式镜像存储卷时,需要特别注意在设定需要加入逻辑卷中的brick时,每个brick的顺序会决定它与哪一个brick结成镜像复制的关系.Brick会按照从前至后,选择与自己邻近的brick结成镜像复制的关系.例如:我们有8个bricks,设置的数据复制份数为2,那么前两个brick就会成为互为镜像的关系,紧接着的后两个结为镜像关系,以此类推

    创建分布式镜像存储的命令格式为:
    gluster volume create NEW-VOLNAME [replica COUNT] [transport [tcp | rdma | tcp,rdma]] NEW-BRICK...

    样例:
    gluster volume create test-volume replica 2 transport tcp server1:/exp1 server2:/exp2 server3:/exp3 server4:/exp4

    我们可以看到,镜像存储逻辑卷和分布式镜像存储逻辑卷,它们的创建命令是相同的.不同点在于,在设定数据复制份数和指定加入到卷中的bricks时,如果刚好只够一个镜像存储块集合则是镜像存储卷,如果可以组成多个镜像存储块集合,那么自然就成为分布式镜像存储卷
  5. 分布式分片存储卷(Distributed Striped Glusterfs Volume)

    1
    2
    3
    4
    5
    6
    7
    这种方式实际上是在分片式存储卷的基础上做的扩展,即根据你设定的分片参数(一个文件分成几片)和你为逻辑卷加入的bricks数量可以组成多个分片存储块集合时,自然就成为了分布式分片存储卷.每个分片存储块集合中存储的的数据是不同的.

    创建分布式分片存储的命令格式为:
    gluster volume create NEW-VOLNAME [stripe COUNT] [transport [tcp | rdma | tcp,rdma]] NEW-BRICK...

    样例:
    gluster volume create test-volume stripe 4 transport tcp server1:/exp1 server2:/exp2 server3:/exp3 server4:/exp4 server5:/exp5 server6:/exp6 server7:/exp7 server8:/exp8
  6. 分布式分片及镜像复制存储卷(Distributed Striped Replicated Volume)

    1
    2
    3
    4
    这种方式创建的存储卷会将数据分片后,分布式地跨多个镜像bricks集合来存储.用途为解决大数据的,高并发的,性能敏感的数据存储和使用场景,例如Map Reduce负载.

    样例:
    gluster volume create test-volume stripe 2 replica 2 transport tcp server1:/exp1 server2:/exp2 server3:/exp3 server4:/exp4 server5:/exp5 server6:/exp6 server7:/exp7 server8:/exp8
  7. 分片及镜像复制存储卷(Striped Replicated Volume)

    1
    2
    3
    4
    5
    gluster volume create test-volume stripe 2 replica 2 transport tcp server1:/exp1 server2:/exp2 server3:/exp3 server4:/exp4
    or:
    gluster volume create test-volume stripe 3 replica 2 transport tcp server1:/exp1 server2:/exp2 server3:/exp3 server4:/exp4 server5:/exp5 server6:/exp6

    同样地,分片及镜像复制存储卷也是用于处理大数据的,高并发的,性能敏感的业务数据.目前看,这种存储卷仅适合用于Map Reduce负载
  8. 关于离散存储卷(Dispersed Volume)

    1
    2
    3
    4
    5
    离散存储卷是基于一种前向纠错码技术来实现的,它会对存储进来的数据进行切分,然后附加一些部分冗余的纠错码.这种类型的存储卷要以在实现可接受的数据可靠性的条件下,最大化得避免空间的浪费.

    gluster volume create test-volume disperse 4 server{1..4}:/bricks/test-volume
    or:
    gluster volume create test-volume disperse 6 server{1..6}:/bricks/test-volume