经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » Linux/Shell » 查看文章
GlusterFs分布式文件系统
来源:cnblogs  作者:FuShudi  时间:2024/7/12 9:37:02  对本文有异议

GlusterFS 笔记

GlusterFS 是一个可扩展的分布式文件系统,旨在处理大量数据的存储需求。它通过将多个存储服务器的存储空间聚合在一起,提供单一的命名空间。以下是 GlusterFS 中几种常见的卷(Volume)类型及其作用,并用通俗的例子来说明每种类型的特点。

主机名 IP
node1 192.168.200.179
node2 192.168.200.180
node3 192.168.200.172

这里面的每个节点都有3块额外的硬盘,每个硬盘20个G

一、安装和配置 GlusterFS

1. 安装 GlusterFS

每个服务器节点上执行以下命令安装 GlusterFS:

  1. yum install glusterfs-server

启动 GlusterFS 服务:

  1. systemctl enable --now glusterd

2. 配置 GlusterFS

假设我们有三台服务器 node1node2node3,首先在每个节点上编辑 /etc/hosts 文件,添加所有节点的 IP 地址和主机名:

  1. 192.168.200.179 node1
  2. 192.168.200.180 node2
  3. 192.168.200.172 node3

然后,在一个节点上执行以下命令来设置信任关系:

  1. gluster peer probe node2
  2. gluster peer probe node3

使用 gluster peer status 命令来检查集群状态,确保所有节点都已经连接。

3. 格式化卷

自行将硬盘进行分区,然后格式化,也可以不分区,直接将一整个硬盘格式化,我建议还是分一下区

4. 创建挂载点并挂载

每个节点都要做,我只写一台的操作

  1. # 每个节点都是,我的每个节点的硬盘都是sdb1,sdc1,sdd1
  2. [root@oe01 ~]# mkdir -p /data/sd{c..d}1
  3. [root@oe01 ~]# mount /dev/sdb1 /data/sdb1
  4. [root@oe01 ~]# mount /dev/sdc1 /data/sdc1
  5. [root@oe01 ~]# mount /dev/sdd1 /data/sdd1

二、GlusterFS 卷的类型

1. 分布式卷(Distributed Volume)

作用:

将文件随机分布到集群中的不同服务器上,没有任何冗余。这种卷适合不需要高可用性和容错性的场景,例如缓存或临时文件存储。

例子:

像是一个图书馆里,所有的书都随意放在不同的书架上,没有特定的顺序。如果一个书架坏了,那上面的书就暂时不可用了。

配置示例:

1. 创建卷
  1. [root@oe01 sdc1]# gluster volume create volume1 node1:/data/sdc1/brick node2:/data/sdc1/brick
  2. volume create: volume1: success: please start the volume to access data

参数解释:

  • 为什么一个用node1的sdc,另一个用node2的sdc呢?
    • 这样做是防止某一台主机故障而导致的数据丢失,glusterfs会根据你创建卷时指定的数据来存放文件
    • 当然我们这里是使用的分布式卷,是没有容错机制的,你也可以全部指定在同一节点的磁盘
  • node1:/data/sdc1/brick
    • 这个参数是指在/data/sdc1/下创建一个brick目录,并将所有的数据都存储在这个目录里面
    • 不能够直接指定/data/sdc1会报错的,因为glusterfs不能直接在根目录下创建(这里的根目录并不是指Linux的根目录),必须得在你指定的目录下的子目录创建
2. 启动卷

现在卷是创建出来了,但是没有处于启动状态,是无法使用的,接下来我们启动这个卷

  1. [root@oe01 sdc1]# gluster volume start volume1
  2. volume start: volume1: success

启动卷也是很简单,直接告诉他需要启动的卷名就可以了

3. 客户端挂载

客户端需要挂载的话可以通过posix协议来挂载,也就是mount -t glusterfs 这样的方式

  1. # 我是用第三个节点充当客户端
  2. # 1. 安装客户端软件包
  3. [root@oe03 ~]# yum install glusterfs-fuse -y
  4. # 2. 挂载使用
  5. [root@oe03 ~]# mount -t glusterfs node1:/volume1 /mnt/

你在挂载的时候随意指定集群内的任意节点都可以,我这里使用的node1,你可以使用node2:/volume1,或者node3:/volume1,即使我们没有使用node3来创建这个卷依然可以挂载

4. 观察卷的存储方式

我们在客户端往卷里写入文件,然后回到node1和node2查看

  1. [root@oe03 ~]# cd /mnt/
  2. [root@oe03 mnt]# cp /etc/hosts .
  3. [root@oe03 mnt]# ls
  4. hosts

将hosts文件复制到/mnt下,我们回到node1和node2来查看

  1. [root@oe01 ~]# ls /data/sdc1/brick/
  2. hosts
  3. [root@oe02 ~]# ls /data/sdc1/brick/

可以很清楚的看见,这个文件只有node1节点上有,如果文件丢失/损坏是没有副本或者其他机制可以恢复的

2. 复制卷(Replicated Volume)

作用:

提供数据冗余,通过在多个服务器上复制每个文件,确保高可用性和数据容错性。适合重要数据存储,需要高可靠性的场景。

例子:

像是一个图书馆里,每本书都有多个副本,放在不同的书架上。如果一个书架坏了,你还能从其他书架上找到同样的书。

配置示例:

1. 创建卷
  1. [root@oe01 sdb1]# gluster volume create volume2 replica 3 node1:/data/sdb1/brick node2:/data/sdb1/brick node3:/data/sdb1/brick
  2. volume create: volume2: success: please start the volume to access data

参数解释:

  • replica
    • 这个就是指定卷的模式,分布式卷我们没有指定,因为默认就是分布式卷,后面的3代表3副本
2. 启动卷并挂载
  1. [root@oe01 sdb1]# gluster volume start volume2
  2. volume start: volume2: success
  3. # 我们还是一样在node3上挂载
  4. [root@oe03 mnt]# mkdir /gluster/replicas -p
  5. [root@oe03 mnt]# mount -t glusterfs node2:/volume2 /gluster/replicas
3. 观察卷的存储方式
  1. [root@oe03 replicas]# cp /etc/hosts .
  2. [root@oe03 replicas]# ls
  3. hosts
  4. # node1上
  5. [root@oe01 ~]# ls /data/sdb1/brick/
  6. hosts
  7. # node2上
  8. [root@oe02 ~]# ls /data/sdb1/brick/
  9. hosts
  10. # node3上
  11. [root@oe03 ~]# ls /data/sdb1/brick/
  12. hosts

可以看到,hosts这个文件每个节点都写入了一份,这样做确保了数据的可靠性,丢失了一大部分存储空间空间只有以前的1/3

  1. [root@oe03 ~]# df -hT /gluster/replicas/
  2. Filesystem Type Size Used Avail Use% Mounted on
  3. node2:/volume2 fuse.glusterfs 20G 381M 20G 2% /gluster/replicas

这里显示他的空间就只有20G,我们使用的是3个20G的磁盘做的

3. 条带卷(Striped Volume)

作用:

将文件分块,并将块分布在多个服务器上,以提高读取和写入性能。适合需要高带宽和大文件存储的场景。与Raid0类似

例子:

像是一本大字典,每一页都分给不同的书架。如果你要查阅字典,每个书架会提供一部分内容,从而加快查找速度。

4. 分布式复制卷(Distributed Replicated Volume)

作用:

结合分布式卷和复制卷的优点,将文件分布在不同的服务器组中,并在每个组内复制文件。提供高可用性和扩展性。

例子:

像是一个图书馆,不仅每本书有多个副本,而且这些副本还分散在不同的区域。如果一个区域坏了,你还能从其他区域找到同样的书。

配置示例:

1. 清初卷

要创建分布式复制卷至少需要副本数*2的brick才可以

先停止卷

  1. # 先删除之前使用过的卷,我们指定副本为3,那么就需要6个brick,我们现在是不够的
  2. [root@oe01 brick]# gluster volume stop volume1
  3. Stopping volume will make its data inaccessible. Do you want to continue? (y/n) y
  4. volume stop: volume1: success
  5. [root@oe01 brick]# gluster volume stop volume2
  6. Stopping volume will make its data inaccessible. Do you want to continue? (y/n) y
  7. volume stop: volume2: success

然后删除卷

  1. [root@oe01 brick]# gluster volume delete volume1
  2. Deleting volume will erase all information about the volume. Do you want to continue? (y/n) y
  3. volume delete: volume1: success
  4. [root@oe01 brick]# gluster volume delete volume2
  5. Deleting volume will erase all information about the volume. Do you want to continue? (y/n) y
  6. volume delete: volume2: success

然后将每个目录下的brick也删除,如果不删除的话在创建卷的时候会报错

  1. [root@oe01 data]# rm -rf /data/sd{b..d}1/brick
  2. [root@oe02 data]# rm -rf /data/sd{b..d}1/brick
  3. [root@oe03 data]# rm -rf /data/sd{b..d}1/brick
2. 创建分布式副本卷
  1. [root@oe01 data]# gluster volume create volume3 replica 3 node1:/data/sdb1/brick node2:/data/sdb1/brick node3:/data/sdb1/brick node1:/data/sdc1/brick node2:/data/sdc1/brick node3:/data/sdc1/brick
  2. volume create: volume3: success: please start the volume to access data
3. 启动卷并挂载卷
  1. [root@oe01 data]# gluster volume start volume3
  2. volume start: volume3: success
  3. [root@oe03 ~]# cd /gluster/
  4. [root@oe03 gluster]# mkdir volume3
  5. [root@oe03 gluster]# mount -t glusterfs node3:/volume3 /gluster/volume3/
4. 观察卷的存储方式
  1. [root@oe03 gluster]# cd volume3/
  2. [root@oe03 volume3]# cp /etc/chrony.conf .
  3. [root@oe03 volume3]# ls
  4. chrony.conf
  5. [root@oe01 brick]# ls -R /data/ |grep chrony.conf -B 1
  6. /data/sdb1/brick:
  7. chrony.conf
  8. [root@oe02 ~]# ls -R /data/ |grep chrony.conf -B 1
  9. /data/sdb1/brick:
  10. chrony.conf
  11. [root@oe03 volume3]# ls -R /data/ |grep chrony.conf -B 1
  12. /data/sdb1/brick:
  13. chrony.conf
  • 这个数据会被写入到同一个组,这里的组跟我们的定义顺序就有关系了,我们指定的是node1 /data/sdb1/brick,然后是node2,然后是node3,副本数是3,这样他们3个就是一个组,另外3个就是另一个组了,当我们的node1挂掉之后,数据还会在node2和node3上,这也就是为什么顺序这么关键的原因

  • 如果我们指定的顺序是node1 /data/sdb1/brick, node1 /data/sdc1/brick node1 /data/sdd1/brick,那么某个文件的副本会全部写到node1节点上,如果node1挂掉了,那么数据也就不存在了

5. 分布式条带卷(Distributed Striped Volume)

作用:

结合分布式卷和条带卷的优点,将文件分块,并将块分布在不同的服务器组中,以提高性能和扩展性。

例子:

像是一本大字典,每一页都分给不同的区域,每个区域再分给不同的书架。这样既能加快查找速度,又能扩展存储容量。

配置示例:

6. 异或卷(Dispersed Volume)

作用:

使用纠删码(Erasure Coding)来提供数据冗余,能够在较少的存储开销下提供数据容错性。适合存储大规模数据且需要高效利用存储空间的场景。

例子:

像是一个图书馆,书被分成了很多部分,放在不同的书架上,即使少数几个书架坏了,其他书架上的部分也可以组合起来恢复整个书。

配置示例:

总结

不同类型的卷适用于不同的应用场景,选择合适的卷类型可以根据数据的重要性、性能需求和存储效率来决定。希望这些例子和配置示例能帮助你更好地理解 GlusterFS 卷的类型和作用。

原文链接:https://www.cnblogs.com/fsdstudy/p/18297604

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号