volume 是 bricks 的逻辑集合,其中每个 bricks 都是可信存储池中服务器上的导出目录。 要在存储环境中创建新volume ,需要指定组成该卷的bricks 。 创建新卷后,必须先启动它,然后再尝试挂载它。
Volume 类型
可以在你的存储环境中创建以下类型的卷:
- Distributed - 又称哈希卷,近似于raid0,文件没有分片,文件根据hash算法分布在各个bricks 中, 你可以使用分布式卷来扩展存储,优点是容量大,缺点是没冗余。 冗余由其他硬件/软件层提供。
- Replicated – 相当于raid1, 文件可以在各个服务器中的bricks中复制存储, 可以在对高可用性和高可靠性至关重要的环境中使用复制卷。
- Distributed Replicated - 相当于raid10,Distributed replicated 卷会将文件hash 后分布在复制bricks中 ,可以在要求扩展存储且高可靠性至关重要的环境中使用分布式复制卷。 在大多数环境中,分布式复制卷还可以提高读取性能。
- Dispersed - 近似于raid5,文件分片存储在各个硬盘上,但有部分硬盘用于冗余用途,数量可以指定。 它将原始文件的编码片段存储到每个brick 块中,其方式是只需要片段的一个子集即可恢复原始文件。管理员在卷创建的时候,可以指定不丢失数据的情况下可以丢失的bricks 数量。
- Distributed Dispersed - 文件分散到各个分散的子卷中。 这具有Distributed Replicated的相同优点,但是使用分散子卷而不是复制子卷。
- Striped [过时] – 条带卷将数据跨的bricks 的卷中条带化。 为了获得最佳结果,在访问大文件的高并发环境中使用条带卷。.
- Distributed Striped [过时] - 分布式条带卷在群集中的两个或更多节点上对数据进行条带化。 如果环境中要求扩展存储,并且在高并发环境中访问非常大且至关重要的文件,你应该使用分布式条带卷。
- Distributed Striped Replicated [过时] – 分布式条带复制卷将数据条带化后hash分布在集群中的所有复制bricks 之间。 为了获得最佳结果,你应该在高并发,并行访问超大文件,并且性能非常重要的的环境中使用分布式条带复制卷。 在此版本中,仅Map Reduce workloads支持此卷类型的配置。
- Striped Replicated [过时] – 条带复制卷在集群中复制的bricks 划分数据。 为了获得最佳结果,你应该在并行访问非常大的文件且性能至关重要的高并发环境中使用条带复制卷。 在此版本中,仅Map Reduce workloads支持此卷类型的配置。
创建一个新卷
-
创建一个新卷:
# gluster volume create [stripe | replica | disperse] [transport tcp | rdma | tcp,rdma]
例如,创建一个名为test-volume的卷,该卷由 server3:/exp3 和 server4:/exp4 组成:
# gluster volume create test-volume server3:/exp3 server4:/exp4 Creation of test-volume has been successful Please start the volume to access data.
创建一个Distributed 卷
在Distributed 卷中,文件随机分布在卷中的各个 bricks 之间。 当你在需要自由扩展存储,冗余并不重要或由其他硬件/软件层提供的地方使用分布式卷。
Note: Distributed 卷中的磁盘/服务器故障可能会导致严重的数据丢失,因为文件目录随机分布在卷中的各个bricks 之间。
创建一个Distributed 卷
创建一个可信存储池(TSP)
-
怎么创建Distributed 卷
# gluster volume create [transport tcp | rdma | tcp,rdma]
例如,使用tcp创建具有四个存储服务器的Distributed 卷:
# gluster volume create test-volume server1:/exp1 server2:/exp2 server3:/exp3 server4:/exp4 Creation of test-volume has been successful Please start the volume to access data.
(可选)你可以展示volume信息:
# gluster volume info Volume Name: test-volume Type: Distribute Status: Created Number of Bricks: 4 Transport-type: tcp Bricks: Brick1: server1:/exp1 Brick2: server2:/exp2 Brick3: server3:/exp3 Brick4: server4:/exp4
例如,要在InfiniBand 网络上创建具有四个存储服务器的Distributed卷,请执行以下操作:
# gluster volume create test-volume transport rdma server1:/exp1 server2:/exp2 server3:/exp3 server4:/exp4 Creation of test-volume has been successful Please start the volume to access data.
如果未指定transport类型,则tcp用作默认值。 如果需要,还可以设置其他选项,例如auth.allow或auth.reject。
Note: 确保在使用挂载卷之前启动卷,否则挂起后客户端操作将停止。
创建一个Replicated卷
Replicated卷在多个 bricks 中创建文件副本。 在对高可用性和高可靠性至关重要的环境中使用Replicated卷。
Note: bricks 的数量应等于Replicated卷的副本数。 为了防止服务器和磁盘故障,建议该卷的bricks 来自不同的服务器。
创建一个Replicated卷
创建一个可信存储池(TSP)
-
怎么创建Distributed 卷
# gluster volume create [replica ] [transport tcp | rdma | tcp,rdma]
例如,要创建具有两个存储服务器的复制卷:
# gluster volume create test-volume replica 2 transport tcp server1:/exp1 server2:/exp2 Creation of test-volume has been successful Please start the volume to access data.
如果未指定transport类型,则tcp用作默认值。 如果需要,还可以设置其他选项,例如auth.allow或auth.reject。
Note:
确保在使用挂载卷之前启动卷,否则挂起后客户端操作将停止。
-
如果同一peer(服务器)上存在多个副本集的brick ,则GlusterFS将无法创建复制卷。 例如。 一个四节点复制卷,其中同一peer上存在一个副本集的多个 brick 。
# gluster volume create <volname> replica 4 server1:/brick1 server1:/brick2 server2:/brick3 server4:/brick4 volume create: <volname>: failed: Multiple bricks of a replicate volume are present on the same server. This setup is not optimal. Use 'force' at the end of the command if you want to override this behavior.
如果仍要使用此配置创建卷,请在命令末尾使用
force
选项。
副本卷的仲裁器配置
如果是副本为3的仲裁器卷,其中第三个brick 充当仲裁器brick。 该配置具有防止发生裂脑的机制。
你可以使用下面的命令创建它:
# gluster volume create <VOLNAME> replica 3 arbiter 1 host1:brick1 host2:brick2 host3:brick3`
有关此配置的更多信息,请参见 : afr-arbiter-volumes
请注意,副本为3的仲裁器配置也可以用于创建distributed-replicate卷。
创建一个Striped卷
条带卷将数据条带化后存储不同的 brick上。 为了获得最佳结果,仅应在访问大文件的高并发环境中使用Striped卷。
Note: brick的数量应等于Striped卷的条带数量。
创建一个Striped卷
创建一个可信存储池(TSP)
-
怎么创建Striped卷
# gluster volume create [stripe ] [transport tcp | rdma | tcp,rdma]
例如,要创建具有两个存储服务器的Striped卷:
# gluster volume create test-volume stripe 2 transport tcp server1:/exp1 server2:/exp2 Creation of test-volume has been successful Please start the volume to access data.
如果未指定transport类型,则tcp用作默认值。 如果需要,还可以设置其他选项,例如auth.allow或auth.reject。
Note: 确保在使用挂载卷之前启动卷,否则挂起后客户端操作将停止。
创建一个Distributed Striped卷
分布式条带卷在群集中的两个或更多节点上对数据进行条带化。 如果环境中要求扩展存储,并且在高并发环境中访问非常大且至关重要的文件,你应该使用分布式条带卷。
Note: 对于Distributed Striped卷,brick的数量应为条带数量的倍数。
创建一个Distributed Striped卷
创建一个可信存储池(TSP)
-
怎么创建Distributed Striped卷
# gluster volume create [stripe ] [transport tcp | rdma | tcp,rdma]
例如,要在八台存储服务器上创建Distributed Striped卷:
# 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 Creation of test-volume has been successful Please start the volume to access data.
如果未指定transport类型,则tcp用作默认值。 如果需要,还可以设置其他选项,例如auth.allow或auth.reject。
Note: 确保在使用挂载卷之前启动卷,否则挂起后客户端操作将停止。
创建一个Distributed Replicated卷
在volume中的不同的复制bricks之间分布文件。 可以在对扩展存储有要求且高可靠性重要的环境中使用Distributed Replicated卷。 在大多数环境中,Distributed Replicated复制卷还可以提高读取性能。
Note: Distributed Replicated卷的bricks数量应该是副本数的倍数. 同样,指定块的顺序对数据保护也有很大的影响。提供的列表中的每replica_count个连续的bricks都将组成一个副本集, 所有副本集都组合成一个卷范围的分发集。 要确保副本集成员没有放置在同一节点上,请以相同顺序列出每个服务器上的第一个brick ,然后列出每个服务器上的第二个brick ,依此类推。
创建一个Distributed Replicated卷
创建一个可信存储池(TSP)
-
怎么创建Distributed Replicated卷
# gluster volume create [replica ] [transport tcp | rdma | tcp,rdma]
例如,带有两个镜像的四节点分布式(复制)卷:
# gluster volume create test-volume replica 2 transport tcp server1:/exp1 server2:/exp2 server3:/exp3 server4:/exp4 Creation of test-volume has been successful Please start the volume to access data.
例如,要创建一个带有两个镜像的六节点分布式(复制)卷:
# gluster volume create test-volume replica 2 transport tcp server1:/exp1 server2:/exp2 server3:/exp3 server4:/exp4 server5:/exp5 server6:/exp6 Creation of test-volume has been successful Please start the volume to access data.
如果未指定transport类型,则tcp用作默认值。 如果需要,还可以设置其他选项,例如auth.allow或auth.reject。
Note:
确保在使用挂载卷之前启动卷,否则挂起后客户端操作将停止。
-
如果同一peer(服务器)上存在多个副本集的brick ,则GlusterFS将无法创建分布式复制卷。 例如。 一个四节点分布式复制卷,其中同一peer上存在一个副本集的多个 brick 。
# gluster volume create <volname> replica 2 server1:/brick1 server1:/brick2 server2:/brick3 server4:/brick4 volume create: <volname>: failed: Multiple bricks of a replicate volume are present on the same server. This setup is not optimal. Use 'force' at the end of the command if you want to override this behavior.
如果仍要使用此配置创建卷,请在命令末尾使用
force
选项。
创建一个Distributed Striped Replicated卷
分布式条带复制卷将数据hash分布在集群中的所有复制 bricks之间然后条带化存储。 为了获得最佳结果,应该在高并发的环境中使用分布式条带复制卷,在这些环境中,并行访问超大文件和性能至关重要。 在此版本中,仅Map Reduce workloads 支持此卷类型的配置。
Note: 对于Distributed Striped Replicated卷,brick的数量应为条带数量和副本数的倍数。
怎样创建一个 distributed striped replicated 卷
创建一个可信存储池(TSP)
-
使用下面的命令创建一个 distributed striped replicated 卷
# gluster volume create [stripe ] [replica ] [transport tcp | rdma | tcp,rdma]
例如,要在八台存储服务器上创建分布式复制条带卷:
# 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 Creation of test-volume has been successful Please start the volume to access data.
如果未指定transport类型,则tcp用作默认值。 如果需要,还可以设置其他选项,例如auth.allow或auth.reject。
Note:
确保在使用挂载卷之前启动卷,否则挂起后客户端操作将停止。
-
如果同一peer(服务器)上存在多个副本集的brick ,则GlusterFS将无法创建分布式复制卷。 例如。 一个四节点分布式复制卷,其中同一peer上存在一个副本集的多个 brick 。
# gluster volume create <volname> stripe 2 replica 2 server1:/brick1 server1:/brick2 server2:/brick3 server4:/brick4 volume create: <volname>: failed: Multiple bricks of a replicate volume are present on the same server. This setup is not optimal. Use 'force' at the end of the command if you want to override this behavior.
如果仍要使用此配置创建卷,请在命令末尾使用
force
选项。
创建一个Striped Replicated 卷
条带复制卷在集群中跨复制的bricks划分数据。 为了获得最佳结果,应该在并行访问非常大的文件且性能至关重要的高并发环境中使用条带复制卷。 在此版本中,仅Map Reduce workloads支持此卷类型的配置。
Note: 对于条带复制卷,bricks数应为复制数和条带数的倍数。
创建一个striped replicated 卷
创建一个可信存储池(TSP)
-
怎样创建一个 striped replicated 卷
# gluster volume create [stripe ] [replica ] [transport tcp | rdma | tcp,rdma]
例如,在四台存储服务器上创建条带复制卷:
# gluster volume create test-volume stripe 2 replica 2 transport tcp server1:/exp1 server2:/exp2 server3:/exp3 server4:/exp4 Creation of test-volume has been successful Please start the volume to access data.
在六台存储服务器上创建条带复制卷:
# gluster volume create test-volume stripe 3 replica 2 transport tcp server1:/exp1 server2:/exp2 server3:/exp3 server4:/exp4 server5:/exp5 server6:/exp6 Creation of test-volume has been successful Please start the volume to access data.
如果未指定transport类型,则tcp用作默认值。 如果需要,还可以设置其他选项,例如auth.allow或auth.reject。
Note:
确保在使用挂载卷之前启动卷,否则挂起后客户端操作将停止。
-
如果同一peer(服务器)上存在多个副本集的brick ,则GlusterFS将无法创建分布式复制卷。 例如。 一个四节点分布式复制卷,其中同一peer上存在一个副本集的多个 brick 。
# gluster volume create <volname> stripe 2 replica 2 server1:/brick1 server1:/brick2 server2:/brick3 server4:/brick4 volume create: <volname>: failed: Multiple bricks of a replicate volume are present on the same server. This setup is not optimal. Use `force` at the end of the command if you want to override this behavior.
如果仍要使用此配置创建卷,请在命令末尾使用
force
选项。
创建Dispersed Volumes
Dispersed volumes基于纠删码技术。 它对多个bricks的文件进行编码,并添加了一些冗余。 可以使用Dispersed volumes以最低的空间浪费获得可靠性。
冗余
创建Dispersed volume时会设置一个冗余值。 该值确定在不中断volume操作的情况下可以丢失多少bricks。 它还使用以下公式确定卷的可用空间量:
<Usable size> = <Brick size> * (#Bricks - Redundancy)
分散集的所有bricks应具有相同的容量,否则,当最小的brick装满时,分散集将不允许存储额外数据。
需要注意的是,具有3个bricks和冗余1的配置将具有较少的可用空间(占总物理空间的66.7%)与具有10个bricks和冗余1的配置(90%)相比。 但是,第一个配置将比第二个配置更安全(第二个配置因故障率失败的可能性大约为第一个配置的4.5倍)。
例如,由6个4TB的bricks和冗余为2组成的Dispersed卷,即使坏掉了两个bricks, 也可以正常可用。 但是,第三个brick如果无法访问的话,那么volume 的容量将会降低, 该volume的可用空间将等于16TB。
GlusterFS中纠删码的实现将冗余限制为小于 #Bricks / 2 的值(或者说,冗余* 2 < #Bricks )。 如果 redundancy * 2 = #Bricks ,将几乎等同于副本为2的卷,并且在这种情况下,复制卷的性能可能更好。
Optimal volumes
就性能而言,纠删码技术表现最糟糕的事情之一是RMW(读-修改-写)周期。 纠删码技术以固定大小的块工作,而不能与较小的块一起工作。 这意味着,如果用户部分写操作因为不能填充满整个块,则需要从文件的当前内容中读取剩余部分,合并它们,计算更新编码块,最后 ,写入结果数据。
这会增加延迟,从而降低性能。 某些GlusterFS性能xlators可以帮助workloads减少甚至消除此问题,但是在使用Dispersed卷时应考虑到这一问题。
Dispersed卷的块大小取决于bricks数和冗余数:512 * (#Bricks - redundancy) bytes 。 此值也称为条带大小。
使用 #Bricks/redundancy 的组合计算出条带大小为2的幂,将使Dispersed卷在大多数workloads 中表现更好,因为将数据写入两个或更多的块中更为常见(例如,数据库,虚拟机和许多应用程序)。
这被认为是最佳的组合。
例如,具有6个bricks 和冗余为2的配置的条带大小为512 * (6 - 2) = 2048 bytes,因此被认为是最佳的。 具有7个bricks 和2个冗余的配置的条带大小为2560字节,需要RMW周期进行多次写入(当然,这取决于具体用例)。
怎样创建一个dispersed 卷
创建一个可信存储池(TSP)
-
创建一个dispersed 卷
# gluster volume create [disperse [<count>]] [redundancy <count>] [transport tcp | rdma | tcp,rdma]
创建dispersed卷可以指定分散集中的bricks数量,或者指定冗余bricks数量,或者两者指定。
如果未指定disperse或缺少<count>,则将整个volume视为由命令行中列举的所有bricks组成的单个分散集。
如果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)
在所有自动计算 redundancy 且不等于 '1' 的情况下,都会显示警告消息:
# 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 必须大于0,并且bricks的总数必须大于2 *redundancy 。 这意味着dispersed卷必须至少包含3个bricks。
如果未指定transport类型,则tcp用作默认值。 如果需要,还可以设置其他选项,就像其他卷类型一样。
Note:
确保在使用挂载卷之前启动卷,否则挂起后客户端操作将停止。
-
如果同一peer(服务器)上存在多个分散集的brick ,则GlusterFS将无法创建dispersed卷。
# gluster volume create <volname> disperse 3 server1:/brick{1..3} volume create: <volname>: failed: Multiple bricks of a replicate volume are present on the same server. This setup is not optimal. Do you still want to continue creating the volume? (y/n)
如果仍要使用此配置创建卷,请在命令末尾使用
force
选项。
创建Distributed Dispersed 卷
分布式分散卷等效于分布式复制卷,但是使用分散子卷而不是复制子卷。
怎样创建distributed dispersed 卷
创建一个可信存储池(TSP)
-
怎样创建 distributed dispersed 卷
# gluster volume create disperse <count> [redundancy <count>] [transport tcp | rdma | tcp,rdma]
要创建分布式分散卷,必须使用 disperse 关键字和<count>,并且在命令行中指定的 bricks 数必须是 disperse 的倍数。
redundancy 与Dispersed 卷中的redundancy 完全相同。
如果未指定transport类型,则tcp用作默认值。 如果需要,还可以设置其他选项,就像其他卷类型一样。
Note:
确保在使用挂载卷之前启动卷,否则挂起后客户端操作将停止。
-
如果同一peer(服务器)上存在多个分散集的brick ,则GlusterFS将无法创建dispersed卷。
# gluster volume create <volname> disperse 3 server1:/brick{1..6} volume create: <volname>: failed: Multiple bricks of a replicate volume are present on the same server. This setup is not optimal. Do you still want to continue creating the volume? (y/n)
如果仍要使用此配置创建卷,请在命令末尾使用
force
选项。
启动Volumes
在使用挂载卷之前必须启动卷
怎样启动 volume
-
启动volume
# gluster volume start
比如启动一个名为 test-volume 的卷:
# gluster volume start test-volume Starting test-volume has been successful