2-分布式存储之glusterfs

任务背景

实现了远程的存储共享(NAS或SAN)后, 公司业务发展迅速, 存储空间还需要增大。使用NAS或SAN都不方便扩容,NAS可以增加新的挂载目录, SAN可以增加新的硬盘,但我们希望直接在原来挂载的业务目录上实现在线扩容,数据体量越来越大, 这个时候我们就可以考虑使用==分布式存储==了。

任务要求

1, 将远程多台服务器的空闲存储空间整合,组合成一个大存储给应用服务器(如apache,nginx,tomcat,mysql等)使用

2, 考虑高可用与负载均衡原则,并能实现在线扩容

任务拆解

1, 了解分布式存储的概念与原理

2, 选择对应的分布式存储软件

3, 准备多台有空闲空间的服务器做存储服务器

4, 搭建集群将多台存储服务器组合

5, 将组合的大存储划分成卷共享给应用服务器使用

6, 实现在线扩容

学习目标

  • 能够说出分布式存储的优点
  • 能够成功搭建glusterfs集群
  • 掌握常见的glusterfs卷模式的创建与使用
  • 能够对特定的glusterfs卷实现在线裁减或扩容

分布式存储介绍

我们已经学习了NAS是远程通过网络共享目录, SAN是远程通过网络共享块设备

那么分布式存储你可以看作==拥有多台存储服务器连接起来的存储导出端==。把这多台存储服务器的存储合起来做成一个整体再通过网络进行远程共享,共享的方式有目录(文件存储),块设备(块存储),对象网关或者说一个程序接口(对象存储)。

常见的分布式存储开源软件有:GlusterFS,Ceph,HDFS,MooseFS,FastDFS等。

分布式存储一般都有以下几个优点:

  1. 扩容方便,轻松达到PB级别或以上

  2. 提升读写性能(LB)或数据高可用(HA)

  3. 避免单个节点故障导致整个架构问题

  4. 价格相对便宜,大量的廉价设备就可以组成,比光纤SAN这种便宜很多

Glusterfs

glusterfs介绍

glusterfs是一个免费,开源的分布式文件系统(它属于文件存储类型)。

Gluster

raid级别回顾(拓展)

raid级别有很多种,下面主要介绍常用的几种:

raid0 读写性能佳,坏了其中一块,数据挂掉,可靠性低(stripe条带化),磁盘利用率100%

raid1 镜像备份(mirror),同一份数据完整的保存在多个磁盘上,写的性能不佳,可靠性高,读的性能还行,磁盘利用率50%

raid10 先做raid 1 再做raid 0

raid5 由多块磁盘做raid 5,磁盘利用率为n-1/n, 其中一块放校验数据,允许坏一块盘,数据可以利用校验值来恢复

raid6 在raid5的基础上再加一块校验盘,进一步提高数据可靠性

生产环境中最常用的为raid5和raid10

常见卷的模式

卷模式描述
Replicated复制卷,类似raid1
Striped(了解,新版本将会放弃此模式及其它相关的组合模式)条带卷,类似raid0
Distributed分布卷
Distribute Replicated分布与复制组合
Dispersed纠删卷,类似raid5,raid6

glusterfs看作是一个将多台服务器存储空间组合到一起,再划分出不同类型的文件存储卷给导入端使用。

Replicated卷

Striped卷

Distributed卷

Distribute Replicated卷

其它模式请参考官网: https://docs.gluster.org/en/latest/Administrator%20Guide/Setting%20Up%20Volumes/

glusterfs集群

实验准备:

  1. 所有节点(包括client)静态IP(NAT网络,能上外网)

  2. 所有节点(包括client)都配置主机名及其主机名互相绑定(这次我这里做了别名,方便使用)

10.1.1.11   vm1.cluster.com     storage1
10.1.1.12   vm2.cluster.com     storage2
10.1.1.13   vm3.cluster.com     storage3
10.1.1.14   vm4.cluster.com     storage4
10.1.1.15   vm5.cluster.com     client
  1. 所有节点(包括client)关闭防火墙,selinux

    # systemctl stop firewalld
    # systemctl disable firewalld
    # iptables -F
  2. 所有节点(包括client)时间同步

  3. 所有节点(包括client)配置好yum(需要加上glusterfs官方yum源)

# vim /etc/yum.repos.d/glusterfs.repo
[glusterfs]
name=glusterfs
baseurl=https://buildlogs.centos.org/centos/7/storage/x86_64/gluster-4.1/
enabled=1
gpgcheck=0

yum源说明:

  • 可按照以上yum路径去查找glusterfs5glusterfs6版本的yum源路径(目前我们使用4.1版)

  • 如果网速太慢,可下载我共享的软件做本地yum源安装

实验步骤:

  1. 在所有storage服务器上安装相关软件包,并启动服务

  2. 所有storage服务器建立连接, 成为一个集群

  3. 所有storage服务器准备存储目录

  4. 创建存储卷

  5. 启动存储卷

  6. client安装挂载软件

  7. client挂载使用

实验过程:

第1步, 在所有storage服务器上(不包括client)安装glusterfs-server软件包,并启动服务

下面的命令所有存储服务器都要做
# yum install glusterfs-server
​
# systemctl start glusterd
# systemctl enable glusterd
# systemctl status glusterd

分布式集群一般有两种架构:

  • 有中心节点的 中心节点一般指管理节点,后面大部分分布式集群架构都属于这一种

  • 无中心节点的 所有节点又管理又做事,glusterfs属于这一种

第2步, 所有storage服务器建立连接,成为一个集群

4个storage服务器建立连接不用两两连接,只需要找其中1个,连接另外3个各一次就OK了
​
下面我就在storage1上操作
storage1# gluster peer probe storage2       
storage1# gluster peer probe storage3
storage1# gluster peer probe storage4       --这里使用ip,主机名,主机名别名都可以
​
然后在所有存储上都可以使用下面命令来验证检查
# gluster peer status   

==注意==:

如果这一步建立连接有问题(一般问题会出现在网络连接,防火墙,selinux,主机名绑定等);

如果想重做这一步,可以使用gluster peer detach xxxxx [force] 来断开连接,重新做

第3步, 所有storage服务器准备存储目录(可以用单独的分区,也可以使用根分区)

因为我让大家准备的storage服务器没有准备额外的硬盘,所以这里用根分区来做实验
但生产环境肯定是不建议数据盘和系统盘在一起的
# mkdir -p /data/gv0   

第4步, 创建存储卷(在任意一个storage服务器上做)

==注意==: ==改变的操作(create,delete,start,stop)等只需要在任意一个storage服务器上操作,查看的操作(info)等可以在所有storage服务器上操作==

下面命令我是在storage1上操作的
因为在根分区创建所以需要force参数强制
replica 4表示是在4台上做复制模式(类似raid1)
​
storage1# gluster volume create gv0 replica 4 storage1:/data/gv0/ storage2:/data/gv0/ storage3:/data/gv0/ storage4:/data/gv0/ force
volume create: gv0: success: please start the volume to access data
所有storage服务器上都可以查看
# gluster volume info gv0Volume Name: gv0
Type: Replicate             模式为replicate模式
Volume ID: 328d3d55-4506-4c45-a38f-f8748bdf1da6
Status: Created             这里状态为created,表示刚创建,还未启动,需要启动才能使用
Snapshot Count: 0
Number of Bricks: 1 x 4 = 4
Transport-type: tcp
Bricks:
Brick1: storage1:/data/gv0
Brick2: storage2:/data/gv0
Brick3: storage3:/data/gv0
Brick4: storage4:/data/gv0
Options Reconfigured:
transport.address-family: inet
nfs.disable: on

第5步, 启动存储卷

storage1# gluster volume start gv0
# gluster volume info gv0Volume Name: gv0
Type: Replicate
Volume ID: 328d3d55-4506-4c45-a38f-f8748bdf1da6
Status: Started			现在看到状态变为started,那么就表示可以被客户端挂载使用了
Snapshot Count: 0
Number of Bricks: 1 x 4 = 4
Transport-type: tcp
Bricks:
Brick1: storage1:/data/gv0
Brick2: storage2:/data/gv0
Brick3: storage3:/data/gv0
Brick4: storage4:/data/gv0
Options Reconfigured:
transport.address-family: inet
nfs.disable: on

第6步, client安装软件

客户端上操作
client# yum install glusterfs glusterfs-fuse -y

说明:

fuse(Filesystem in Userspace): 用户空间文件系统,是一个客户端挂载远程文件存储的模块

第7步, client挂载使用

==注意==:客户端也需要在/etc/hosts文件里绑定存储节点的主机名,才可以挂载(因为我前面做的步骤是用名字的)

client# mkdir /test0
client# mount -t glusterfs storage1:gv0 /test0这里client是挂载storage1,也可以挂载storage2,storage3,storage4任意一个。(也就是说这4个storage既是老板,又是员工。这是glusterfs的一个特点,其它的分布式存储软件基本上都会有专门的管理server)

replica卷测试

读写测试方法:

在客户端使用dd命令往挂载目录里写文件,然后查看在storage服务器上的分布情况(具体验证详细过程参考授课视频)

(==注意: 读写操作请都在客户端进行,不要在storage服务器上操作==)

client# dd if=/dev/zero of=/test0/file1 bs=1M count=100
  1. 读写测试结果: 结果类似raid1

  2. 同读同写测试: 有条件的可以再开一台虚拟机做为client2,两个客户端挂载gv0后实现同读同写(文件存储类型的特点)

运维思想:

搭建OK后,你要考虑性能,稳定, 高可用,负载均衡,健康检查, 扩展性等

如果某一个节点挂了,你要考虑是什么挂了(网卡,服务,进程,服务器关闭了),如何解决?

请测试如下几种情况:

  • 将其中一个storage节点关机

客户端需要等待10几秒钟才能正常继续使用,再次启动数据就正常同步过去
  • 将其中一个storage节点网卡down掉

客户端需要等待10几秒钟才能正常继续使用,再次启动数据就正常同步过去
  • 将其中一个storage节点glusterfs相关的进程kill掉

客户端无需等待就能正常继续使用,但写数据不会同步到挂掉的storage节点,等它进程再次启动就可以同步过去了

结论: 作为一名运维工程师,HA场景有不同的挂法:

  • 服务器关闭

  • 网卡坏了

  • 网线断了

  • 交换机挂了

  • 服务进程被误杀等等

但我们需要去考虑,当软件无法把我们全自动实现时,我们可能需要使用脚本来辅助。有一个简单的方法为: 如果一个节点没死透,我们就干脆将它关机,让它死透😂

请参考拓展: RHCS,pacemaker里的fence,stonish(shoot the other node in the head)等概念。

卷的删除

第1步: 先在客户端umount已经挂载的目录(在umount之前把测试的数据先删除)

client# rm /test0/* -rf   		
client# umount /test0

第2步: 在任一个storage服务器上使用下面的命令停止gv0并删除,我这里是在storage1上操作

storage1# gluster volume stop gv0
Stopping volume will make its data inaccessible. Do you want to continue? (y/n) y
volume stop: gv0: successstorage1# gluster volume delete gv0 
Deleting volume will erase all information about the volume. Do you want to continue? (y/n) y
volume delete: gv0: success

第3步: 在所有storage服务器上都可以查看,没有gv0的信息了,说明这个volumn被删除了

# gluster volume info gv0 
Volume gv0 does not exist

问题: 我在不删除gv0的情况下,能否再创建一个叫gv1的卷?

当然可以,换个目录再创建就OK

stripe模式(条带)

第1步: 再重做成stripe模式的卷(重点是命令里的stripe 4参数)(在任一个storage服务器上操作, 我这里是在storage1上操作)

storage1# gluster volume create gv0 stripe 4 storage1:/data/gv0/ storage2:/data/gv0/ storage3:/data/gv0/ storage4:/data/gv0/ force
volume create: gv0: success: please start the volume to access data

第2步: 启动gv0(在任一个storage服务器上操作, 我这里是在storage1上操作)

storage1# gluster volume start gv0

第3步: 客户端挂载

client# mount -t glusterfs storage1:gv0 /test0

第4步:读写测试

读写测试结果: 文件过小,不会平均分配给存储节点。有一定大小的文件会平均分配。类似raid0。

  • 磁盘利率率100%(前提是所有节点提供的空间一样大,如果大小不一样,则按小的来进行条带)

  • 大文件会平均分配给存储节点(LB)

  • 没有HA,挂掉一个存储节点,此stripe存储卷则不可被客户端访问

distributed模式

第1步: 准备新的存储目录(所有存储服务器上都要操作)

# mkdir -p /data/gv1

第2步: 创建distributed卷gv1(不指定replica或stripe就默认是Distributed的模式, 在任一个storage服务器上操作, 我这里是在storage1上操作)

storage1# gluster volume create gv1 storage1:/data/gv1/ storage2:/data/gv1/ storage3:/data/gv1/ storage4:/data/gv1/ force

第3步: 启动gv1(在任一个storage服务器上操作, 我这里是在storage1上操作)

storage1# gluster volume start gv1

第4步: 客户端挂载

client# mkdir /test1
client# mount -t glusterfs storage1:gv1 /test1

第5步:读写测试(测试方法与replica模式一样,具体过程参考授课视频)

读写测试结果: 测试结果为随机写到不同的存储里,直到所有写满为止。

  • 利用率100%

  • 方便扩容

  • 不保障的数据的安全性(挂掉一个节点,等待大概1分钟后,这个节点就剔除了,被剔除的节点上的数据丢失)

  • 也不提高IO性能

distributed-replica模式

第1步: 准备新的存储目录(所有存储服务器上都要操作)

# mkdir -p /data/gv2

第2步: 创建distributed-replica卷gv2(在任一个storage服务器上操作, 我这里是在storage1上操作)

storage1# gluster volume create gv2 replica 2 storage1:/data/gv2/ storage2:/data/gv2/ storage3:/data/gv2/ storage4:/data/gv2/ force  

第3步: 启动gv2(在任一个storage服务器上操作, 我这里是在storage1上操作)

storage1# gluster volume start gv2

第4步: 客户端挂载

client# mkdir /test2
client# mount -t glusterfs storage1:gv2 /test2

第5步:读写测试

读写测试结果: 4个存储分为两个组,这两个组按照distributed模式随机。但在组内的两个存储会按replica模式镜像复制。

特点:

  • 结合了distributed与replica的优点:可以扩容,也有HA特性

dispersed模式

disperse卷是v3.6版本后发布的一种卷模式,类似于raid5/6

第1步: 准备新的存储目录(所有存储服务器上都要操作)

# mkdir -p /data/gv3

第2步: 创建卷gv3(在任一个storage服务器上操作, 我这里是在storage1上操作)

storage1# gluster volume create gv3 disperse 4 storage1:/data/gv3/ storage2:/data/gv3/ storage3:/data/gv3/ storage4:/data/gv3/ force
There is not an optimal redundancy value for this configuration. Do you want to create the volume with redundancy 1 ? (y/n) y
volume create: gv3: success: please start the volume to access data注意:没有指定冗余值,默认为1,按y确认

第3步: 启动gv3(在任一个storage服务器上操作, 我这里是在storage1上操作)

storage1# gluster volume start gv3storage1# gluster volume info gv3
Volume Name: gv3
Type: Disperse					
Volume ID: 767add4e-48c4-4a2d-a5d1-467076d73afd
Status: Started
Snapshot Count: 0
Number of Bricks: 1 x (3 + 1) = 4				这里看到冗余数为1
Transport-type: tcp
Bricks:
Brick1: storage1:/data/gv3
Brick2: storage2:/data/gv3
Brick3: storage3:/data/gv3
Brick4: storage4:/data/gv3
Options Reconfigured:
transport.address-family: inet
nfs.disable: on

第4步: 客户端挂载

client# mkdir /test3
client# mount -t glusterfs storage1:gv3 /test3

第5步:读写测试(测试方法与replica模式一样,具体过程参考授课视频)

读写测试结果: 写100M,每个存储服务器上占33M左右。因为4个存储1个为冗余(与raid5一样)。

课后测试: 如果想要实现2个冗余,则最少需要5台存储服务器

# gluster volume create gv4 disperse 4 redundancy 2 storage1:/data/gv4/ storage2:/data/gv4/ storage3:/data/gv4/ storage4:/data/gv4/ force
redundancy must be less than 2 for a disperse 4 volume
这里指定disperse 4 redundancy 2参数,但报错为冗余值必须要比disperse值少2以上

在线裁减与在线扩容

在线裁减要看是哪一种模式的卷,比如stripe模式就不允许在线裁减。下面我以distributed卷来做裁减与扩容

在线裁减(注意要remove没有数据的brick)

# gluster volume remove-brick gv1 storage4:/data/gv1 force  
Removing brick(s) can result in data loss. Do you want to Continue? (y/n) y
volume remove-brick commit force: success

在线扩容

# gluster volume add-brick gv1 storage4:/data/gv1 force
volume add-brick: success

问题1: 4个存储节点想扩容为5个存储节点怎么做?

答案: 第5个存储服务器安装服务器软件包,启动服务,然后gluster peer probe storage5加入集群

问题2: 一个卷里已经有4个brick,想在线扩容brick,怎么做?

只有distributed模式或带有distributed组合的模式才能在线扩容brick

glusterfs小结:

属于文件存储类型,优点:可以数据共享 缺点: 速度较低

卷类型:

见xmind文件

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

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

相关文章

ChatGLM3-6B和langchain知识库阿里云部署

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、ChatGLM3-6B部署搭建环境部署GLM3 二、Chatglm2-6blangchain部署本地知识库三、Tips四、总结 前言 提示:这里可以添加本文要记录的大概内容&am…

被央视报道过的AIGC产品-贝塔创作(BetaCreator)使用指南

产品地址:betacreator.com 真人图 人台图 商品图 商品变色 建议使用浅色服装进行变色,效果更好 如果没有浅色服装,可以先把服装颜色变为白色

视频剪辑必备的6个免费素材网站

视频剪辑需要用到很多音效、视频、图片等素材,下面我就分享几个剪辑必备的免费视频素材网站,赶紧收藏起来~ 1、菜鸟图库 https://www.sucai999.com/video.html?vNTYwNDUx 菜鸟图库虽然是个设计素材网站,但除了设计类素材之外还有很多视频、…

python学习:浅拷贝与深拷贝详解

copy 一、 & is二、浅拷贝 & 深拷贝(一)、浅拷贝(二)、深拷贝 三、问题 一、’ ’ & ‘is’ ’ 和is是python对象比较常用的两种方式,简单来说,‘ ‘操作符比较对象之间的值是否相等,如 a b 而’is’操作符比较的是对象的身份标识是否相等,即它们是否是同一个…

Linux系统解决“Key was rejected by service”

Linux系统下加载驱动模块出现如上错误提示的原因为:此驱动未经过签名。 方法一、关闭Secure Boot 如果是物理机,需要开机进入BIOS,找到“Secure Boot”的选项,然后关闭。 如果是虚拟机,可以打开虚拟设置&#xff0c…

快速准确翻译文件夹名:英文翻译成中文,文件夹批量重命名的技巧

在处理大量文件夹时,可能会遇到要将英文文件夹名翻译成中文的情况。同时也可能要批量重命名这些文件夹。今天一起来看下云炫文件管理器如何快速准确翻译文件夹名,进行批量重命名的技巧。 下图是文件夹名翻译前后的效果图。 英文文件夹名批量翻译成中文…

3Dmax快捷键大全,让你的创作飞起来!附赠3dmax工具箱插件,快来收藏吧!

你是否曾经在3Dmax中因为繁琐的操作而感到困扰? 今天,我将为大家带来一份精心整理的3Dmax常用快捷键宝典,让你在建模、材质编辑、动画制作等各个方面都能游刃有余,让你的创作飞起来!! 💡 选择与…

27. 深度学习进阶 - 为什么RNN

文章目录 一个柯基的例子为什么RNN or CNN Hi,你好。我是茶桁。 这节课开始,我们将会讲一个比较重要的一种神经网络,它对应了咱们整个生活中很多类型的一种问题结构,它就是咱们的RNN网络。 咱们首先回忆一下,上节课咱…

【计算机网络】TCP|IP协议

目录 前言 什么是TCP/IP协议? TCP/IP协议的层次结构 TCP/IP协议的工作原理 TCP/IP协议的重要性 结语 前言 TCP/IP协议是当今互联网世界中最重要的网络协议之一,它是网络通信的基石,为数据在网络中的传输提供了可靠性和有效性。本文将深…

python编程需要的电脑配置,python编程用什么电脑

大家好,小编来为大家解答以下问题,python编程对笔记本电脑配置的要求,python编程对电脑配置的要求有哪些,现在让我们一起来看看吧! 学习python编程需要什么配置的电脑 简单的来讲,Python的话普通电脑就可以…

SAP UI5 walkthrough step1 hello word

这里我用的VS Studio 来进行本地化学习 关于SAP UI5是啥,我就不再赘述了,另外还有VS Studio 的安装,请提前做好准备 下面我们直接进入正文 1.首先在你的本地新建一个文件夹,此处我命名为:walkthrough 2.在VS中打开…

【数据结构与算法】JavaScript实现图结构

文章目录 一、图论1.1.图的简介1.2.图的表示邻接矩阵邻接表 二、封装图结构2.1.添加字典类和队列类2.2.创建图类2.3.添加顶点与边2.4.转换为字符串输出2.5.图的遍历广度优先搜索深度优先搜索 2.6.完整实现 一、图论 1.1.图的简介 什么是图? 图结构是一种与树结构…

Java中的反射

反射 Java 是第一大编程语言和开发平台。它有助于企业降低成本、缩短开发周期、推动创新以及改善应用服务。如今全球有数百万开发人员运行着超过 51 亿个 Java 虚拟机, Java 仍是企业和开发人员的首选开发平台。 课程内容的介绍 1. 反射相关的概念 2. 反射的…

HarmonyOS4.0从零开始的开发教程12给您的应用添加弹窗

HarmonyOS(十)给您的应用添加弹窗 概述 在我们日常使用应用的时候,可能会进行一些敏感的操作,比如删除联系人,这时候我们给应用添加弹窗来提示用户是否需要执行该操作,如下图所示: 弹窗是一种…

AI全栈大模型工程师(二十八)如何做好算法备案

互联网信息服务算法 什么情况下要备案? 对于B2B业务,不需要备案。 但在B2C领域,一切要视具体情况而定。 如果我们自主训练大型模型,这是必要的。 但如果是基于第三方模型提供的服务,建议选择那些已获得备案并且具有较大…

Python脚本打包

一.Windows操作系统 Python脚本打包 1.cmd窗口执行如下指令:pip install pyinstaller C:\Users\ZhuQing>pip install pyinstaller2.执行以下指令验证pyinstaller是否安装成功(pyinstaller) C:\Users\ZhuQing>pyinstaller3.被打包程序…

frp配置内网穿透步骤

frp配置内网穿透步骤 1.环境准备1.1 云服务器1.2 frp包 2. frp安装2.1 server服务端设置2.2 客户端配置 实现目标通过云服务器ip:8080访问内网电脑启动的web项目localhost:8080 1.环境准备 1.1 云服务器 服务器安装centos7.9, 安全组入口方向开通 7500 7000 8080 8060端口 …

DPDK是什么?DPDK网卡更有优势吗?

近年来,随着数字化的推进,上云成为企业数字化建设的重要指标,用云程度持续深入。可以说,云时代已经来临。 应云而生的DPDK 云时代的一个典型特征,是数据的高速增长。据华为GIV数据,预计2025年全球数据量将…

【力扣】2.两数相加

2.两数相加 这是第二题,还行豁~。 题解: 首先就是对题目的理解。这里你要知道两链表中数字的排列都是逆序的,也就是说示例一中2-4-3他原本的数字应该是342。同理可得下面链表的意思,二者相加所得到的结果也是逆序的,…

基于Java8构建Docke镜像

基于Java8构建Docke镜像 搜索java8安装包 docker search java8 --no-trunc , --no-trunc展开描述信息 选择拉取 docker pull docker.io/mykro/java8-jre,为了减少磁盘占用,选择jre版本基础镜像 在宿主机创建文件夹iot,并把所需…