GlusterFs分布式文件系统

目录

  • [GlusterFS 笔记](#GlusterFS 笔记)
    • [一、安装和配置 GlusterFS](#一、安装和配置 GlusterFS)
      • [1. 安装 GlusterFS](#1. 安装 GlusterFS)
      • [2. 配置 GlusterFS](#2. 配置 GlusterFS)
      • [3. 格式化卷](#3. 格式化卷)
      • [4. 创建挂载点并挂载](#4. 创建挂载点并挂载)
    • [二、GlusterFS 卷的类型](#二、GlusterFS 卷的类型)
      • [1. 分布式卷(Distributed Volume)](#1. 分布式卷(Distributed Volume))
        • 作用:
        • 例子:
        • 配置示例:
          • [1. 创建卷](#1. 创建卷)
          • [2. 启动卷](#2. 启动卷)
          • [3. 客户端挂载](#3. 客户端挂载)
          • [4. 观察卷的存储方式](#4. 观察卷的存储方式)
      • [2. 复制卷(Replicated Volume)](#2. 复制卷(Replicated Volume))
        • 作用:
        • 例子:
        • 配置示例:
          • [1. 创建卷](#1. 创建卷)
          • [2. 启动卷并挂载](#2. 启动卷并挂载)
          • [3. 观察卷的存储方式](#3. 观察卷的存储方式)
      • [3. 条带卷(Striped Volume)](#3. 条带卷(Striped Volume))
      • [4. 分布式复制卷(Distributed Replicated Volume)](#4. 分布式复制卷(Distributed Replicated Volume))
        • 作用:
        • 例子:
        • 配置示例:
          • [1. 清初卷](#1. 清初卷)
          • [2. 创建分布式副本卷](#2. 创建分布式副本卷)
          • [3. 启动卷并挂载卷](#3. 启动卷并挂载卷)
          • [4. 观察卷的存储方式](#4. 观察卷的存储方式)
      • [5. 分布式条带卷(Distributed Striped Volume)](#5. 分布式条带卷(Distributed Striped Volume))
      • [6. 异或卷(Dispersed Volume)](#6. 异或卷(Dispersed Volume))
    • 总结

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:

bash 复制代码
yum install glusterfs-server

启动 GlusterFS 服务:

bash 复制代码
systemctl enable --now glusterd

2. 配置 GlusterFS

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

bash 复制代码
192.168.200.179 node1
192.168.200.180 node2
192.168.200.172 node3

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

bash 复制代码
gluster peer probe node2
gluster peer probe node3

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

3. 格式化卷

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

4. 创建挂载点并挂载

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

bash 复制代码
# 每个节点都是,我的每个节点的硬盘都是sdb1,sdc1,sdd1
[root@oe01 ~]# mkdir -p /data/sd{c..d}1
[root@oe01 ~]# mount /dev/sdb1 /data/sdb1
[root@oe01 ~]# mount /dev/sdc1 /data/sdc1
[root@oe01 ~]# mount /dev/sdd1 /data/sdd1

二、GlusterFS 卷的类型

1. 分布式卷(Distributed Volume)

作用:

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

例子:

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

配置示例:

1. 创建卷
bash 复制代码
[root@oe01 sdc1]# gluster volume create volume1 node1:/data/sdc1/brick node2:/data/sdc1/brick
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. 启动卷

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

bash 复制代码
[root@oe01 sdc1]# gluster volume start volume1 
volume start: volume1: success

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

3. 客户端挂载

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

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

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

4. 观察卷的存储方式

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

bash 复制代码
[root@oe03 ~]# cd /mnt/
[root@oe03 mnt]# cp /etc/hosts .
[root@oe03 mnt]# ls
hosts

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

bash 复制代码
[root@oe01 ~]# ls /data/sdc1/brick/
hosts
[root@oe02 ~]# ls /data/sdc1/brick/

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

2. 复制卷(Replicated Volume)

作用:

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

例子:

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

配置示例:

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

参数解释:

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

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

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

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

3. 条带卷(Striped Volume)

作用:

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

例子:

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

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

作用:

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

例子:

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

配置示例:

1. 清初卷

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

先停止卷

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

然后删除卷

bash 复制代码
[root@oe01 brick]# gluster volume delete volume1 
Deleting volume will erase all information about the volume. Do you want to continue? (y/n) y
volume delete: volume1: success
[root@oe01 brick]# gluster volume delete volume2
Deleting volume will erase all information about the volume. Do you want to continue? (y/n) y
volume delete: volume2: success

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

bash 复制代码
[root@oe01 data]# rm -rf /data/sd{b..d}1/brick
[root@oe02 data]# rm -rf /data/sd{b..d}1/brick
[root@oe03 data]# rm -rf /data/sd{b..d}1/brick
2. 创建分布式副本卷
bash 复制代码
[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
volume create: volume3: success: please start the volume to access data
3. 启动卷并挂载卷
bash 复制代码
[root@oe01 data]# gluster volume start volume3 
volume start: volume3: success
[root@oe03 ~]# cd /gluster/
[root@oe03 gluster]# mkdir volume3
[root@oe03 gluster]# mount -t glusterfs node3:/volume3 /gluster/volume3/
4. 观察卷的存储方式
bash 复制代码
[root@oe03 gluster]# cd volume3/
[root@oe03 volume3]# cp /etc/chrony.conf .
[root@oe03 volume3]# ls
chrony.conf
[root@oe01 brick]# ls -R /data/ |grep chrony.conf -B 1
/data/sdb1/brick:
chrony.conf

[root@oe02 ~]# ls -R /data/ |grep chrony.conf -B 1
/data/sdb1/brick:
chrony.conf

[root@oe03 volume3]# ls -R /data/ |grep chrony.conf -B 1
/data/sdb1/brick:
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 卷的类型和作用。