在glusterfs上创建distributedvolume,replicatedvolume,dispersedvolume,combinedvolume

author author     2022-09-09     767

关键词:


      前面一篇写到了在CentOS上如何安装glusterfs,以及简单创建了一个volume并实现了native-mount,今天我们重点看一下在glusterfs上都可以创建哪种类型的volume.


1. 首先还是先介绍下实验环境,今天共用到了5台虚拟机,其中4个虚拟机做server端,分别是:

servera.lab.example.com

serverb.lab.example.com

serverc.lab.example.com

serverd.lab.example.com

1个虚拟机做client端:

workstation.lab.example.com

五台虚拟机之间都打开了防火墙,可以相互访问,并且可以相互解析hostname,4台server上已经安装好了glusterfs相关的package,并组成了一个trusted-storage-pool:

[[email protected] ~]# gluster pool list
UUID                        Hostname            State
d61aaee4-efe5-4f60-9216-c65fdb0b65f8    serverb.lab.example.com    Connected 
be6e1fe5-ae7d-40d1-901e-8b58fd0a4be3    serverc.lab.example.com    Connected 
25dda180-3285-47f6-8595-3cb9bdaab92f    serverd.lab.example.com    Connected 
860cd46c-390b-430f-8a01-d3433fa2775c    localhost            Connected


2.在4台server上分别创建5个bricks,并挂载到/bricks/thinvol$n目录下,依次执行以下命令(如非特殊说明,以下命令均为在4台server上执行,文中以servera为示例):

a. 实验环境中每个server上已经提前做好了一个lvm group vg_bricks

[[email protected] ~]# vgs
  VG        #PV #LV #SN Attr   VSize  VFree
  vg_bricks   1  10   0 wz--n- 20.00g 9.97g
b. 创建瘦逻辑卷

[[email protected] ~]# for i in {1..5}; do lvcreate -L 2G -T vg_bricks/pool$i; done
  Logical volume "pool1" created.
  Logical volume "pool2" created.
  Logical volume "pool3" created.
  Logical volume "pool4" created.
  Logical volume "pool5" created.
[[email protected] ~]# for i in {1..5}; do lvcreate -V 2G -T vg_bricks/pool$i -n thinvol$i; done
  Logical volume "thinvol1" created.
  Logical volume "thinvol2" created.
  Logical volume "thinvol3" created.
  Logical volume "thinvol4" created.
  Logical volume "thinvol5" created.

c. 格式化逻辑卷并挂载到指定目录上,生产环境中挂载时建议将挂载命令写入/etc/fstab中以实现开机自动挂载

[[email protected] ~]# for i in {1..5}; do mkfs -t xfs -i size=512 /dev/mapper/vg_bricks-thinvol$i; done
[[email protected] ~]# mkdir -p /bricks/thinvol{1..5}
[[email protected] ~]# for i in {1..5}; do mount -t xfs /dev/mapper/vg_bricks-thinvol$i /bricks/thinvol$i; done

d. 创建brick并设置selinux安全上下文,这里默认selinux是打开的

[[email protected] ~]# for i in {1..5}; do mkdir /bricks/thinvol$i/brick; done
[[email protected] ~]# chcon -R -t glusterd_brick_t /bricks/thinvol{1..5}

至此,准备工作可以告一段落了


3. 创建分布式卷Distributed volume

[[email protected] ~]# gluster volume create Test01 > servera.lab.example.com:/bricks/thinvol1/brick > serverb.lab.example.com:/bricks/thinvol1/brick > serverc.lab.example.com:/bricks/thinvol1/brick > serverd.lab.example.com:/bricks/thinvol1/brick
volume create: Test01: success: please start the volume to access data

查看volume的状态,可以看到刚创建完后,volume处在“not started”状态

[[email protected] ~]# gluster volume status Test01
Volume Test01 is not started

start volume

[[email protected] ~]# gluster volume start Test01
volume start: Test01: success

此时查看volume的详细信息发现volume已started,volume 类型为distribute

[[email protected] ~]# gluster volume info Test01
 
Volume Name: Test01
Type: Distribute
Volume ID: f40beb82-81ae-42d2-bd1a-a7b9a24abe63
Status: Started
Number of Bricks: 4
Transport-type: tcp
Bricks:
Brick1: servera.lab.example.com:/bricks/thinvol1/brick
Brick2: serverb.lab.example.com:/bricks/thinvol1/brick
Brick3: serverc.lab.example.com:/bricks/thinvol1/brick
Brick4: serverd.lab.example.com:/bricks/thinvol1/brick
Options Reconfigured:
performance.readdir-ahead: on

在workstation.lab.example.com上挂载volume Test01

[[email protected] ~]# yum install -y glusterfs-fuse
[[email protected] ~]# mkdir /mnt/Test01
[[email protected] ~]# mount -t glusterfs servera.lab.example.com:Test01 /mnt/Test01
[[email protected] ~]# df -h | grep Test01
servera.lab.example.com:Test01  8.0G  131M  7.9G   2% /mnt/Test01

这里可以看到一些distributed volume的特点,有点类似raid0,volume的大小是组成volume的4个brick之和(每个brick大小为2G,共计2G*4=8G)

在/mnt/Test01下创建100个测试文件,会发现文件会“随机”分配到4个server的brick下

[[email protected] ~]# cd /mnt/Test01/
[[email protected] Test01]# touch {1..100}.file
[[email protected] ~]# ls /bricks/thinvol1/brick/
100.file  13.file  18.file  29.file  32.file  37.file  40.file  47.file  61.file  6.file   76.file  7.file   97.file
12.file   17.file  28.file  2.file   34.file  39.file  44.file  54.file  62.file  75.file  77.file  94.file
[[email protected] ~]# ls /bricks/thinvol1/brick/
10.file  1.file   25.file  38.file  42.file  52.file  56.file  59.file  66.file  80.file  86.file  98.file
14.file  24.file  26.file  41.file  50.file  53.file  57.file  5.file   74.file  83.file  87.file
...


4. 创建复制卷Replicated volume

[[email protected] ~]# gluster volume create Test02 replica 4 > servera.lab.example.com:/bricks/thinvol2/brick > serverb.lab.example.com:/bricks/thinvol2/brick > serverc.lab.example.com:/bricks/thinvol2/brick > serverd.lab.example.com:/bricks/thinvol2/brick
volume create: Test02: success: please start the volume to access data

start volume Test02并查看volume的详细信息,可以看到volume的类型为Replicate即复制卷

[[email protected] ~]# gluster volume start Test02
volume start: Test02: success
[[email protected] ~]# gluster volume info Test02
 
Volume Name: Test02
Type: Replicate
Volume ID: 305f2c2f-8550-40e0-9d75-a2bc8149a333
Status: Started
Number of Bricks: 1 x 4 = 4
Transport-type: tcp
Bricks:
Brick1: servera.lab.example.com:/bricks/thinvol2/brick
Brick2: serverb.lab.example.com:/bricks/thinvol2/brick
Brick3: serverc.lab.example.com:/bricks/thinvol2/brick
Brick4: serverd.lab.example.com:/bricks/thinvol2/brick
Options Reconfigured:
performance.readdir-ahead: on

将Test02挂载到client下的/mnt/Test02目录下

[[email protected] Test01]# mkdir /mnt/Test02
[[email protected] Test01]# mount -t glusterfs servera.lab.example.com:Test02 /mnt/Test02
[[email protected] Test02]# df -h | grep Test02
servera.lab.example.com:Test02  2.0G   33M  2.0G   2% /mnt/Test02

这里可以看到Test02挂载后的大小为2G,即和组成Test02的每个brick一样大小,其特点类似raid1

在/mnt/Test02 下创建100个测试文件,会发现每个server的brick下都创建了100个测试文件

[[email protected] Test02]# touch {1..100}.file
[[email protected] ~]# ls /bricks/thinvol2/brick/
100.file  16.file  22.file  29.file  35.file  41.file  48.file  54.file  60.file  67.file  73.file  7.file   86.file  92.file  99.file
10.file   17.file  23.file  2.file   36.file  42.file  49.file  55.file  61.file  68.file  74.file  80.file  87.file  93.file  9.file
11.file   18.file  24.file  30.file  37.file  43.file  4.file   56.file  62.file  69.file  75.file  81.file  88.file  94.file
12.file   19.file  25.file  31.file  38.file  44.file  50.file  57.file  63.file  6.file   76.file  82.file  89.file  95.file
13.file   1.file   26.file  32.file  39.file  45.file  51.file  58.file  64.file  70.file  77.file  83.file  8.file   96.file
14.file   20.file  27.file  33.file  3.file   46.file  52.file  59.file  65.file  71.file  78.file  84.file  90.file  97.file
15.file   21.file  28.file  34.file  40.file  47.file  53.file  5.file   66.file  72.file  79.file  85.file  91.file  98.file
[[email protected] ~]# ls /bricks/thinvol2/brick/ | wc -w
100
[[email protected] ~]# ls /bricks/thinvol2/brick/ | wc -w
100
[[email protected] ~]# ls /bricks/thinvol2/brick/ | wc -w
100


5. 创建“分散卷”Dispersed volume

[[email protected] ~]# gluster volume create Test03 > disperse-data 2 redundancy 1 > servera.lab.example.com:/bricks/thinvol3/brick > serverb.lab.example.com:/bricks/thinvol3/brick > serverc.lab.example.com:/bricks/thinvol3/brick
volume create: Test03: success: please start the volume to access data
[[email protected] ~]# gluster volume start Test03
volume start: Test03: success
[[email protected] ~]# gluster volume info Test03
 
Volume Name: Test03
Type: Disperse
Volume ID: 78d23935-8d67-4eb1-86b6-e94c7c8866c9
Status: Started
Number of Bricks: 1 x (2 + 1) = 3
Transport-type: tcp
Bricks:
Brick1: servera.lab.example.com:/bricks/thinvol3/brick
Brick2: serverb.lab.example.com:/bricks/thinvol3/brick
Brick3: serverc.lab.example.com:/bricks/thinvol3/brick
Options Reconfigured:
performance.readdir-ahead: on

将dispersed volume Test03 挂载到client server /mnt/Test03目录下

[[email protected] Test02]# mkdir /mnt/Test03
[[email protected] Test02]# mount -t glusterfs servera.lab.example.com:Test03 /mnt/Test03
[[email protected] Test02]# df -h | grep Test03
servera.lab.example.com:Test03  4.0G   66M  4.0G   2% /mnt/Test03

从上可以看出Test03的可用空间大小为4G,为2个brick(

servera.lab.example.com:/bricks/thinvol3/brick serverb.lab.example.com:/bricks/thinvol3/brick

)的大小

在/mnt/Test03下创建100个测试文件,观察数据分布##这里测试的结果和我原来理解的有些区别

[[email protected] Test03]# touch {1..100}.file
[[email protected] ~]# ls /bricks/thinvol3/brick/
100.file  16.file  22.file  29.file  35.file  41.file  48.file  54.file  60.file  67.file  73.file  7.file   86.file  92.file  99.file
10.file   17.file  23.file  2.file   36.file  42.file  49.file  55.file  61.file  68.file  74.file  80.file  87.file  93.file  9.file
11.file   18.file  24.file  30.file  37.file  43.file  4.file   56.file  62.file  69.file  75.file  81.file  88.file  94.file
12.file   19.file  25.file  31.file  38.file  44.file  50.file  57.file  63.file  6.file   76.file  82.file  89.file  95.file
13.file   1.file   26.file  32.file  39.file  45.file  51.file  58.file  64.file  70.file  77.file  83.file  8.file   96.file
14.file   20.file  27.file  33.file  3.file   46.file  52.file  59.file  65.file  71.file  78.file  84.file  90.file  97.file
15.file   21.file  28.file  34.file  40.file  47.file  53.file  5.file   66.file  72.file  79.file  85.file  91.file  98.file
[[email protected] ~]# ls /bricks/thinvol3/brick/ | wc -w
100
[[email protected] ~]# ls /bricks/thinvol3/brick/ | wc -w
100


6. 创建复合卷Combined volume

复合卷就是前面三种卷的组合,可以是distributed-replicated,也可以是distributed-dispersed,但是貌似没有replicated-dispersed的组合

[[email protected] ~]# gluster volume create Test04 replica 3 > servera.lab.example.com:/bricks/thinvol4/brick > serverb.lab.example.com:/bricks/thinvol4/brick > serverc.lab.example.com:/bricks/thinvol4/brick > servera.lab.example.com:/bricks/thinvol5/brick > serverb.lab.example.com:/bricks/thinvol5/brick > serverc.lab.example.com:/bricks/thinvol5/brick
volume create: Test04: success: please start the volume to access data
[[email protected] ~]# gluster volume start Test04
volume start: Test04: success
[[email protected] ~]# gluster volume info Test04
 
Volume Name: Test04
Type: Distributed-Replicate
Volume ID: 45df998d-2d14-4af2-83c7-e497bd5a8dd0
Status: Started
Number of Bricks: 2 x 3 = 6
Transport-type: tcp
Bricks:
Brick1: servera.lab.example.com:/bricks/thinvol4/brick
Brick2: serverb.lab.example.com:/bricks/thinvol4/brick
Brick3: serverc.lab.example.com:/bricks/thinvol4/brick
Brick4: servera.lab.example.com:/bricks/thinvol5/brick
Brick5: serverb.lab.example.com:/bricks/thinvol5/brick
Brick6: serverc.lab.example.com:/bricks/thinvol5/brick
Options Reconfigured:
performance.readdir-ahead: on

从上面可以看出volume Test04的类型为Distributed-Replicate

在client上挂载Test04,Test04的可用空间为4G

[[email protected] Test03]# mkdir /mnt/Test04
[[email protected] Test03]# mount -t glusterfs servera.lab.example.com:Test04 /mnt/Test04
[[email protected] Test03]# df -h | grep Test04
servera.lab.example.com:Test04  4.0G   66M  4.0G   2% /mnt/Test04

在/mnt/Test04下创建100个测试文件,并查看下数据分布

[[email protected] Test04]# touch {1..100}.file
[[email protected] thinvol4]# ls /bricks/thinvol4/brick/ | wc -w
48
[[email protected] thinvol4]# ls /bricks/thinvol5/brick/ | wc -w
52
[[email protected] thinvol4]#
[[email protected] ~]# ls /bricks/thinvol4/brick/ | wc -w
48
[[email protected] ~]# ls /bricks/thinvol5/brick/ | wc -w
52
[[email protected] ~]# ls /bricks/thinvol4/brick/ | wc -w
48
[[email protected] ~]# ls /bricks/thinvol5/brick/ | wc -w
52

可以发现

Brick1: servera.lab.example.com:/bricks/thinvol4/brick
Brick2: serverb.lab.example.com:/bricks/thinvol4/brick
Brick3: serverc.lab.example.com:/bricks/thinvol4/brick

组成了一个3副本,每个brick上的数据一致

Brick4: servera.lab.example.com:/bricks/thinvol5/brick
Brick5: serverb.lab.example.com:/bricks/thinvol5/brick
Brick6: serverc.lab.example.com:/bricks/thinvol5/brick

组成了一个3副本,每个brick上的数据一致

当然了,这里的例子限于实验环境的局限性,每个server上选取了两个brick,生产环境中还是要尽量杜绝这种情况的。Ok,今天就到这里了。

本文出自 “不积跬步,无以至千里” 博客,请务必保留此出处http://jiaxiaolei.blog.51cto.com/3117381/1950628

openstack结合glusterfs存储

1、机器信息2、准备工作2.1、关闭NetworkManager服务2.2、上传repo文件2.3、在每个机器上做时间同步2.4、每台机器上关闭selinux服务、配置防火墙2.5、每台机器上配置hosts文件3、部署O+G环境3.1、每台机器上安装gfs组件3.2、在YUN21上安装p... 查看详情

gfs分布式文件系统(代码片段)

目录一.GlusterFS概述1.GlusterFS简介2.GlusterFS特点3.GlusterFS术语4.模块化堆栈式架构5.GlusterFS的工作流程6.弹性HASH算法7.GlusterFs的卷类型二.部署GlusterFS群集1.准备环境(所有node节点上操作)①添加硬盘,关闭防火墙,修改所有node节... 查看详情

openstack结合glusterfs存储其一(准备工作)

1、机器信息2、准备工作2.1、关闭NetworkManager服务2.2、上传repo文件2.3、在每个机器上做时间同步2.4、每台机器上关闭selinux服务、配置防火墙2.5、每台机器上配置hosts文件3、部署O+G环境3.1、每台机器上安装gfs组件3.2、在YUN21上安装p... 查看详情

38掌握分布式存储系统glusterfs的基本用法,包括卷管理数据复制(代码片段)

GlusterFS是一种分布式文件系统,可以将多个存储服务器集成为一个分布式存储池。以下是一些基本的使用方法和示例代码。安装和启动GlusterFS在所有节点上安装GlusterFS,并确保每个节点上的GlusterFS服务已经启动。创建Glust... 查看详情

线上部署glusterfs情况调研结果

    还是有不少群友在选择GlusterFS版本时缺乏信心,所以在“GlusterFS技术交流”QQ群(234901333)里调研了一下线上部署GlusterFS情况。    先说明一下GlusterFS的应用场景:    纯基于GlusterFS... 查看详情

GlusterFS/Heketi 中的最小卷大小

】GlusterFS/Heketi中的最小卷大小【英文标题】:MinimumvolumesizeinGlusterFS/Heketi【发布时间】:2018-01-2911:12:52【问题描述】:我最近按照官方指南在Kubernetes上设置Heketi。一切正常,除了每当我创建一个小于2GB的驱动器时,它会自动创... 查看详情

cinder对接glusterfs

1.准备一个glusterfs存储glustervolumecreateonevol192.168.1.99:/storage6/brick02glustervolumestartonevolglustervolumeinfoonevol看到如下信息,则证明glusterfs存储创建完成  2.在cinder节点挂载glusterfs安装glusterfs驱动yuminstal 查看详情

使用 DaemonSet 运行 glusterfs 集群

】使用DaemonSet运行glusterfs集群【英文标题】:RunglusterfsclusterusingDaemonSet【发布时间】:2016-12-2300:17:49【问题描述】:我一直在尝试使用这些在我的kubernetes集群上运行glusterfs集群:glusterfs-service.json"kind":"Service","apiVersion":"v1","metadat... 查看详情

分布式文件系统-glusterfs

1.1分布式文件系统1.1.1什么是分布式文件系统  相对于本机端的文件系统而言,分布式文件系统(英语:Distributedfilesystem, DFS),或是网络文件系统(英语:NetworkFileSystem),是一种允许文件通过网络在多台主机上分享的文... 查看详情

glusterfs分布式文件系统

glusterfs第1章什么是分布式文件系统?相对于本极端的文件系统而言,分布式文件系统DFS,伙食网络文件系统NFS,是一种允许文件通过网络在多台主机上分享的文件系统你那个,可以让多机器上的多用户分享指定问加你和存储空间在这样... 查看详情

glusterfs存储结构原理介绍(代码片段)

...ooseFS、OpenAFS、GoogleFS,具体实现原理我这里不再介绍一、GlusterFS概述GlusterFS系统是一个可扩展的网络文件系统,相比其他分布式文件系统,GlusterFS具有高扩展性、高可用性、高性能、可横向扩展等特点,并且其没有元数据服务器... 查看详情

分布式文件系统--glusterfs(代码片段)

...模块化堆栈式架构2.4工作流程2.5基本卷与复合卷二、部署GlusterFS群集1准备环境2配置/etc/hosts文件3安装GlusterFS并启动4时间同步,加入存储信任池5创建卷5.1创建分布式卷5.2创建条带卷5.3创建复制卷5.4创建分布式条带卷 查看详情

glusterfs分布式文件系统(代码片段)

简介Glusterfs是一个开源的分布式文件系统,是Scale存储的核心,能够处理千数量级的客户端。是整合了许多存储块(server)通过InfinibandRDMA或者 Tcp/Ip方式互联的一个并行的网络文件系统。  特征:容量可以按比例的扩展,... 查看详情

glusterfs-3.7.16released

GlusterFS3.7.16在3.7.15的基础上修复了18个bug,并发现了更多的已知问题,该版本仍有10个已知问题待处理。(fromBLOG)release-notes:https://github.com/gluster/glusterfs/blob/release-3.7/doc/release-notes/3.7.16.md下载地址:https://download.gluster.o 查看详情

glusterfs原创资源

GlusterFS分布式文件系统原创资源合集,持续更新补充,方便自己和广大同学查阅。[1]GlusterFS集群文件系统研究[2]基于开源软件构建高性能集群NAS系统[3] 创建Glusterfs分布式RAID10卷[4]设计新Xlator扩展GlusterFS[5]Glusterfs全局统一... 查看详情

glusterfs分布式文件系统概述(代码片段)

博文目录一、GlusterFS概述1、GlusterFS的特点2、GlusterFS术语3、模块化堆栈式架构二、GlusterFS的工作原理1、GlusterFS的工作流程2、弹性HASH算法三、GlusterFS的卷类型1、分布式卷2、条带卷3、复制卷4、分布式条带卷5、分布式复制卷一、G... 查看详情

self-hostedengine+glusterfs超融合部署指南

...理网络,另外两张经过绑定,提供高达两万兆的网络环境,给GlusterFS作为数据交换网络通道.一块1.3T的磁盘(硬件RAID5),在装完系统后,剩余1.1T配置GlusterFS文件系统给oVirt作为存储.注:以下步骤,有标记为全部节点的需要在三个节点上分别... 查看详情

4.glusterfs常见故障处理

  一般硬盘也要备用几块,因为随着发展,可能这些型号的硬盘不好买到了,一般的事故不会在开始一两年出,在硬件老化的时候出故障的频率高。4.1硬盘故障如果底层做了RAID配置,有硬件故障,直接更换硬盘,会自动同步... 查看详情