GlusterFS企业分布式存储

GlusterFS

    • 分布式文件系统
    • 代表-nfs
    • 常见分布式存储
    • Gluster存储基础梳理
      • GlusterFS 适合大文件还是小文件存储?
    • 应用场景
    • 术语
      • Trusted Storage Pool
      • Brick
      • Volumes
    • Glusterfs整体工作流程-数据访问流程
      • GlusterFS客户端访问流程
    • GlusterFS常用命令
    • 部署 GlusterFS 群集
      • 准备环境(所有node节点上操作)
      • 关闭防火墙
      • 磁盘分区,并挂载
      • 修改主机名,配置/etc/hosts文件
      • 安装、启动GlusterFS(所有node节点上操作)
      • 添加节点到存储信任池中(在 node1 节点上操作)
      • 创建卷
      • 创建分布式卷(dis-volume)
      • 创建条带卷(stripe-volume)
      • 创建复制卷(rep-volume)
      • 创建分布式条带卷(dis-stripe)
      • 创建分布式复制卷(dis-rep)
    • 部署 Gluster 客户端
      • 安装客户端软件
      • 创建挂载目录
      • 配置 /etc/hosts 文件
      • 挂载 Gluster 文件系统
    • 对五种卷进行文件测试
      • 卷中写入文件,客户端操作
      • 服务端查看文件分布
      • 破坏性测试
    • 对分布式卷进行扩容缩容实验
      • 扩容
      • 缩容
    • yum安装glusterfs对三种基本卷进行测试
      • 创建分布式卷(dis-volume)
      • 创建条带卷(stripe-volume)
      • 创建复制卷(rep-volume)

分布式文件系统

​ 分布式文件系统(Distributed File System)是指文件系统管理的物理存储资源并不直接与本地节点相连,而是分布于计算网络中的一个或者多个节点的计算机上。目前意义上的分布式文件系统大多都是由多个节点计算机构成,结构上是典型的客户机/服务器模式。流行的模式是当客户机需要存储数据时,服务器指引其将数据分散的存储到多个存储节点上,以提供更快的速度,更大的容量及更好的冗余特性;

产生
​ 计算机通过文件系统管理、存储数据,而现在数据信息爆炸的时代中人们可以获取的数据成指数倍的增长,单纯通过增加硬盘个数来扩展计算机文件系统的存储容量的方式,已经不能满足目前的需求。
分布式文件系统可以有效解决数据的存储和管理难题,将固定于某个地点的某个文件系统,扩展到任意多个地点/多个文件系统,众多的节点组成一个文件系统网络。每个节点可以分布在不同的地点,通过网络进行节点间的通信和数据传输。人们在使用分布式文件系统时,无需关心数据是存储在哪个节点上、或者是从哪个节点从获取的,只需要像使用本地文件系统一样管理和存储文件系统中的数据;

代表-nfs

​ NFS(Network File System)即网络文件系统,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样;

优点
​ 1)节约使用的磁盘空间客户端经常使用的数据可以集中存放在一台机器上,并使用NFS发布,那么网络内部所有计算机可以通过网络访问,不必单独存储;

​ 2)节约硬件资源NFS还可以共享软驱,CDROM和ZIP等的存储设备,减少整个网络上的可移动设备的数量;

​ 3)用户主目录设定对于特殊用户,如管理员等,为了管理的需要,可能会经常登录到网络中所有的计算机,若每个客户端,均保存这个用户的主目录很繁琐,而且不能保证数据的一致性.实际上,经过NFS服务的设定,然后在客户端指定这个用户的主目录位置,并自动挂载,就可以在任何计算机上使用用户主目录的文件;

缺点
​ 1) 存储空间不足,需要更大容量的存储;
​ 2) 直接用NFS挂载存储,有一定风险,存在单点故障;
​ 3) 某些场景不能满足要求,大量的访问磁盘IO是瓶颈;
​ 4) 扩容,缩容影响服务器较多;
​ 5) 目录层级不要太深,合理组织目录,数量不要太多,增大glusterfs目录缓存,另外还可以设计把元数据和数据分离,将元数据放到内存数据库,并在ssd持久保存;
​ 6) 小文件性能较差,它主要为大文件设计,对小文件优化很少, 虽然在客户端采用了元数据缓存md-cache提高小文件性能,但是md-cache大小有限,海量小文件缓存命中率会严重下降,优化效果会减小,需要增大元数据缓存或者将小文件合并为一个大文件,成为block

常见分布式存储

FastDFS:
一个开源的轻量级分布式文件系统,是纯C语言开发的。它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。FastDFS 针对大量小文件存储有优势。

GlusterFS:
主要应用在集群系统中,具有很好的可扩展性。软件的结构设计良好,易于扩展和配置,通过各个模块的灵活搭配以得到针对性的解决方案。GlusterFS适合大文件,小文件性能相对较差。

MooseFS:
比较接近GoogleFS的c++实现,通过fuse支持了标准的posix,支持FUSE,相对比较轻量级,对master服务器有单点依赖,用perl编写,算是通用的文件系统,可惜社区不是太活跃,性能相对其他几个来说较差,国内用的人比较多。

Ceph:
C++编写,性能很高,支持Fuse,并且没有单点故障依赖;Ceph 是一种全新的存储方法,对应于 Swift 对象存储。在对象存储中,应用程序不会写入文件系统,而是使用存储中的直接 API 访问写入存储。因此,应用程序能够绕过操作系统的功能和限制。在openstack社区比较火,做虚机块存储用的很多!

​ GoogleFS:性能十分好,可扩展性强,可靠性强。用于大型的、分布式的、对大数据进行访问的应用。运用在廉价的硬件上。

Gluster存储基础梳理

​ GlusterFS系统是一个可扩展的网络文件系统,相比其他分布式文件系统,GlusterFS具有高扩展性、高可用性、高性能、可横向扩展等特点,并且其没有元数据服务器的设计,让整个服务没有单点故障的隐患。Glusterfs是一个横向扩展的分布式文件系统,就是把多台异构的存储服务器的存储空间整合起来给用户提供统一的命名空间。用户访问存储资源的方式有很多,可以通过NFS,SMB,HTTP协议等访问,还可以通过gluster本身提供的客户端访问。

​ GlusterFS是Scale-Out存储解决方案Gluster的核心,它是一个开源的分布式文件系统,具有强大的横向扩展能力,通过扩展能够支持数PB存储容量和处理数千客户端。GlusterFS借助TCP/IP或InfiniBand RDMA网络将物理分布的存储资源聚集在一起,使用单一全局命名空间来管理数据。GlusterFS基于可堆叠的用户空间设计,可为各种不同的数据负载提供优异的性能;

GlusterFS 适合大文件还是小文件存储?

弹性哈希算法和Stripe 数据分布策略,移除了元数据依赖,优化了数据分布,提高数据访问并行性,能够大幅提高大文件存储的性能。对于小文件,无元数据服务设计解决了元数据的问题。但GlusterFS 并没有在I/O 方面作优化,在存储服务器底层文件系统上仍然是大量小文件,本地文件系统元数据访问是一个瓶颈,数据分布和并行性也无法充分发挥作用。
​ 因此,GlusterFS 适合存储大文件,小文件性能较差,还存在很大优化空间。

应用场景

​ GlusterFS 在企业中应用场景理论和实践上分析,GlusterFS目前主要适用大文件存储场景,对于小文件尤其是海量小文件,存储效率和访问性能都表现不佳。海量小文件LOSF问题是工业界和学术界公认的难题,GlusterFS作为通用的分布式文件系统,并没有对小文件作额外的优化措施,性能不好也是可以理解的;

  • Media: 文档、图片、音频、视频
  • Shared storage: 云存储、虚拟化存储、HPC(高性能计算)
  • Big data: 日志文件、RFID(射频识别)数据

术语

Brick: GlusterFS中的存储单元,通过是一个受信存储池中的服务器的一个导出目录。可以通过主机名和目录名来标识,如’SERVER:EXPORT’。Client:挂载了GlusterFS卷的设备;
GFID: GlusterFS卷中的每个文件或目录都有一个唯一的128位的数据相关联,其用于模拟inode;
Namespace: 每个Gluster卷都导出单个ns作为POSIX的挂载点; Node: 一个拥有若干brick的设备;
RDMA: 远程直接内存访问,支持不通过双方的OS进行直接内存访问; RRDNS: round robin
DNS是一种通过DNS轮转返回不同的设备以进行负载均衡的方法;
Self-heal: 用于后台运行检测复本卷中文件和目录的不一致性并解决这些不一致; Split-brain: 脑裂
Volfile: Glusterfs进程的配置文件,通常位于/var/lib/glusterd/vols/volname;
Volume: 一组bricks的逻辑集合;

Trusted Storage Pool

• 一堆存储节点的集合
• 通过一个节点“邀请”其他节点创建,这里叫probe
• 成员可以动态加入,动态删除
添加命令如下:

gluster peer probe node2

删除命令如下:

gluster peer detach node3

Brick

Brick是一个节点和一个导出目录的集合,e.g. node1:/brick1
• Brick是底层的RAID或磁盘经XFS或ext4文件系统格式化而来,所以继承了文件系统的限制
• 每个节点上的brick数是不限的
• 理想的状况是,一个集群的所有Brick大小都一样。

Volumes

Volume是brick的逻辑组合
• 创建时命名来识别
• Volume是一个可挂载的目录
• 每个节点上的brick数是不变的,e.g.mount –t glusterfs www.std.com:test /mnt/gls
• 一个节点上的不同brick可以属于不同的卷
• 支持如下种类:
a) 分布式卷
b) 条带卷
c) 复制卷
d) 分布式复制卷
e) 条带复制卷
f) 分布式条带复制卷

1)分布式卷• 文件分布存在不同的brick里
• 目录在每个brick里都可见
• 单个brick失效会带来数据丢失
• 无需额外元数据服务器

2)复制卷
• 同步复制所有的目录和文件
• 节点故障时保持数据高可用
• 事务性操作,保持一致性
• 有changelog
• 副本数任意定

3)分布式复制卷
• 最常见的一种模式
• 读操作可以做到负载均衡

4)条带卷
• 文件切分成一个个的chunk,存放于不同的brick上
• 只建议在非常大的文件时使用(比硬盘大小还大)
• Brick故障会导致数据丢失,建议和复制卷同时使用
• 区块(chunks)是带有空洞的文件——这有助于保持偏移量的一致性

Glusterfs整体工作流程-数据访问流程

在这里插入图片描述
a)首先是在客户端, 用户通过glusterfs的mount point 来读写数据, 对于用户来说,集群系统的存在对用户是完全透明的,用户感觉不到是操作本地系统还是远端的集群系统。
b)用户的这个操作被递交给 本地linux系统的VFS来处理。
c)VFS 将数据递交给FUSE 内核文件系统:在启动 glusterfs 客户端以前,需要想系统注册一个实际的文件系统FUSE,如上图所示,该文件系统与ext3在同一个层次上面, ext3 是对实际的磁盘进行处理, 而fuse 文件系统则是将数据通过/dev/fuse 这个设备文件递交给了glusterfs client端。所以, 我们可以将 fuse文件系统理解为一个代理。

d)数据被fuse 递交给Glusterfs client 后, client 对数据进行一些指定的处理(所谓的指定,是按照client 配置文件据来进行的一系列处理, 我们在启动glusterfs client 时需要指定这个文件。

e)在glusterfs client的处理末端,通过网络将数据递交给 Glusterfs Server,并且将数据写入到服务器所控制的存储设备上。
这样, 整个数据流的处理就完成了。

GlusterFS客户端访问流程

在这里插入图片描述
当客户端访问GlusterFS存储时,首先程序通过访问挂载点的形式读写数据,对于用户和程序而言,集群文件系统是透明的,用户和程序根本感觉不到文件系统是本地还是在远程服务器上。读写操作将会被交给VFS(Virtual File System)来处理,VFS会将请求交给FUSE内核模块,而FUSE又会通过设备/dev/fuse将数据交给GlusterFS Client。最后经过GlusterFS Client的计算,并最终经过网络将请求或数据发送到GlusterFS Server上;

GlusterFS常用命令

# 1 启停和开机启动
systemctl start  glusterd.service
systemctl enable glusterd.service
systemctl status glusterd.service#2 为存储池添加/移除服务器节点
gluster peer probe <SERVER>
gluster peer detach <SERVER>
#注意,移除节点时,需要提前将该节点上的Brick移除。# 3查看所有节点的基本状态(不包括本节点):
gluster peer status# 4 挂载glusterfs
mount -t glusterfs <SERVER>:/<VOLNAME><MOUNTDIR>#5 创建/启动/停止/删除卷
gluster volume create <NEW-VOLNAME>[stripe <COUNT> \| replica <COUNT>] \[transport [tcp | rdma | tcp,rdma]] \<NEW-BRICK1> <NEW-BRICK2> \<NEW-BRICK3> <NEW-BRICK4>...
#force 参数可能用于强制执行一些可能有风险的操作,比如删除卷、移除存储节点等。使用 force 参数可能会绕过一些安全检查或确认步骤,因此需要谨慎使用,以避免意外造成数据丢失或系统不稳定。
gluster volume start <VOLNAME>
gluster volume stop <VOLNAME>
gluster volume delete <VOLNAME>
#注意,删除卷的前提是先停止卷。# 6 查看卷信息
gluster volume list    #列出集群中的所有卷:
gluster volume info [all]    #查看集群中的卷信息:
gluster volume status [all]    #查看集群中的卷状态:
gluster volume status <VOLNAME> [detail| clients | mem | inode | fd] # 7 配置卷
gluster volume set <VOLNAME> <OPTION> <PARAMETER># 8  扩展卷
gluster volume add-brick <VOLNAME> <NEW-BRICK>
#如果是复制卷,则每次添加的Brick数必须是replica的整数倍。# 9 收缩卷
## 9.1 先将数据迁移到其它可用的Brick,迁移结束后才将该Brick移除:
gluster volume remove-brick <VOLNAME> <BRICK> start
#在执行了start之后,可以使用status命令查看移除进度:
gluster volume remove-brick <VOLNAME> <BRICK> status## 9.2不进行数据迁移,直接删除该Brick:
gluster volume remove-brick <VOLNAME> <BRICK> commit
#注意,如果是复制卷或者条带卷,则每次移除的Brick数必须是replica或者stripe的整数倍。
# 关于收缩卷,线上几乎不会收缩,基本上都是扩容,而且裁剪只能收缩没有数据的,否则可能数据丢失。所以,有些卷是不支持收缩的。# 10 迁移卷
#使用start命令开始进行迁移
#迁移过程中,可以使用pause命令暂停迁移:
#			可以使用abort命令终止迁移:
#			可以使用status命令查看迁移进度:
#在数据迁移结束后,执行commit命令来进行Brick替换:
gluster volume replace-brick <VOLNAME> <BRICK> <NEW-BRICK> start
gluster volume replace-brick <VOLNAME> <BRICK> <NEW-BRICK> pause
gluster volume replace-brick <VOLNAME> <BRICK> <NEW-BRICK> abort
gluster volume replace-brick <VOLNAME> <BRICK> <NEW-BRICK> status
gluster volume replace-brick <VOLNAME> <BRICK> <NEW-BRICK> commit# 11 重新均衡卷
#不迁移数据:
gluster volume rebalance <VOLNAME> lay-outstart
gluster volume rebalance <VOLNAME> start
gluster volume rebalance <VOLNAME> startforce
gluster volume rebalance <VOLNAME> status
gluster volume rebalance <VOLNAME> stop# 12 磁盘配额
#开启/关闭系统配额:
gluster volume quota <VOLNAME> enable | disable
#设置目录配额:
gluster volume quota <VOLNAME> limit-usage <DIR> <VALUE>
#查看配额:
gluster volume quota <VOLNAME> list [<DIR>]# 13 地域复制(geo-replication):
gluster volume geo-replication <MASTER> <SLAVE> start | status | stop# 14 IO信息查看:
gluster volume profile <VOLNAME> start | info | stop# 15 Top监控:
#Top命令允许你查看Brick的性能,例如:read,write, file open calls, file read calls, file write calls, directory opencalls, and directory real calls。所有的查看都可以设置top数,默认100。gluster volume top <VOLNAME> open[brick <BRICK>] [list-cnt <COUNT>]
#其中,open可以替换为read, write, opendir, readdir等。gluster volume top <VOLNAME> read-perf [bs <BLOCK-SIZE> count <COUNT>] [brick <BRICK>] [list-cnt <COUNT>]
#其中,read-perf可以替换为write-perf等。

部署 GlusterFS 群集

服务器磁盘挂载点系统
Node1节点:192.168.99.118/dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1/data/sdb1 /data/sdc1 /data/sdd1 /data/sde1centos7.4
Node2节点:192.168.99.119/dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1/data/sdb1 /data/sdc1 /data/sdd1 /data/sde1centos7.4
Node3节点:192.168.99.121/dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1/data/sdb1 /data/sdc1 /data/sdd1 /data/sde1centos7.4
Node4节点:192.168.99.177/dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1/data/sdb1 /data/sdc1 /data/sdd1 /data/sde1centos7.4
客户端节点:192.168.99.179centos7.4

准备环境(所有node节点上操作)

四台机器分别添加四块硬盘,系统为centos7.4,7.9会有glibc依赖库问题。

关闭防火墙

systemctl stop firewalld
setenforce 0

磁盘分区,并挂载

#编写脚本
vim /opt/fdisk.sh
#!/bin/bash
NEWDEV=`ls /dev/sd* | grep -o 'sd[b-z]' | uniq`
for VAR in $NEWDEV
doecho -e "n\np\n\n\n\nw\n" | fdisk /dev/$VAR &> /dev/nullmkfs.xfs /dev/${VAR}"1" &> /dev/nullmkdir -p /data/${VAR}"1" &> /dev/nullecho "/dev/${VAR}"1" /data/${VAR}"1" xfs defaults 0 0" >> /etc/fstab
done
mount -a &> /dev/null
#给权限
chmod +x /opt/fdisk.sh
cd /opt/
#执行脚本
./fdisk.sh
# 查看挂载情况
df -h

在这里插入图片描述

修改主机名,配置/etc/hosts文件

hostnamectl set-hostname node1echo "192.168.99.118 node1" >> /etc/hosts
echo "192.168.99.119 node2" >> /etc/hosts
echo "192.168.99.121 node3" >> /etc/hosts
echo "192.168.99.177 node4" >> /etc/hosts

安装、启动GlusterFS(所有node节点上操作)

  1. glusterfs:这是 GlusterFS 的客户端软件包。它允许将远程 GlusterFS 卷挂载到本地文件系统上,以便应用程序可以像访问本地文件一样访问远程文件系统中的数据。它实现了 FUSE(Filesystem in Userspace)技术,以在用户态管理文件系统操作。
  2. glusterfs-server:这是 GlusterFS 的服务器软件包。它包含了 GlusterFS 存储服务器的核心组件,用于存储和管理数据。这些服务器一起组成一个分布式存储解决方案,可以将数据分布在多个节点上,提供高可用性和可扩展性。
  3. glusterfs-fuse:这是 GlusterFS FUSE 客户端的依赖软件包。当使用 glusterfs 客户端将 GlusterFS 卷挂载到本地文件系统上时,通常需要安装这个软件包来支持 FUSE 技术。
  4. glusterfs-rdma:这是可选的 GlusterFS 组件,用于启用 RDMA(Remote Direct Memory Access)支持,以提高数据传输的性能和效率。RDMA 是一种高性能的网络传输技术,适用于需要低延迟和高吞吐量的应用场景。这个软件包通常是可选的,根据特定需求决定是否安装。
#修改yum源之前先安装pciutils
yum -y install pciutils unzip
# 将gfsrepo.zip上传到/opt目录下解压缩
cd /opt
unzip gfsrepo.zip#将glfsrepo 软件上传到/opt目录下
cd /etc/yum.repos.d/
mkdir repo.bak
mv *.repo repo.bak
vim glfs.repo
[glfs]
name=glfs
baseurl=file:///opt/gfsrepo
gpgcheck=0
enabled=1yum clean all && yum makecacheyum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma
# 官方目前为9x版本,而6x之后已不再支持条带卷,
# 故本次试验使用3x版本,由于安装gluster-server时依赖的glibc包需要2.17-196版本,故使用centos7.4版本,且进入后不要yum update,否则会导致glibc版本更新
#如采用官方 YUM 源安装,可以直接指向互联网仓库
# 安装server
# yum install -y centos-release-gluster
# yum install -y glusterfs-serversystemctl start glusterd.service 
systemctl enable glusterd.service
systemctl status glusterd.service

在这里插入图片描述

添加节点到存储信任池中(在 node1 节点上操作)

#只要在一台Node节点上添加其它节点即可
# GlusterFS 将会尝试建立节点之间的对等关系,从而形成一个分布式存储集群,可以共享数据和提供冗余性。
gluster peer probe node1
gluster peer probe node2
gluster peer probe node3
gluster peer probe node4#在每个Node节点上查看群集状态
gluster peer status

在这里插入图片描述

创建卷

根据规划创建如下卷:

卷名类型brick
dis-volume分布式卷node1-4(/data/sdb1)
stripe-volume条带卷node1-2(/data/sdc1)
rep-volume复制卷node3-4(/data/sdc1)
dis-stripe分布式条带卷node1-4(/data/sdd1)
dis-rep分布式复制卷node1-4(/data/sde1)

创建分布式卷(dis-volume)

#创建分布式卷,没有指定类型,默认创建的是分布式卷
gluster volume create dis-volume \
node1:/data/sdb1 node2:/data/sdb1 node3:/data/sdb1 node4:/data/sdb1 force  
#在 GlusterFS 中,force选项用于强制操作,即使存在一些潜在的问题或警告。GlusterFS 在创建卷时会检查相关的条件和限制,如果发现问题或者不符合要求,就会拒绝创建卷并返回相应的错误信息。#查看卷列表
gluster volume list
#启动新建分布式卷
gluster volume start dis-volume
#查看创建分布式卷信息
gluster volume info dis-volume

在这里插入图片描述

创建条带卷(stripe-volume)

#指定类型为 stripe,数值为 2,且后面跟了 2 个 Brick Server,所以创建的是条带卷
gluster volume create stripe-volume stripe 2 node1:/data/sdc1 node2:/data/sdc1 force
gluster volume start stripe-volume
gluster volume info stripe-volume

在这里插入图片描述

创建复制卷(rep-volume)

#指定类型为 replica,数值为 2,且后面跟了 2 个 Brick Server,所以创建的是复制卷
gluster volume create rep-volume replica 2 node3:/data/sdc1 node4:/data/sdc1 force
gluster volume start rep-volume
gluster volume info rep-volume

在这里插入图片描述

创建分布式条带卷(dis-stripe)

#指定类型为 stripe,数值为 2,而且后面跟了 4 个 Brick Server,是 2 的两倍,所以创建的是分布式条带卷
gluster volume create dis-stripe stripe 2 node1:/data/sdd1 node2:/data/sdd1 node3:/data/sdd1 node4:/data/sdd1 forcegluster volume start dis-stripe
gluster volume info dis-stripe

在这里插入图片描述

创建分布式复制卷(dis-rep)

#指定类型为 replica,数值为 2,而且后面跟了 4 个 Brick Server,是 2 的两倍,所以创建的是分布式复制卷
gluster volume create dis-rep replica 2 node1:/data/sde1 node2:/data/sde1 node3:/data/sde1 node4:/data/sde1 force
gluster volume start dis-rep
gluster volume info dis-rep 
#查看当前所有卷的列表
gluster volume list

在这里插入图片描述

在这里插入图片描述

部署 Gluster 客户端

安装客户端软件

#将gfsrepo 软件上传到/opt目下 
cd /etc/yum.repos.d/
mkdir repo.bak
mv *.repo repo.bak
vim glfs.repo
[glfs]
name=glfs
baseurl=file:///opt/gfsrepo
gpgcheck=0
enabled=1
yum clean all && yum makecache
yum -y install glusterfs glusterfs-fuse

创建挂载目录

mkdir -p /test/{dis,stripe,rep,dis_stripe,dis_rep}
ls /test

在这里插入图片描述

配置 /etc/hosts 文件

在这里插入图片描述

挂载 Gluster 文件系统

#临时挂载
mount.glusterfs node1:dis-volume /test/dis
mount.glusterfs node1:stripe-volume /test/stripe
mount.glusterfs node1:rep-volume /test/rep
mount.glusterfs node1:dis-stripe /test/dis_stripe
mount.glusterfs node1:dis-rep /test/dis_rep
 df -Th

在这里插入图片描述

对五种卷进行文件测试

卷中写入文件,客户端操作

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
 ls -lh /opt

在这里插入图片描述

cp -i /opt/demo* /test/dis/
cp -i /opt/demo* /test/stripe/
cp -i /opt/demo* /test/rep/
cp -i /opt/demo* /test/dis_stripe/
cp -i /opt/demo* /test/dis_rep/

服务端查看文件分布

#查看分布式文件分布
#node1
ls -lh /data/sdb1
#node2
ll -h /data/sdb1
#node4
ll -h /data/sdb1

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#查看条带卷文件分布
#node1ls -lh /data/sdc1      #数据被分片50% 没副本 没冗余#node2ls -lh /data/sdc1

在这里插入图片描述
在这里插入图片描述

#查看复制卷分布
#node3ll -h /data/sdc1#数据没有被分片 有副本 有冗余 
#node4 
ll -h /data/sdc1        
#数据没有被分片 有副本 有冗余 

在这里插入图片描述
在这里插入图片描述

#查看分布式条带卷分布
#node1、2、3、4
ll -h /data/sdd1 

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#查看分布式复制卷分布        
#数据没有被分片 有副本 有冗余
ll -h /data/sde1

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

破坏性测试

#挂起 node2 节点或者关闭glusterd服务来模拟故障
#systemctl stop glusterd.service
#或者关闭虚拟机
shutdown -h now
#在客户端上查看文件是否正常
#分布式卷数据查看
ll /test/dis/ 

在这里插入图片描述

#条带卷
cd /test/stripe/  #无法访问,条带卷不具备冗余性

在这里插入图片描述

#分布式条带卷ll /test/dis_stripe/  #无法访问,分布条带卷不具备冗余性

在这里插入图片描述

#分布式复制卷
ll /test/dis_rep/    #可以访问,分布式复制卷具备冗余性

在这里插入图片描述

#挂起 node2 和 node4 节点,在客户端上查看文件是否正常
#测试复制卷是否正常
ls -l /test/rep/  #在客户机上测试正常 数据有

在这里插入图片描述

#测试分布式条卷是否正常ll /test/dis_stripe/  #在客户机上测试没有数据 

在这里插入图片描述

#测试分布式复制卷是否正常ll /test/dis_rep/  #在客户机上测试正常 有数据

在这里插入图片描述

对分布式卷进行扩容缩容实验

gluster volume info dis-volume

在这里插入图片描述
挂载新硬盘sdf1
在这里插入图片描述

扩容

#增加一个brickgluster volume add-brick dis-volume node3:/data/sdf1 forcegluster volume rebalance dis-volume start force

在这里插入图片描述
在这里插入图片描述

缩容

gluster volume rebalance dis-volume start force
gluster volume remove-brick dis-volume node3:/data/sdf1 force
y

在这里插入图片描述

yum安装glusterfs对三种基本卷进行测试

服务器磁盘挂载点系统
Node1节点:192.168.99.118/dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1/data/sdb1 /data/sdc1 /data/sdd1 /data/sde1centos7.4
Node2节点:192.168.99.119/dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1/data/sdb1 /data/sdc1 /data/sdd1 /data/sde1centos7.4
chmod +x /opt/fdisk.sh
cd /opt/
#执行脚本
./fdisk.sh
# 查看挂载情况
df -h

在这里插入图片描述

 yum install -y centos-release-glusteryum install -y glusterfs-server

在这里插入图片描述

gluster peer probe node1
gluster peer probe node2

根据规划创建如下卷:

卷名类型brick
dis-volume分布式卷node1-4(/data/sdb1)
stripe-volume条带卷node1-2(/data/sdc1)
rep-volume复制卷node3-4(/data/sdc1)

创建分布式卷(dis-volume)

#创建分布式卷,没有指定类型,默认创建的是分布式卷
gluster volume create dis-volume \
node1:/data/sdb1 node2:/data/sdb1 force
#在 GlusterFS 中,force选项用于强制操作,即使存在一些潜在的问题或警告。GlusterFS 在创建卷时会检查相关的条件和限制,如果发现问题或者不符合要求,就会拒绝创建卷并返回相应的错误信息。#查看卷列表
gluster volume list
#启动新建分布式卷
gluster volume start dis-volume
#查看创建分布式卷信息
gluster volume info dis-volume

)

创建条带卷(stripe-volume)

#指定类型为 stripe,数值为 2,且后面跟了 2 个 Brick Server,所以创建的是条带卷
gluster volume create stripe-volume stripe 2 node1:/data/sdc1 node2:/data/sdc1 force
gluster volume start stripe-volume
gluster volume info stripe-volume

在这里插入图片描述
失败

创建复制卷(rep-volume)

#指定类型为 replica,数值为 2,且后面跟了 2 个 Brick Server,所以创建的是复制卷
gluster volume create rep-volume replica 2 node1:/data/sdd1 node2:/data/sdd1 force
gluster volume start rep-volume
gluster volume info rep-volume

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/354606.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

轻松选购指南:如何挑选3D建模和3D渲染的高效计算机?

选择最适合 3D 建模和3D渲染的计算机可能是一项艰巨的任务&#xff0c;特别是对于初学者来说。有很多因素需要考虑&#xff0c;包括处理器、显卡、内存和存储容量。 如果你计划购买一台计算机或利用3D产品渲染服务&#xff0c;那么你必须了解需要考虑的特性。以下是选择3D建模…

中望CAD 2025 (ZW3D2025) 简体中文修改版

名称&#xff1a;中望CAD 2025 (ZW3D2025) 简体中文修改版 描述&#xff1a;一款三维CAD设计工具&#xff0c;运行破解补丁ZW3D2025-2024-Patch执行修补。 链接&#xff1a;夸克网盘分享 &#x1f4c1; 大小&#xff1a;3.2GB &#x1f3f7; 标签&#xff1a;#PC软件 #CAD #设…

项目四 OpenStack身份管理

任务一 理解身份服务 1.1 •Keystone的基本概念 • 认证 &#xff08; Authentication &#xff09; —— 确认用户身份的过程 &#xff0c;又称身份验证 。 • 凭证 &#xff08; Credentials &#xff09; —— 又 称凭据&#xff0c;是用于 确认用户身份的数据 。 • 令牌…

jeecg快速启动(附带本地运行可用版本下载)

版本整理&#xff08;windows x64位&#xff09;&#xff1a; redis&#xff1a;3.0.504 MYSQL&#xff1a;5.7 Maven&#xff1a;3.9.4(setting文件可下载) Nodejs&#xff1a;v16.20.2&#xff08;建议不要安装默认路径下&#xff0c;如已安装在c盘&#xff0c;运行yarn报…

多线程(总结黑马程序员)

一、什么是线程&#xff1f; 是一个程序内部的一条执行流程 多线程是什么&#xff1f; 多条线程由CPU负责调度执行 多线程的创建方式一&#xff1a;继承Thread类 //1.继承Thread类 public class MyThread extends Thread {//2.必须重写run方法Overridepublic void run() {…

机器人学习和研究的物质基础包含哪些内容?

为啥写这个&#xff1f; 在很多博客里面提及物质基础&#xff0c;没想到询问的也非常多&#xff0c;写一篇详细一点的。 之前的故事 不合格且失败机器人讲师个人理解的自身课程成本情况-CSDN博客 迷失自我无缘多彩世界-2024--CSDN博客 物质基础与情绪稳定的关系-CSDN博客 …

Javaweb登录校验

登录校验 JWT令牌的相关操作需要添加相关依赖 <dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.9.1</version> </dependency>一、摘要 场景&#xff1a;当我们想要访问一个网站时&am…

Vue开发中Element UI/Plus使用指南:常见问题(如Missing required prop: “value“)及中文全局组件配置解决方案

文章目录 一、vue中使用el-table的typeindex有时不显示序号Table 表格显示索引自定义索引报错信息解决方案 二、vue中Missing required prop: “value” 报错报错原因解决方案 三、el-table的索引值index在翻页的时候可以连续显示方法一方法二 四、vue3中Element Plus全局组件配…

VMware RedHat虚拟机磁盘扩容(添加磁盘和扩展磁盘)

前言 自己的电脑上配一个虚拟机还是很有必要的&#xff0c;用起来比双系统方便一点&#xff0c;之前搞了100g的ubuntu没用到&#xff0c;后面重装redhat觉得随便搞个20g就够用了&#xff0c;后面用到之后就遇到磁盘不够用的情况&#xff0c;只能说情况允许的话&#xff0c;磁盘…

CityEngine记录1:工程目录

CityEngine的工程目录结构对于理解和组织3D城市建模项目至关重要。以下是对CityEngine工程目录结构的详细解析&#xff1a; Assets&#xff1a; 存放模型的零件与纹理图片。这些资产通常用于在建模过程中为建筑物、道路、植被等元素添加详细的纹理和细节。 Data&#xff1a; …

自学鸿蒙HarmonyOS的ArkTS语言<一>基本语法

一、一个ArkTs的目录结构 二、一个页面的结构 A、装饰器 Entry 装饰器 : 标记组件为入口组件&#xff0c;一个页面由多个自定义组件组成&#xff0c;但是只能有一个组件被标记 Component : 自定义组件, 仅能装饰struct关键字声明的数据结构 State&#xff1a;组件中的状态变量…

图像处理:Python使用OpenCV进行图像锐化 (非锐化掩模、拉普拉斯滤波器)

文章目录 非锐化掩模 (Unsharp Masking)拉普拉斯滤波器 (Laplacian Filter)效果对比总结 在图像处理中&#xff0c;锐化操作用于增强图像的边缘和细节&#xff0c;使图像看起来更清晰。常见的图像锐化方法包括非锐化掩模&#xff08;Unsharp Masking&#xff09;和拉普拉斯滤波…

AI 音乐大模型:创新的曙光还是创意产业的阴影?

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

[Kubernetes] etcd 单机和集群部署

文章目录 1.etcd基本概念2.etcd的基本知识3.etcd优势4.etcd单机部署4.1 linux部署4.2 windows部署4.3 docker安装etcd 5.etcd集群部署 1.etcd基本概念 etcd是一个高可用的分布式键值存储系统&#xff0c;是CoreOS&#xff08;现在隶属于Red Hat&#xff09;公司开发的一个开源…

人工智能这么厉害,比如GPT-4,为什么没有看到程序员大量失业?

从ChatGPT第一版发布到现在&#xff0c;还不到一年的时间中&#xff0c;可是它使用的GPT架构已经从3.5版本进化到现在的4.0版本&#xff0c;随之而来的是其能力的极大提升。下面是GPT-4在其官网的介绍中的一句话&#xff1a; GPT-4是OpenAI最先进的系统&#xff0c;可以产生更安…

数学建模基础:数学建模概述

目录 前言 一、数学建模的步骤 二、模型的分类 三、模型评价指标 四、常见的数学建模方法 实际案例&#xff1a;线性回归建模 步骤 1&#xff1a;导入数据 步骤 2&#xff1a;数据预处理 步骤 3&#xff1a;建立线性回归模型 步骤 4&#xff1a;模型验证 步骤 5&…

python-基础篇-文件和异常

文章目录 文件和异常读写文本文件读写二进制文件读写JSON文件 文件和异常 实际开发中常常会遇到对数据进行持久化操作的场景&#xff0c;而实现数据持久化最直接简单的方式就是将数据保存到文件中。说到“文件”这个词&#xff0c;可能需要先科普一下关于文件系统的知识&#…

渗透测试基础(四) MS08-067 漏洞攻击

1. 漏洞介绍 漏洞描述 Microsoft Windows Server服务RPC请求缓冲区溢出漏洞Windows的Server服务在处理特质RPC请求时存在缓冲区溢出漏洞&#xff0c;远程攻击者可以通过发送恶意的RPC请求触发这个溢出&#xff0c;导致完全入侵用户系统&#xff0c;以SYSTEM权限执行任意指令。…

C#使用Scoket实现服务器和客户端互发信息

20240616 By wdhuag 目录 前言&#xff1a; 参考&#xff1a; 一、服务器端&#xff1a; 1、服务器端口绑定&#xff1a; 2、服务器关闭&#xff1a; 二、客户端&#xff1a; 1、客户端连接&#xff1a; 2、客户端断开&#xff1a; 三、通讯&#xff1a; 1、接收信…

Python4 操作MySQL数据库

通过python的pymysql库连接到本地的MySQL数据库&#xff0c;并执行查询操作来获取数据&#xff0c;然后打印出每一行的数据&#xff0c;这里以一个简单的学生表为例进行介绍。 1. MySQL的安装与数据准备 首先需要安装MySQL&#xff0c;在安装完成之后使用Navicat与本地数据库…