文章目录
GlusterFS分布式系统文件
GlusterFS特点
- 扩展性和高性能:采用Scale-Out架构,通过增加存储节点来提高存储容量和性能。同时,弹性哈希算法解决了对元数据服务器的依赖,实现了并行化数据访问。
- 高可用性:支持文件自动复制,如镜像或多次复制,以确保数据总是可访问。此外,具备自我修复功能,能将数据恢复到正确状态。
- 全局统一命名空间:整合所有节点的命名空间为统一命名空间,形成一个大的虚拟存储池供前端主机访问。
- 弹性卷管理:支持在线增加和移除逻辑卷,逻辑卷可在线增长和缩减,适应工作负载变化。
- 基于标准协议:支持NFS、CIFS、HTTP等标准协议,完全兼容POSIX标准,现有应用程序无需修改即可访问。
- 模块化堆栈式架构:通过模块的组合实现复杂功能,如Replicate模块实现RAID1,Stripe模块实现RAID0等。
- 卷类型丰富:支持分布式卷、条带卷、复制卷等七种卷,可以根据需求选择合适的卷类型。
- 无元数据服务器:通过弹性哈希算法实现元数据的管理,避免了单点故障问题。
GlusterFS基本术语
**存储块(brick)😗*存储用户数据的服务器节点
**逻辑卷:**类似与lvm逻辑卷
**FUSE:**虚拟端口,一个伪文件系统,类似与etx4
**VFS:**内核空间的接口
GlusterFS工作原理
GlusterFS的工作原理是通过VFS接收程序应用的请求,然后传递给FUSE,FUSE再转发给GlusterFS客户端。GlusterFS客户端根据卷配置将请求转换为对后端GlusterFS服务器的请求,GlusterFS服务器处理请求并返回结果给GlusterFS客户端,GlusterFS客户端将结果聚合后返回给FUSE,FUSE再返回给VFS,最后VFS将结果返回给程序应用。这个流程实现了用户空间的客户端和服务器之间的分布式存储,同时保持了与内核空间VFS的兼容性。
无元数据存储服务器
GluterFS是一种无元数据的分布式存储服务器,实现无元数据的方式是GluterFS使用了弹性HASH算法,客户端请求访问文件时,GlusterFS 会使用文件名和其他信息通过哈希算法计算出一个哈希值,然后根据这个哈希值决定文件应该存储在哪个 brick 上。这种设计允许 GlusterFS 在不依赖中心化的元数据服务器的情况下,实现数据的分布式存储和访问。
GlusterFS的卷类型
GlusterFS类型包括了分布式卷、条带卷、复制卷、分布式条带卷、分布式复制卷、条带式复制卷、分布式条带复制卷。
分布式卷:分布式卷,通过HASH刷法分布到所有的存储块服务器上,分布式卷是GlusterFS的默认卷,它有成本底的优点,但是没有容错能力,当集群中损毁一个brick服务器就会导致部分数据丢失。在该模式下文件直接存储在某个brick服务器上,由于直接使用本地文件系统进行文件存储,所以存取效率并没有提高,反而会因为网络通信的原因而有所降低
条带卷:条带卷是一种卷配置,它通过在多个 bricks 之间分配文件的块来提高性能。条带化可以在多个 bricks 上并行写入和读取数据,从而增加了吞吐量,尤其是在处理大型文件时。条带卷不具备冗余性,只能提高性能,当任何一个 brick 失效,整个卷的数据可能会受到影响
复制卷:复制卷是一种提供数据冗余的卷配置。在复制卷中,每个文件都会在多个 bricks 上保存副本,这样即使某个 brick 失效,数据仍然可以从其他 brick 上获取。复制卷通过数据复制来提高数据的可用性和可靠性。
分布式条带卷: 它结合了分布式卷和条带卷的特点。这种卷类型通过在多个服务器上的多个 bricks 之间分布数据和条带化数据来提供高性能和可伸缩的存储解决方案。
分布式复制卷: 它结合了分布式卷和复制卷的特点。这种卷类型通过在多个服务器上的多个 bricks 之间分布数据和复制数据来提供高可用性和可伸缩的存储解决方案。
条带式复制卷: 它结合了条带卷和复制卷的特点。这种卷类型通过在多个服务器上的多个 bricks 之间分布数据和复制数据来提供高性能和高可用性的存储解决方案。
分布式条带复制卷: 三者结合
GlusterFS的部署
GlusterFS服务器
192.168.20.10
192.168.20.20
192.168.20.30
192.168.20.40
客户端
192.168.20.50
1.给GlusterFS服务端服务器添加硬盘,我一个服务器添加了4块硬盘,每块硬盘大小为8G
2.给硬盘分区
fdisk /dev/sdb
n
p
w
mkfs.xfs
mkdir -p /mount/{sdb,sdc,sdd,sde}
mount -a
将四块硬盘全部分区
永久挂载
3设置yum 安装本地源
将gfsrepo 软件上传到/opt目录下
cd /etc/yum.repos.d/
mkdir repo.bak
mv *.repo repo.bak
vim glfs.repo
编辑创建yum源文件
[glfs]
name=glfs
baseurl=file:///opt/gfsrepo
gpgcheck=0
enabled=1
yum clean all && yum makecache
用yum安装GlusterFS
yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma
GlusterFS 卷的创建
只需要在192.168.20.10机器上操作
将所有服务器添加到存储信任池中
gluster peer probe 192.168.20.20
gluster peer probe 192.168.20.30
gluster peer probe 192.168.20.40
查看每个节点的状态
gluster peer status
创建分布式卷: 创建分布式卷
gluster volume create dis-volume 192.168.20.10:/mount/sdb 192.168.20.20:/mount/sdb force
启动分布式卷和查看分布式卷信息
gluster volume start dis-volume
gluster volume info dis-volume
测试
在客户端上挂载
mount.glusterfs 192.168.20.10:dis-volume /test/dis
创建测试文件
cd /opt
dd if=/dev/zero of=/opt/demo1.log bs=1M count=40
dd if=/dev/zero of=/opt/demo2.log bs=1M count=40
dd if=/dev/zero of=/opt/demo3.log bs=1M count=40
dd if=/dev/zero of=/opt/demo4.log bs=1M count=40
dd if=/dev/zero of=/opt/demo5.log bs=1M count=40
测试
cp /opt/demo* /test/dis
192.168.20.10里有demo1.log,demo2.log,demo3.log,demo4.log
192.168.20.20里有demo5.log
创建创建条带卷
gluster volume create stripe-volume stripe 2 node1:/data/sdc1 node2:/data/sdc1 force
gluster volume create
:这个命令用于创建一个新的 GlusterFS 卷。stripe-volume
:这是新卷的名称。stripe 2
:这告诉 GlusterFS 创建一个分布式条带卷,其中每个文件将被分成 2 个块,这些块将分布在所有指定的 bricks 上。192.168.20.10:/mount/sdc
和192.168.20.20:/mount/sdc
:这些是组成新卷的 bricks,每个 brick 都包含一个服务器地址(192.168.20.10
和192.168.20.20
)和一个存储路径(/mount/sdc
)。force
:这个选项用于强制创建卷,即使某些检查没有通过也会继续执行。
这个命令的作用是在两个服务器上创建一个分布式条带卷,每个文件将被分成两个块,并分布在两个服务器上的两个路径上。这种设计可以提供更高的性能和冗余性,因为数据可以在多个服务器上并行传输和冗余存储。
gluster volume start stripe-volume
gluster volume info stripe-volume
测试
在客户端上挂载
mount -t glusterfs 192.168.20.10:stripe-volume /test/stripe/
cp /opt/demo* /test/stripe/
可以看到测试文件,两个服务器都有,而且大小是原来的一半
创建复制
gluster volume create rep-volume replica 2 192.168.20.30:/mount/sdb 192.168.20.40:/mount/sdb force
gluster volume create
:这个命令用于创建一个新的 GlusterFS 卷。rep-volume
:这是新卷的名称。replica 2
:这告诉 GlusterFS 创建一个复制卷,其中每个文件将被复制到两个服务器上的两个路径上。192.168.20.30:/mount/sdb
和192.168.20.40:/mount/sdb
:这些是组成新卷的 bricks,每个 brick 都包含一个服务器地址和一个存储路径。force
:这个选项用于强制创建卷,即使某些检查没有通过也会继续执行。
gluster volume start rep-volume
gluster volume info rep-volume
测试
mount -t glusterfs 192.168.20.10:rep-volume /test/rep
cp /opt/demo* /test/rep/
创建分布式条带卷
gluster volume create dis-stripe stripe 2 192.168.20.10:/mount/sdd 192.168.20.10:/mount/sdd 192.168.20.30:/mount/sdd 192.168.20.40:/mount/sdd force
这个命令是用来在 GlusterFS 中创建一个名为 dis-stripe
的分布式条带卷。命令的各个部分如下:
gluster volume create
:这个命令用于创建一个新的 GlusterFS 卷。dis-stripe
:这是新卷的名称。stripe 2
:这告诉 GlusterFS 创建一个分布式条带卷,其中每个文件将被分成 2 个块,这些块将分布在所有指定的 bricks 上。192.168.20.10:/mount/sdd
、192.168.20.20:/mount/sdd
、192.168.20.30:/mount/sdd
和192.168.20.40:/mount/sdd
:这些是组成新卷的 bricks,每个 brick 都包含一个服务器地址和一个存储路径。force
:这个选项用于强制创建卷,即使某些检查没有通过也会继续执行。
gluster volume start dis-stripe
gluster volume info dis-stripe
测试
mount.glusterfs 192.168.20.10:dis-stripe /test/dis_stripe
cp /opt/demo* /test/dis_stripe/
10;20有1234的数据20;30有5的数据
创建分布式复制卷
gluster volume create dis-rep replica 2 192.168.20.10:/mount/sde 192.168.20.10:/mount/sde 192.168.20.10:/mount/sde 192.168.20.10:/mount/sde
gluster volume create
:这个命令用于创建一个新的 GlusterFS 卷。dis-rep
:这是新卷的名称。replica 2
:这告诉 GlusterFS 创建一个复制卷,其中每个文件将被复制到两个服务器上的两个路径上。192.168.20.10:/mount/sde
、192.168.20.20:/mount/sde
、192.168.20.30:/mount/sde
和192.168.20.40:/mount/sde
:这些是组成新卷的 bricks,每个 brick 都包含一个服务器地址和一个存储路径。force
:这个选项用于强制创建卷,即使某些检查没有通过也会继续执行。
gluster volume start dis-rep
gluster volume info dis-rep
测试