searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

Gluster disperse volume 详解

2023-06-06 14:43:50
96
0

概念

Dispersed Volume 是基于 Erasure Codes(纠删码)的一种新类型的Volume(3.6版本正式发布该特性),类似于RAID5/6。

 

文件是被分割成大小相同的 Chunk,而每个 Chunk 又被分割成 fragment,冗余信息的 fragment 也随之生成。

Redundancy 均匀分布存储在所有的 brick,磁盘的有效空间是 Brick - Redundancy。

在数据恢复时,只要 Brick - Redundancy 个 Fragment 可用,就能正常恢复数据。

Redundancy

Redundancy 设置为 0 时,纠错卷等同于分布式卷;Redundancy 设置为 (brick 数量/2) 时,纠错卷等同于复制卷。故一般 redundancy 的取值为: 1 ≤ Redundancy ≤ (brick 数量/2) 。具体 Redundancy 的配置可根据具体的应用场景,在存储利用和可靠性做均衡选择。

官方经典的配置为:6个 Brick 配置 2 个 Redundancy。img

所有 brick 应该具有相同的容量,否则当最小的 brick 填满时,该卷将不允许写入额外的数据。

最优卷(Optimal volumes)

纠删码在性能上最糟糕的事情之一是RMW(Read-Modify-Write)循环。纠删码在编码时引入了条带大小的概念,stripe size= 512*(#bricks-redundancy) bytes,纠删码每次按照一个条带的大小进行编码,如果接收的数据少于一个条带大小则填充0到满足一个条带大小再编码,追加写时需要读取上次填充有0的条带,合并他们,并重新计算编码块,再写最终的结果,当纠错卷配置不合理时,就存在 RMW 循环。

RMW 循环的出现,引起了无用的读写操作,增加了有效写延时,从而导致性能的降低。因此在配置纠错卷的时候应该注意此问题。

 

brick 和 redundancy 的数字组合使 条带大小为 2 的次幂时,纠错卷在大多数工作负载中表现更好。这就是最优卷。

例如,具有 6 个 brick 和 redundancy 2 的配置将具有 512 * (6 - 2) = 2048 字节的条带大小,因此它被认为是最优的。 具有 7 个块和冗余 2 的配置将具有 2560 字节的条带大小,许多写入需要进行 RMW 循环。

创建纠错卷

gluster volume create [disperse [<count>]] [redundancy <count>] brick1 brick2 ... brickN

参数说明

disperse 和 redundancy 至少指定一个。

若 disperse 未指定,或缺少 count,则所有 brick 默认在同一个 disperse set 中。

若 redundancy 未指定,或缺少 count,则自动计算为最优卷的 redundancy 取值,并显示如下警告消息:

# gluster volume create test-volume disperse 6 server{1..6}:/bricks/test-volume
The optimal redundancy for this configuration is 2. Do you want to create the volume with this value ? (y/n)

若 redundancy 未指定且最优取值不存在,则指定为 1 并显示如下警告消息:

# gluster volume create test-volume disperse 4 server{1..4}:/bricks/test-volume
There isn't an optimal redundancy value for this configuration. Do you want to create the volume with redundancy 1 ? (y/n)

若同一节点上存在多个 brick,则创建卷操作将失败并显示如下警告(可在命令中添加 force 参数避免该警告):

# gluster volume create <volname> disperse 3 server1:/brick{1..3}
volume create: <volname>: failed: Multiple bricks of a disperse volume are present on the same server. This setup is not optimal. Bricks should be on different nodes to have best fault tolerant configuration. Use 'force' at the end of the command if you want to override this behavior.

disperse count 取值为 3 ≤ disperse count ≤ 31,disperse count 大于 31 时 volume 可以创建但**无法被正常挂载到客户端**。当 brick 数量大于 31,创建时需指定 disperse count 值为 brick/n(n为正整数)即可创建分布式纠错卷(distributed disperse volume),例如 60 个 brick 可分为 2 个 subvol 创建,此时 brick 1~30 为一个 subvol,brick 31~60 为另一个subvol:

# gluster vol create vol_name disperse 30 redundancy 14 brick1 brick2 ... brick60
0条评论
0 / 1000
血小板
10文章数
0粉丝数
血小板
10 文章 | 0 粉丝
血小板
10文章数
0粉丝数
血小板
10 文章 | 0 粉丝
原创

Gluster disperse volume 详解

2023-06-06 14:43:50
96
0

概念

Dispersed Volume 是基于 Erasure Codes(纠删码)的一种新类型的Volume(3.6版本正式发布该特性),类似于RAID5/6。

 

文件是被分割成大小相同的 Chunk,而每个 Chunk 又被分割成 fragment,冗余信息的 fragment 也随之生成。

Redundancy 均匀分布存储在所有的 brick,磁盘的有效空间是 Brick - Redundancy。

在数据恢复时,只要 Brick - Redundancy 个 Fragment 可用,就能正常恢复数据。

Redundancy

Redundancy 设置为 0 时,纠错卷等同于分布式卷;Redundancy 设置为 (brick 数量/2) 时,纠错卷等同于复制卷。故一般 redundancy 的取值为: 1 ≤ Redundancy ≤ (brick 数量/2) 。具体 Redundancy 的配置可根据具体的应用场景,在存储利用和可靠性做均衡选择。

官方经典的配置为:6个 Brick 配置 2 个 Redundancy。img

所有 brick 应该具有相同的容量,否则当最小的 brick 填满时,该卷将不允许写入额外的数据。

最优卷(Optimal volumes)

纠删码在性能上最糟糕的事情之一是RMW(Read-Modify-Write)循环。纠删码在编码时引入了条带大小的概念,stripe size= 512*(#bricks-redundancy) bytes,纠删码每次按照一个条带的大小进行编码,如果接收的数据少于一个条带大小则填充0到满足一个条带大小再编码,追加写时需要读取上次填充有0的条带,合并他们,并重新计算编码块,再写最终的结果,当纠错卷配置不合理时,就存在 RMW 循环。

RMW 循环的出现,引起了无用的读写操作,增加了有效写延时,从而导致性能的降低。因此在配置纠错卷的时候应该注意此问题。

 

brick 和 redundancy 的数字组合使 条带大小为 2 的次幂时,纠错卷在大多数工作负载中表现更好。这就是最优卷。

例如,具有 6 个 brick 和 redundancy 2 的配置将具有 512 * (6 - 2) = 2048 字节的条带大小,因此它被认为是最优的。 具有 7 个块和冗余 2 的配置将具有 2560 字节的条带大小,许多写入需要进行 RMW 循环。

创建纠错卷

gluster volume create [disperse [<count>]] [redundancy <count>] brick1 brick2 ... brickN

参数说明

disperse 和 redundancy 至少指定一个。

若 disperse 未指定,或缺少 count,则所有 brick 默认在同一个 disperse set 中。

若 redundancy 未指定,或缺少 count,则自动计算为最优卷的 redundancy 取值,并显示如下警告消息:

# gluster volume create test-volume disperse 6 server{1..6}:/bricks/test-volume
The optimal redundancy for this configuration is 2. Do you want to create the volume with this value ? (y/n)

若 redundancy 未指定且最优取值不存在,则指定为 1 并显示如下警告消息:

# gluster volume create test-volume disperse 4 server{1..4}:/bricks/test-volume
There isn't an optimal redundancy value for this configuration. Do you want to create the volume with redundancy 1 ? (y/n)

若同一节点上存在多个 brick,则创建卷操作将失败并显示如下警告(可在命令中添加 force 参数避免该警告):

# gluster volume create <volname> disperse 3 server1:/brick{1..3}
volume create: <volname>: failed: Multiple bricks of a disperse volume are present on the same server. This setup is not optimal. Bricks should be on different nodes to have best fault tolerant configuration. Use 'force' at the end of the command if you want to override this behavior.

disperse count 取值为 3 ≤ disperse count ≤ 31,disperse count 大于 31 时 volume 可以创建但**无法被正常挂载到客户端**。当 brick 数量大于 31,创建时需指定 disperse count 值为 brick/n(n为正整数)即可创建分布式纠错卷(distributed disperse volume),例如 60 个 brick 可分为 2 个 subvol 创建,此时 brick 1~30 为一个 subvol,brick 31~60 为另一个subvol:

# gluster vol create vol_name disperse 30 redundancy 14 brick1 brick2 ... brick60
文章来自个人专栏
Gluster
10 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
1
1