https://blog.csdn.net/daydayup_gzm/article/details/52748812

一、概念

Dispersed Volume是基于ErasureCodes(纠错码)的一种新类型的Volume(3.6版本正式发布该特性),类似于RAID5/6。通过配置Redundancy(冗余)级别提高可靠性,在保证较高的可靠性同时,可以提升物理存储空间的利用率。

文件是被分割成大小相同的Chunk(块),而每个Chunk又被分割成fragment,而冗余信息的Fragment也随之生成,且同一个Fragment只会保存一个Brick上。

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

在数据恢复时,只要Brick-Redundancy个Fragment(可以是数据,也可以是冗余信息)可用,就能正常恢复数据,如下图所示。

二、特性

1、可配置的Redundancy

若Redundancy设置为0时,DispersedVolume等同于分布式卷;若Redundancy设置为brick/2时,DispersedVolume等同于复制卷。具体Redundancy的配置,根据具体的应用场景,在存储利用和可靠性做均衡选择。

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

2、读写开销

读时,在数据未丢失下,一般不会去读取冗余信息,而是直接读取有效数据,额外开销为0。

写时,需要访问每一个可用的Brick,并且需要读取冗余信息,开销如下图所示。

三、创建disperse卷

创建规则1,同一个peer,只允许存在onebrick of a disperse set

1、创建disperse卷

#glustervolume create [disperse [<count>]] [redundancy <count>] [transporttcp | rdma | tcp,rdma]

disperse至少配置为2,redundancy配置至少为1,所以配置disperse卷最少需要3brick。

如果不指定disperse的数量,所有的volume被认为就是一个disperse集合。如果不指定redundancy数量,系统将根据disperse计算出最佳的redundancycount。

例1:以下这个命令,未具体配置disperse和redundancy数量,系统会提示用户,并计算出最佳配置(4  brick配置1  redundancy)。

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

例2:系统计算得到6  brick配置2  redundancy

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

2、创建Distributed Dispersed Volumes

#glustervolume create disperse <count> [redundancy <count>] [transport tcp| rdma | tcp,rdma]

要求disperse<count>必填,redundancy 数量和dispersedvolume相同。

四、Volume性能分析

根据官方文档的例子,对比经典分布式EC卷和分布式复制卷的几项性能。

硬盘环境如下:6台服务器,每台配置4个4TB的SATA磁盘(总容量为96TB),每个磁盘的IOPS为90,且每个磁盘只配置一个brick

1、【场景1】分布式+  Replica 2 卷

磁盘可利用空间:48TB

读IOPS:2160(6*4*90)

写IOPS:1080

Maximum failedbricks: 1

Maximum failedservers: 1

2、【场景2】分布式+ EC 6.2卷

经典模式,6个Brick中2个做冗余,如下图所示

磁盘可利用空间:64TB(96*4/6)

读IOPS:540

写IOPS:360

Maximum failedbricks: 2

Maximum failedservers: 2

五、个人总结

从上述的性能分析示例中,可以得到,相对于分布式复制卷,经典分布式EC卷的优点是较高的磁盘利用率和容错性,但是其IOPS性能下降较多。

若用户对磁盘利用率有较高期望的时,我们可以采用分布式EC集群搭建GlusterFS服务。

若用户对IOPS要求较高时,分布式复制GlusterFS集群是最优选择。
---------------------
作者:dream-wing
来源:CSDN
原文:https://blog.csdn.net/daydayup_gzm/article/details/52748812
版权声明:本文为博主原创文章,转载请附上博文链接!

GlusterFS Dispersed Volume(纠错卷)总结的更多相关文章

  1. k8s volume存储卷(四)

    介绍 volume存储卷是Pod中能够被多个容器访问的共享目录,kubernetes的volume概念,用途和目的与docker的volume比较类似,但两者不能等价,首先,kubernetes中的v ...

  2. k8s volume存储卷

    k8s volume存储卷   介绍 volume存储卷是Pod中能够被多个容器访问的共享目录,kubernetes的volume概念,用途和目的与docker的volume比较类似,但两者不能等价, ...

  3. Docker容器学习梳理 - Volume数据卷使用

    之前部署了Docker容器学习梳理--基础环境安装,接下来看看Docker Volume的使用. Docker volume使用 Docker中的数据可以存储在类似于虚拟机磁盘的介质中,在Docker ...

  4. Docker学习笔记之docker volume 容器卷的那些事(二)

    预览目录 更改目录拥有者 Data Container 切换用户 参考文章 0x00 概述 如果你读了docker volume 容器卷的那些事(一),我想应该不会遇到下面这些问题的,毕竟是具有指导意 ...

  5. glusterfs分布式复制扩容卷以及平衡卷

    随着数据量的增长,需要扩容满足使用.今天测试下glusterfs磁盘扩容的具体步骤 1.扩容 之前用的2台计算机的分布式复制卷.需要同时之两个服务器增加一块磁盘并格式化,挂载并扩容 热添加磁盘 ech ...

  6. GlusterFS创建volume失败的解决方法(* or a prefix of it is already part of a volume)

    问题描写叙述: 之前已经创建了一个replicated的volume gv0,replica=2,两个文件夹为:/test/data1和/test/data2,之后发现这两个文件夹不太合适,想在/te ...

  7. docker进阶篇(一) ---- Volume(数据卷)

    引言 docker的镜像是由多个只读的文件系统叠加在一起形成的.当我们在我启动一个容器的时候,docker会加载这些只读层并在这些只读层的上面(栈顶)增加一个读写层.这时如果修改正在运行的容器中已有的 ...

  8. Docker学习笔记之docker volume 容器卷的那些事(一)

    预览目录 volume 方式 相关用例 使用方式 使用 volume driver bind mount 方式 相关用例 使用方式 配置selinux标签 配置macOS的安装一致性 tmpfs 方式 ...

  9. GlusterFs卷类型分析及创建、使用(结合kubernetes集群分析)

    引言 本文通过对卷类型的分析对比,来帮助读者选取生产环境最符合服务的挂载存储,命令可结合<glusterfs详解及kubernetes 搭建heketi-glusterfs>进行实验,下面 ...

随机推荐

  1. matlab循环中显示figure时窗口跳动

    在Matlab中,当在一个循环内部利用figure显示图片时,有时候会出现窗口跳动,尤其是两个显示器的时候, 具体就是每次循环中显示的figure的位置都出现在屏幕的不同位置,导致看起来灰常不爽 go ...

  2. 'cross-env' 不是内部或外部命令,也不是可运行的程序 或批处理文件。 npm ERR! code ELIFECYCLE npm ERR! errno 1

    在建立vue项目时报的错误 原因是缺少依赖,在此项目目录下下载依赖即可 cnpm install 发一次建立vue项目的完整顺序吧 //打开要创建的项目路径目录,创建项目 vue init webpa ...

  3. 开灯问题—C语言

    开灯问题 有n盏灯,编号为1~n.第1个人把所有灯打开,第2个人按下所有编号为2的倍数开关(这些灯将被关掉),第3个人按下所有编号为3的倍数的开关,以此类推.一共有k个人,问最后哪些灯是开着?输入n和 ...

  4. 【PYQT5快速开发】重定义边框、QSS美化皮肤主题

    在用qt designer的基础上重定义边框 前言 作为一名技术工作者,偶有使用.开发工具的需求.制作工具时,既不想在界面上花太懂功夫,又想要工具模样与众不同,结果找半天找不到一键换装的功能/拍砖. ...

  5. .net 生成非托管代码

    最近在一个老外的程序中看到一段代码,其中使用了System.Runtime.InteropServices.MarshalAs方法进行托管代码与非托管代码之间封装数据,感觉很新颖.特意记录下来,供大家 ...

  6. Gulp 给所有静态文件引用加版本号

    在juqery和easyui 盛行的年代许多项目采用纯静态页面去构建前端框架从而实现前后端分离的目的.项目开发周期内往往会频繁修改更新某个文件,当你将文件更新到服务器后客户端由于缓存问题而出现显示异常 ...

  7. vxlan 协议

    vxlan 协议原理简介 1. vxlan 简介 VXLAN 全称是 Virtual eXtensible Local Area Network,虚拟可扩展的局域网.它是一种 overlay 技术,通 ...

  8. 在docker容器上如何实现代码的版本管理

    之前在一台centos7的虚拟机上部署了docker并运行了三个容器给开发写代码用,写代码肯定会涉及到版本控制管理. 开始建议是开发在容器中写代码,然后通过docker commit的方式将其保存为i ...

  9. el-table单元格样式更改

    前几天遇到一个关于el-table表格样式的问题一直没解决 因为在el-table-column加样式并不生效所以更改起来比较麻烦 后来了看来element官方文档和在一些关于此方面的博客,使用了一个 ...

  10. react native 集成react navigation报错

    集成后出现:“Invalid escape sequence at line 1 column 29 path $[0].name”的错误. 解决办法: