企业常用GFS分布式存储系统

GlusterFS简介

开源的分布式文件系统
由存储服务器,客户端以及NFS/Samba存储网关组成
无元数据服务器
GlusterFS特点
扩展性和共性能
高可用
全局统一命名空间
弹性卷管理
基于标准协议

GlusterFS概述

Brick存储节点
Volume卷
fuse内核模块,用户端的交互性模块
vfs虚拟
Glusterd服务

来理解一下这张图:

上面一层虚拟化管理层,想当于一个应用。缓存,读写头,条带卷,代理想当于API接口

中间rdma传输    相当于一个驱动
下面一层真实的设备    相 当于一个硬件

clusterFS工作流程

弹性HASH算法
通过HASH算法的到一个32位的整数
划分位N个连续的子空间,每个空间对应一个Brick
弹性HASH算法的优点
保证 数据平均分布在每一个Brick中
解决了对元数据服务器的依赖,进而解决了单点故障以及访问瓶颈
通过HASH算法的到一个32位算法,去算去选择,因为你的每一个节点都存储一部分数据,你怎么去识别排序,通过算法。

四个Brick节点的GlusterFS卷,平均分配232次方的区间的范围空间


通过hash算法去找到对应的brick节点的存储空间,去分配数据存储,去调用每一个节点数据

clusterfs的卷类型

分布式卷
复制卷
分布式条带卷
分布式复制卷
条带复制卷
分布式条带复制卷

分布式卷

没有对文件进行分块处理
通过扩展文件属性保存HASH值
支持的底层文件系统有ext3,ext4,ZFS,XFS等
**分布式卷具有如下特点**
文件分布在不同的服务器,不具备冗余性
更容易和廉价地扩展卷的大小
单点故障会造成数据丢失
依赖底层的数据保护
我们有办法解决,因为它存的文件都是完整的,我们可以做个镜像卷,做个备份

条带卷

根据偏移量将文件分成N块(N个条带节点),轮询的存储在每个Brickserver节点
存储大文件时,性能尤为突出,不具备冗余性,类似Raid0
**特点**
数据被分割成更小块分布到块服务器群中的不同条带区
分布减少负载且更小的文件加速了存取的速度
没有数据冗余

复制卷

同一个文件保存一份或多分副本
复制模式因为保存副本,所以磁盘利用率较低
多个节点的存储空间不一致,那么将按照木桶效应取最低节点的容量作为该卷的总容量
**特点**
卷中所有的服务器均保存一个完整的副本
卷的副本数量可以有客户创建的时候决定
至少由两个块服务器或更多服务器
具备冗余性

分布式条带卷

兼顾分布式卷和条带卷的功能
主要用于大文件访问处理
至少最少需要4台服务器

分布式复制卷

兼顾分布式卷和复制卷的共呢
用于需要冗余的情况下
···

## GFS分布式文件系统集群项目
## 群集环境
![在这里插入图片描述](https://img-blog.csdnimg.cn/20191218153045975.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhcmhvaWE=,size_16,color_FFFFFF,t_70)
## 卷类型
| 卷名称 | 卷类型 | 空间大小 | Brick|
|--|--|--|--|
|dis-volume  | 分布式卷 |40G | node1(/b1)、node2(/b1) |
|stripe-volume  | 条带卷 | 40G|node1(/c1)、node2(/c1)  |
| rep-volume | 复制卷 |20G |node3(/b1)、node4(/b1)  |
| dis-stripe | 分布式条带卷 | 40G| node1(/d1)、node2(/d1)、node3(/d1)、node4(/d1) |
| dis-rep | 分布式复制卷 | 20G|  node1(/e1)、node2(/e1)、node3(/e1)、node4(/e1)  |
## 实验准备
#### 1、为四台服务器服务器每台添加4个磁盘
![在这里插入图片描述](https://img-blog.csdnimg.cn/2019121816001274.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BhcmhvaWE=,size_16,color_FFFFFF,t_70)
#### 2、修改服务器的名称
分别修改为node1、node2、node3、node4

```sql
[[email protected] ~]#hostnamectl set-hostname node1
[[email protected] ~]# su

3、将四台服务器上的磁盘格式化,并挂载

在这里我们使用脚本执行挂载

#进入opt目录
[[email protected] ~]# cd /opt
#磁盘格式化、挂载脚本
[[email protected] opt]# vim a.sh
#! /bin/bash
echo "the disks exist list:"
fdisk -l |grep ‘磁盘 /dev/sd[a-z]‘
echo "=================================================="
PS3="chose which disk you want to create:"
select VAR in `ls /dev/sd*|grep -o ‘sd[b-z]‘|uniq` quit
do
    case $VAR in
    sda)
        fdisk -l /dev/sda
        break ;;
    sd[b-z])
        #create partitions
        echo "n
                p

                w"  | fdisk /dev/$VAR

        #make filesystem
        mkfs.xfs -i size=512 /dev/${VAR}"1" &> /dev/null
    #mount the system
        mkdir -p /data/${VAR}"1" &> /dev/null
        echo -e "/dev/${VAR}"1" /data/${VAR}"1" xfs defaults 0 0\n" >> /etc/fstab
        mount -a &> /dev/null
        break ;;
    quit)
        break;;
    *)
        echo "wrong disk,please check again";;
    esac
done
#给于脚本执行权限
[[email protected] opt]# chmod +x a.sh

将脚本通过scp推送到其他三台服务器上

scp a.sh [email protected]:/opt
scp a.sh [email protected]:/opt
scp a.sh [email protected]:/opt
在四台服务器上执行脚本,并完成

这个只是样本

[[email protected] opt]# ./a.sh
the disks exist list:
==================================================
1) sdb
2) sdc
3) sdd
4) sde
5) quit
chose which disk you want to create:1      //选择要格式化的盘
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x37029e96.

Command (m for help): Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): Partition number (1-4, default 1): First sector (2048-41943039, default 2048): Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): Using default value 41943039
Partition 1 of type Linux and of size 20 GiB is set

Command (m for help): The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
分别在四个服务器上查看挂载情况

4、设置hosts文件

在第一台node1上修改

#在文件末尾添加
vim /etc/hosts
192.168.45.133 node1
192.168.45.130 node2
192.168.45.134 node3
192.168.45.136 node4

通过scp将hosts文件推送给其他服务器和客户端

#将/etc/hosts文件推送给其他主机
[[email protected] opt]# scp /etc/hosts [email protected]:/etc/hosts
[email protected]‘s password:
hosts                                      100%  242    23.6KB/s   00:00
[[email protected] opt]# scp /etc/hosts [email protected]:/etc/hosts
[email protected]‘s password:
hosts                                      100%  242   146.0KB/s   00:00
[[email protected] opt]# scp /etc/hosts [email protected]:/etc/hosts
[email protected]‘s password:
hosts              

在其他服务器上查看推送情况

关闭所有服务器和客户端的防火墙
[[email protected] ~]# systemctl stop firewalld.service
[[email protected] ~]# setenforce 0

在客户端和服务器上搭建yum仓库

#进入yum文件路径
[[email protected] ~]# cd /etc/yum.repos.d/
#创建一个空文件夹
[[email protected] yum.repos.d]# mkdir abc
#将CentOS-文件全部移到到abc下
[[email protected] yum.repos.d]# mv CentOS-* abc
#创建私有yum源
[[email protected] yum.repos.d]# vim GLFS.repo
[demo]
name=demo
baseurl=http://123.56.134.27/demo
gpgcheck=0
enable=1

[gfsrepo]
name=gfsrepo
baseurl=http://123.56.134.27/gfsrepo
gpgcheck=0
enable=1

#重新加载yum源
[[email protected] yum.repos.d]# yum list

安装必要软件包

[[email protected] yum.repos.d]# yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma

在其他三台上进行同样的操作

在四台服务器上启动glusterd,并设置为开机自启动
[[email protected] yum.repos.d]# systemctl start glusterd.service
[[email protected] yum.repos.d]# systemctl enable glusterd.service

添加节点信息

[[email protected] yum.repos.d]# gluster peer probe node2
peer probe: success.
[[email protected] yum.repos.d]# gluster peer probe node3
peer probe: success.
[[email protected] yum.repos.d]# gluster peer probe node4
peer probe: success.

在其他服务器上查看节点信息

[[email protected] yum.repos.d]# gluster peer status

创建分布式卷

#创建分布式卷
[[email protected] yum.repos.d]# gluster volume create dis-vol node1:/data/sdb1 node2:/data/sdb1 force
#检查信息
[[email protected] yum.repos.d]# gluster volume info dis-vol
#查看分布式现有卷
[[email protected] yum.repos.d]# gluster volume list
#启动卷
[[email protected] yum.repos.d]# gluster volume start dis-vol 

在客户端上挂载

#递归创建挂载点
[[email protected] yum.repos.d]# mkdir -p /text/dis
#将刚才创建的卷挂载到刚才创建的挂载点下
[[email protected] yum.repos.d]# mount.glusterfs node1:dis-vol /text/dis

创建条带卷

#创建卷
[[email protected] yum.repos.d]# gluster volume create stripe-vol stripe 2 node1:/data/sdc1 node2:/data/sdc1 force
#查看现有卷
[[email protected] yum.repos.d]# gluster volume list
dis-vol
stripe-vol
#启动条带卷
[[email protected] yum.repos.d]# gluster volume start stripe-vol
volume start: stripe-vol: success
在客户端挂载
#创建挂载点
[[email protected] yum.repos.d]# mkdir /text/strip
#挂载条带卷
[[email protected] yum.repos.d]# mount.glusterfs node1:/stripe-vol /text/strip/

查看挂载情况

创建复制卷

#创建复制卷
[[email protected] yum.repos.d]# gluster volume create rep-vol replica 2 node3:/data/sdb1 node4:/data/sdb1 force
volume create: rep-vol: success: please start the volume to access data
#开启复制卷
[[email protected] yum.repos.d]# gluster volume start rep-vol
volume start: rep-vol: success

在客户机挂碍复制卷

[[email protected] yum.repos.d]# mkdir /text/rep
[[email protected] yum.repos.d]# mount.glusterfs node3:rep-vol /text/rep

查看挂载

创建分布式条带

#创建分布式条带卷
[[email protected] yum.repos.d]# gluster volume create dis-stripe stripe 2 node1:/data/sdd1 node2:/data/sdd1 node3:/data/sdd1 node4:/data/sdd1 force
volume create: dis-stripe: success: please start the volume to access data
#启动分布式条带卷
[[email protected] yum.repos.d]# gluster volume start dis-stripe
volume start: dis-stripe: success

在客户机上挂载

[[email protected] yum.repos.d]# mkdir /text/dis-strip
[[email protected] yum.repos.d]# mount.glusterfs node4:dis-stripe /text/dis-strip/

创建分布式复制卷

#创建分布式复制卷
[[email protected] yum.repos.d]# gluster volume create dis-rep replica 2 node1:/data/sde1 node2:/data/sde1 node3:/data/sde1 node4:/data/sde1 force
volume create: dis-rep: success: please start the volume to access data
#开启复制卷
[[email protected] yum.repos.d]# gluster volume start dis-rep
volume start: dis-rep: success
# 查看现有卷
[[email protected] yum.repos.d]# gluster volume list
dis-rep
dis-stripe
dis-vol
rep-vol
stripe-vol

在客户端挂载

[[email protected] yum.repos.d]# mkdir /text/dis-rep
[[email protected] yum.repos.d]# mount.glusterfs node3:dis-rep /text/dis-rep/

查看挂载

------------------------上边我们完成了卷的创建和挂载-------------

现在我们来进行卷的测试

首先在客户机上创建5个40M的文件

[[email protected] yum.repos.d]# dd if=/dev/zero of=/demo1.log bs=1M count=40
40+0 records in
40+0 records out
41943040 bytes (42 MB) copied, 0.0175819 s, 2.4 GB/s
[[email protected] yum.repos.d]# dd if=/dev/zero of=/demo2.log bs=1M count=40
40+0 records in
40+0 records out
41943040 bytes (42 MB) copied, 0.269746 s, 155 MB/s
[[email protected] yum.repos.d]# dd if=/dev/zero of=/demo3.log bs=1M count=40
40+0 records in
40+0 records out
41943040 bytes (42 MB) copied, 0.34134 s, 123 MB/s
[[email protected] yum.repos.d]# dd if=/dev/zero of=/demo4.log bs=1M count=40
40+0 records in
40+0 records out
41943040 bytes (42 MB) copied, 1.55335 s, 27.0 MB/s
[[email protected] yum.repos.d]# dd if=/dev/zero of=/demo5.log bs=1M count=40
40+0 records in
40+0 records out
41943040 bytes (42 MB) copied, 1.47974 s, 28.3 MB/s

然后复制5个文件到不同的卷上

[[email protected] yum.repos.d]# cp /demo* /text/dis
[[email protected] yum.repos.d]# cp /demo* /text/strip
[[email protected] yum.repos.d]# cp /demo* /text/rep
[[email protected] yum.repos.d]# cp /demo* /text/dis-strip
[[email protected] yum.repos.d]# cp /demo* /text/dis-rep

查看卷的内容

查看分布式卷


查看条带卷


查看复制卷


查看分布式条带卷




查看分布式复制卷




故障测试

关闭node2服务器观察结果
[[email protected] yum.repos.d]#  ls /text/
dis  dis-rep  dis-strip  rep  strip
[[email protected] yum.repos.d]# ls /text/dis
demo1.log  demo2.log  demo3.log  demo4.log
[[email protected] yum.repos.d]# ls /text/dis-rep
demo1.log  demo2.log  demo3.log  demo4.log  demo5.log
[[email protected] yum.repos.d]# ls /text/dis-strip/
demo5.log
[[email protected] yum.repos.d]# ls /text/rep/
demo1.log  demo2.log  demo3.log  demo4.log  demo5.log
[[email protected] yum.repos.d]# ls /text/strip/
[[email protected] yum.repos.d]#

结果表示:

  • 分布卷缺少demo5.log文件
  • 条带卷无法访问
  • 复制卷正常访问
  • 分布式条带卷缺少文件
  • 分布式复制卷正常访问

删除卷

要删除卷需要先停止卷,在删除卷的时候,卷组必须处于开启状态

#停止卷
[[email protected] yum.repos.d]# gluster volume delete dis-vol
#删除卷
[[email protected] yum.repos.d]# gluster volume delete dis-vol

访问控制

#仅拒绝
[[email protected] yum.repos.d]# gluster volume set dis-vol auth.reject 192.168.45.133
#仅允许
[[email protected] yum.repos.d]# gluster volume set dis-vol auth.allow 192.168.45.133

原文地址:https://blog.51cto.com/14449524/2459804

时间: 2024-08-06 20:08:19

企业常用GFS分布式存储系统的相关文章

分布式存储系统 知识体系

最近看完了杨传辉老师写的<大规模分布式存储系统>一书,发现里面很多知识点和之前看的<大型网站系统与Java中间件>有很多相通之处,也渐渐加 深了我对分布式技术的兴趣.但无奈分布式涵盖范围太广了,分布式存储.分布式计算.CAP理论.Paxos算法.什么GFS.Hadoop. Dynamo.BigTable.Spanner等等,不下点功夫还真不能理顺它们之间的内在关系.所以结合两书以及一些优秀博文,总结了分布式存储的知 识体系,为以后打下基础而努力.由于初入泥潭,必然有些理解不当的地方

《SPARK/TACHYON:基于内存的分布式存储系统》-史鸣飞(英特尔亚太研发有限公司大数据软件部工程师)

史鸣飞:大家好,我是叫史鸣飞,来自英特尔公司,接下来我向大家介绍一下Tachyon.我事先想了解一下大家有没有听说过Tachyon,或者是对Tachyon有没有一些了解?对Spark呢? 首先做一个介绍,我来自英特尔的大数据团队,我们团队主要是致力于各种大数据的软件开发以及这些软件在工业界的推广和应用,我所在的团队主要负责Spark及其软件栈的开发和推广.我们是国内最早参加Spark开发和推广的团队,我们在2012年就加入了Spark社区.在Spark和相关的项目中间投入了大量的人力,长期以来我

第九章 企业项目开发--分布式缓存Redis(1)

注意:本章代码将会建立在上一章的代码基础上,上一章链接<第八章 企业项目开发--分布式缓存memcached> 1.为什么用Redis 1.1.为什么用分布式缓存(或者说本地缓存存在的问题)? 见<第八章 企业项目开发--分布式缓存memcached> 1.2.有了memcached,为什么还要用redis? 见<第一章 常用的缓存技术> 2.代码实现 2.1.ssmm0 pom.xml 只在dev环境下添加了以下代码: <!-- redis:多台服务器支架用什么

企业项目开发--分布式缓存Redis

第九章 企业项目开发--分布式缓存Redis(1) 注意:本章代码将会建立在上一章的代码基础上,上一章链接<第八章 企业项目开发--分布式缓存memcached> 1.为什么用Redis 1.1.为什么用分布式缓存(或者说本地缓存存在的问题)? 见<第八章 企业项目开发--分布式缓存memcached> 1.2.有了memcached,为什么还要用redis? 见<第一章 常用的缓存技术> 2.代码实现 2.1.ssmm0 pom.xml 只在dev环境下添加了以下代码

第十章 企业项目开发--分布式缓存Redis(2)

注意:本章代码是在上一章的基础上进行添加修改,上一章链接<第九章 企业项目开发--分布式缓存Redis(1)> 上一章说了ShardedJedisPool的创建过程,以及redis五种数据结构的第一种String类型的常用缓存操作方法.下面说余下的四种: list(有序列表) set(无序集合) sorted set(有序集合) hash 1.ssmm0-cache 1.1.RedisListUtil(有序列表工具类) 1 package com.xxx.cache.redis; 2 3 im

分布式存储系统之元数据管理的思考

在使用和设计分布式存储系统时,非常重要的一个环节是数据寻址,即定位一个key的数据副本存放在哪个机器(甚至哪块磁盘):目前有几种常用的解决方案:中心节点管理元数据,分布式管理元数据,无元数据设计:本文结合自身经验谈谈三种方案的特点: 1.中心节点管理元数据:在设计分布式(存储)系统时,使用中心节点是非常简介.清晰地一种方案,中心节点通常兼具元数据存储与查询.集群节点状态管理.决策制定与任务下发等功能: 优点: A.由于其元数据集中式管理的特点,可以方便的处理集群运维管理的统计分析类需求: B.

可软件定义的存储逻辑二——Energy适应性的分布式存储系统

这个论文[3]提出了一个灵活的.可扩展的分布式存储系统,给它取名字flexStore.这个分布式存储系统可以非常好的适应数据中心中不停变化的能源,给去重的虚拟机磁盘IO存取带来很好的性能.研究人员研究并提出了一种智能的控制来对付数据中心供电的限制,因为有可能存储阵列的节点密度增加了,也有可能绿色能源和传统能源混合一起给数据中心供电.在这个存储框架中最重要的一个部件就是处于框架当中的策略引擎(policy engine),他是一个软件层,给应用程序提供自定义性能需求的接口,当然也提供能源相关的策略

大规模分布式存储系统原理解析与架构实战

始读于2014年5月31日兔家中,前三章完成于2014年6月10日22:21:41 后几张是讲一些具体产品的内容,对于每一个产品,都需要确实的使用和经验,以后需要的时候再研究不迟,技术永远在使用中进步更大. 以前对存储尤其是分布式存储的整体知识体系不是太清楚,只是片段式的知道一些理论,通过此书的学习,对分布式存储的原理将豁然开朗,不管是理论的还是后面几章讲述的具体产品,都能做到知其然知其所以然.另外,书中对Paxos协议也进行了深入介绍,理解此协议对时下流行的去中心化将有"夫子言之,于我心有戚戚

一、分布式存储系统概念与分类

分布式存储系统概念: 大量普通PC服务器通过互联网,对外作为一个整体存储服务. 特性:可扩展(随着集群的增加,系统的性能呈线性增长); 低成本(系统的自动容错.自动均衡机制使其可以构建在普通的PC上); 高性能(针对单台服务器还是整个集群,都要求系统具备高性能): 易用(提供易用的接口,具备完善的监控.运维工具,能方便地与其他系统集成). 分类: