红帽存储管理2——volume类型与创建


三、volume的管理

    红帽存储服务器管理的对象主要就是volume,volume是brick逻辑上的集合,这种集合的方法也有多种,不同的集合方式代表不同的volume类型,主要有七大类型


1、volume类型


Distributed

    分布式:将文件平均分配到不同的bricks中(以文件个数平均分配),如果一个volume只包含1个brick,也叫做distributed volume,所以distributed volume至少要包含1个brick

 红帽存储管理2——volume类型与创建_第1张图片


Replicated

    复制式 将文件以复制的性质保存在不同的bricks中,由于文件是以复制的形式存在,那么relicated volume 至少需要2个brick,如果一个文件要以复制的形式保存在2个brick中,叫two-way replicated volume,如果是保存在3个brick中,叫three-wayreplicated volume,那么three-way至少要有3个brick

红帽存储管理2——volume类型与创建_第2张图片

红帽存储管理2——volume类型与创建_第3张图片

 

Striped

    片段式 将文件分成等长度的片段保存在不同的bricks中。Stripedvolume要求至少有2个brick,首先将一个文件按照指定的长度分成若干个文件片段,然后将这些文件片段分布的存储在不同的brick中,见下图,在brick中,不同片段还是以原文件的文件名形式存在的,但是只是文件的一部分,不是全部。

红帽存储管理2——volume类型与创建_第4张图片

 

Distributed replicated volume

    将分布式和复制式结合在一起,之前说过,distribute至少需要1个brick,replicated至少需要2个brick,那么一个distributed replicated volume则至少需要1×2=2个brick,这种也可以这样叫:distributed×replicated=1×2,那么上面图6.2就是一个1×2的distributedreplicated volume,图6.3就是一个1×3的distributed replicated volume。下图就是一个2×2的distributedreplicated volume。存储过程:首先在创建2×2的distributed replicated volume的时候就已经将4个brick划成两个部分了(distributed=2),然后每一个部分中有两个brick,这两个brick是(two-way)复制型的,存放相同的文件。那么如果我们有两个文件,首先将两个文件分布成两个部分(distributed=2),然后将每一个文件都复制成两个文件(replicated=2),然后分别存入不同的brick中。图6.5是一个2×3的distributed replicated volume。

红帽存储管理2——volume类型与创建_第5张图片

红帽存储管理2——volume类型与创建_第6张图片


Distributed striped volume

    将分布式和片段式结合在一起,distributed至少需要1个brick,striped至少需要2个brick,1个Distributed striped volume则至少需要1×2=2个brick,图6.6就是一个1×2的distributed stripedvolume。下图是一个2×2的distributed striped volume。存储过程:首先在创建2×2的distributed stripedvolume的时候就已经将4个brick划成两个部分了(distributed=2),然后每一个部分中有两个brick,这两个brick是striped=2片段式存储型的,假如有两个文件要存入这个volume中,首先将这两个文件分成两块(distributed=2),然后将每一个文件分成等大小的片段,然后分别存入brick中。

红帽存储管理2——volume类型与创建_第7张图片

 

Striped replicated volume

    将片段式和复制式结合起来,下图是一个2×2的striped replicated volume,存储数据时,先将文件拆成多个片段,将这些片段按照规则分成两部分(striped=2),然后将这两部分分别复制(replicated=2)存入不同brick中。

红帽存储管理2——volume类型与创建_第8张图片

 

Distributed striped replicated volume

    上图6.8也可以说是1×2×2的distributedstriped replicated volume,数据存储先分布再片段再复制。下图就是一个2×2×2的distributed striped replicated volume,它需要2×2×2=8个brick。

红帽存储管理2——volume类型与创建_第9张图片

 

    总结

    其实三种基本类型都是以distributed为基础的

    distributed模式是分布前不对文件做任何操作

    replicated模式是将文件复制成多个文件再做分布操作

    striped模式是将文件拆分成多个片段再降片段做分布操作

红帽存储管理2——volume类型与创建_第10张图片

 

 

2、Volume创建与管理

    创建volume之前我们要清楚我们要创建的volume类型,此类型需要多少个brick,brick的大小等,我们都要事先规划好。

 

    创建volume的基本命令(也就是创建distributed型volume)

gluster volume create VOLUME_NAME BRICK_NAME…

    举例:创建一个含有2个brick的distributedvolume

[root@rhs0 ~]# gluster volume create new_volume [transporttcp|rdma|tcp,rdma] rhs0:/bricks/brick1/brick/ rhs1:/bricks/brick11/brick
volume create: new_volume: success: please start the volume to accessdata
[root@rhs0 ~]# gluster volume info
Volume Name: new_volume
Type: Distribute
Status: Created
Number of Bricks: 2
Transport-type: tcp
Bricks:
Brick1: rhs0:/bricks/brick1/brick/
Brick2: rhs1:/bricks/brick11/brick

 

创建replicated型volume

    基本命令

gluster volume create VOLUME_NAME [transport tcp|rdma|tcp,rdma] replicaCOUNT BRICK_NAME…

    创建一个包含2个brick的two-wayreplicated volume

[root@rhs0 ~]# gluster volume create rep replica 2 \
> rhs0:/bricks/brick1/brick/ \
> rhs1:/bricks/brick11/brick
volume create: rep: success: please start the volume to access data
[root@rhs0 ~]# gluster volume info
Volume Name: rep
Type: Replicate
Volume ID: d7fdb75b-9451-41f7-93f0-48df06b103a7
Status: Created
Snap Volume: no
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: rhs0:/bricks/brick1/brick
Brick2: rhs1:/bricks/brick11/brick
Options Reconfigured:
performance.readdir-ahead: on
snap-max-hard-limit: 256
snap-max-soft-limit: 90
auto-delete: disable

 

创建striped型volume的基本命令

gluster volume create VOLUME_NAME [transport tcp|rdma|tcp,rdma] stripe COUNTBRICK_NAME

    与创建replicated volume相比,只是将replica COUNT 改成了stripe COUNT,其他的不变。

 

那么我们如果要创建混合型的volume,怎么配置呢?

    我们已经知道了,volume默认是distributed型的,所以我们只要在replicated或者striped基础上保证添加所需要的brick数量就可以了,例如我们要创建2×2的distributedreplicated volume我们只要在创建replicated volume命令基础上添加4个brick就会自动变成distributedreplicated volume,此时即为2×2的distributedreplicated volume,如果我们添加6个brick,就成为3×2的distributedreplicated volume。同理distributed stripedvolume也是一样的。

举例:

[root@rhs0 ~]# gluster volume create rep replica 2 \
> rhs0:/bricks/brick1/brick/ \
> rhs1:/bricks/brick11/brick/ \
> rhs2:/bricks/brick21/brick/ \
> rhs3:/bricks/brick31/brick/
volume create: rep: success: please start the volume to access data
[root@rhs0 ~]# gluster volume info
Volume Name: rep
Type: Distributed-Replicate
Volume ID: d7fdb75b-9451-41f7-93f0-48df06b103a7
Status: Created
Snap Volume: no
Number of Bricks: 2 x 2 = 4
Transport-type: tcp
Bricks:
Brick1: rhs0:/bricks/brick1/brick
Brick2: rhs1:/bricks/brick11/brick
Brick2: rhs2:/bricks/brick21/brick
Brick2: rhs3:/bricks/brick31/brick
Options Reconfigured:
performance.readdir-ahead: on
snap-max-hard-limit: 256
snap-max-soft-limit: 90
auto-delete: disable

 

创建striped replicated volume

    基本命令

gluster volume create VOLUME_NAME [transport tcp|rdma|tcp,rdma] stripe COUNTreplica COUNT BRICK_NAME…

    如果是2×2的striped replicatedvolume,那么COUNT值都为2,BRICK_NAME要有4个brick。在这里我就不实际操作了。

 

创建distributed stripedreplicated volume

    在striped replicated volume命令基础上加上足够数量的brick,就会自动成为distributed stripedreplicated volume,上面我们加4个brick就是2×2的striped replicatedvolume,那么如果是加上8个brick就会自动成为2×2×2的distributed stripedreplicated volume

 

 

Distributed、replicated、striped三种类型的特点

    Distributed只是根据文件个数来平均分布文件,但是如果一个服务器宕机,数据将丢失

    Replicated将文件复制之后存于多个服务器中,可以降低宕机带来数据丢失的风险

    Striped主要是应用于含有较多大文件的环境中,可以弥补distributed以文件个数来分布的缺点

 

创建volume中需要注意的问题

    1、服务器必须开启glusterd服务

    2、服务器必须在可信任存储池中

    3、Volume中添加的brick是brick挂载点下的一个目录

    4、同一个brick只能出现在一个volume中

    5、如果创建volume失败,所添加的brick需要重新卸载,然后重新格式化,格式化的时候要加-f强制格式化,然后重新挂载,然后在挂载点创建子目录,然后才能重新使用brick。

具体步骤:

[root@rhs0~]# umount  /bricks/brick1
[root@rhs0~]# mkfs.xfs –I size=512 /dev/vg_bricks/brick1 –f
[root@rhs0~]# mkdir /bricks/brick1 –p
[root@rhs0~]# mount –a
[root@rhs0~]# mkdir /bricks/brick1/brick

    另外一种方法是先卸载brick,再移除lv,再使用脚本创建一个新brick