前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >GFS分布式文件存储系统

GFS分布式文件存储系统

作者头像
全栈程序员站长
发布于 2022-08-23 13:34:10
发布于 2022-08-23 13:34:10
2K00
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

一 GlusterFS概述

GlusterFS是开源的分布式文件系统,由存储服务器、客户端以及NFS/Samba存储网关组成的无元数据服务

二 GlusterFS工作原理

  • 扩展性和高性能
  • 高可用性
  • 全局统─命名空间
  • 弹性卷管理
  • 基于标准协议RDMA or TCP/IP

弹性HASH算法 通过HASH算法得到一个32位的整数 划分为N个连续的子空间,每个空间对应一个Brick弹性

HASH算法的优点

  • 保证数据平均分布在每一个Brick中
  • 解决了对元数据服务器的依赖,进而解决了单点故障以及访问瓶颈

三 GlusterFS卷类型

3.1 分布式卷

没有对文件进行分块处理 通过扩展文件属性保存HASH值 支持的底层文件系统有EXT3、EXT4、ZFS、XFS等

分布式卷的特点

  • 文件分布在不同的服务器,不具备冗余性更容易和廉价地扩展卷的大小
  • 单点故障会造成数据丢失
  • 依赖底层的数据保护

创建分布式卷 gluster volume create dis-volume server1:/dir1 server2:/dir2server3:/dir3

3.2 条带卷

  • 根据偏移量将文件分成N块 (N个条带节点),轮询的存储在每个Brick Server节点
  • 存储大文件时,性能尤为突出
  • 不具备冗余性,类似Raid0

条带卷的特点

  • 数据被分割成更小块分布到块服务器群中的不同条带区
  • 分布减少了负载且更小的文件加速了存取的速度
  • 没有数据冗余

创建条带卷 创建了一个名为Stripe-volume的条带卷,文件将被分块轮询的存储在Server1:/dir1和Server2:/dir2两个Brick中

gluster volume create stripe-volume stripe 2 transport tcp server1:/dir1 server2:/dir2

3.3 复制卷

同一文件保存一份或多份副本 因为要保存副本,所以磁盘利用率较低 若多个节点上的存储空间不一致,将按照木桶效应取最低节点的容量作为该卷的总容量

复制卷的特点

  • 卷中所有的服务器均保存一个完整的副本
  • 卷的副本数量可由客户创建的时候决定
  • 至少有两个块服务器或更多服务器
  • 具备冗余性

创建复制卷: 创建名为rep-volume的复制卷,文件将同时存储两个副本,分别在Server1:/dir1和Server2:/dir2两个Brick中 gluster volume create rep-volume replica 2 transport tcp server1:/dir1 server2:/dir2

3.4 分布式条带卷

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

创建分布式条带卷: 创建了名为dis-stripe的分布式条带卷,配置分布式的条带卷时,卷中Brick所包含的存储服务器数必须是条带数的倍数(>=2倍)

gluster volume create dis-stripe stripe 2 transport tcp server1:/dir1server2:/dir2 server3:/dir3 server4:)dir4

3.5 分布式复制卷

兼顾分布式卷和复制卷的功能 用于需要冗余的情况

创建分布式复制卷 创建名为dis-rep的分布式条带卷,配置分布式复制卷时,卷中Brick所包含的存储服务器数必须是条带数的倍数(>=2倍) gluster volume create dis-rep replica 2 transport tcp server1:/dir1 server2:/dir2 server3:/dir3 server4:/dir4

四 GlusterFS案例部署

4.1 实验环境

操作系统

IP

主机名

硬盘数量

centos 7.4

20.0.0.100

node1

sdb:20G sdc:20G sdd:20G sde:20G

centos 7.4

20.0.0.12

node2

sdb:20G sdc:20G sdd:20G sde:20G

centos 7.4

20.0.0.27

node3

sdb:20G sdc:20G sdd:20G sde:20G

centos 7.4

20.0.0.30

node4

sdb:20G sdc:20G sdd:20G sde:20G

centos 7.4

20.0.0.10

node5-client

sdb:20G sdc:20G sdd:20G sde:20G

4.2 关闭防火墙与selinux

各节点关闭防火墙与核心防护

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@node1 ~]# systemctl stop firewalld
[root@node1 ~]# systemctl disable firewalld

[root@node1 ~]# setenforce 0

4.3 配置hosts文件

4台节点分别修改主机名

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
hostnamectl set-hostname node1
hostnamectl set-hostname node2
hostnamectl set-hostname node3
hostnamectl set-hostname node4

4台节点分别做地址映射

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vim /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
20.0.0.100  node1
20.0.0.12   node2
20.0.0.27   node3
20.0.0.30   node4

4.4 磁盘格式化与挂载

磁盘格式化与挂载脚本 vim disk.sh

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#! /bin/bash
echo "查找到的可创建磁盘列表"
fdisk -l | grep 'Disk /dev/sd[b-z]'
echo "=============================="
PS3="chose which disk you want to create:"
select W in `ls /dev/sd*|grep -o 'sd[b-z]'|uniq` quit
do
        case $W in
        sda)
            fdisk -l /dev/sda
            break;;
        sd[b-z])
             echo "n p w" | fdisk /dev/$W
        mkfs.xfs -i size=512 /dev/${W}"1" &>/dev/null
        mkdir -p /data/${W}"1" &>/dev/null
        echo -e "/dev/${W}"1" /data/${W}"1" xfs defaults 0 0\n" >> /etc/fstab
        mount -a &>/dev/null
        break;;
        quit)
        break;;
        *)
        echo "wrong disk,plwase chesk again";;
        esac
done

复制脚本到其他节点

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@node1 ~]# scp disk.sh root@20.0.0.12:/root
[root@node1 ~]# scp disk.sh root@20.0.0.27:/root
[root@node1 ~]# scp disk.sh root@20.0.0.30:/root

4.5 安装软件

4.5.1 共享Windows系统文件夹gfsrepo

1.文件共享添加everyone用户指定读取权限

2.设置本地策略secpol.msc

3:网络和共享中心—–>共享选项—–>把所有共享选项设置为允许

4. 控制面板—->程序—-> 开启SMB支持

4.5.2 查看共享文件夹

smbclient -L //192.168.100.2/

4.5.3 挂载共享文件夹

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mkdir /abc
mount.cifs //192.168.100.2/gfsrepo /abc
回车

4.5.4 设置本地源仓库

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vi /etc/yum.repos.d/GLFS.repo
[GLFS]
name=glfs
baseurl=file:///abc
gpgcheck=0
enabled=1
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd /etc/yum.repo.d/
mkdir bak
mv C* bak

4.5.5 安装软件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma

启动软件
systemctl start glusterd.service
systemctl enable glusterd.service
systemctl status glusterd.service

4.5.6 时间同步

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ntpdate ntp1.aliyun.com

4.6 添加节点

添加存储信任池,只需要在一个节点上添加即可

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
gluster peer probe node2
gluster peer probe node3
gluster peer probe node4

4.7 查看集群状态

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
gluster peer status

4.8 卷的创建

创建分布式卷

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
gluster volume create dis-vol node1:/data/sdb1 node2:/data/sdb1 force 

查看分布式卷

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
gluster volume info dis-vol

创建条带卷

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@node1 yum.repos.d]# gluster volume create stripe-vol stripe 2 node1:/data/sdc1 node2:/data/sdc1 force

查看条带卷

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
gluster volume info stripe-vol

查看卷列表

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
gluster volume list

创建复制卷

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@node1 yum.repos.d]# gluster volume create rep-vol replica 2 node3:/data/sdb1 node4:/data/sdb1 force

开启复制卷

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
gluster volumn start rep-vol

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/139833.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年5月7,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
ucoreOS_lab5 实验报告
lab5 会依赖 lab1~lab4 ,我们需要把做的 lab1~lab4 的代码填到 lab5 中缺失的位置上面。练习 0 就是一个工具的利用。这里我使用的是 Linux 下的系统已预装好的 Meld Diff Viewer 工具。和 lab4 操作流程一样,我们只需要将已经完成的 lab1~lab4 与待完成的 lab5 (由于 lab5 是基于 lab1~lab4 基础上完成的,所以这里只需要导入 lab4 )分别导入进来,然后点击 compare 就行了。
Angel_Kitty
2019/08/05
1.6K0
ucoreOS_lab5 实验报告
ucore-lab3
这时就需要缺页处理程序来处理,cpu会把产生异常的线性地址存储到lab2里提到过的cr2寄存器中,并且把页访问异常的错误码存放在中断栈中。
Heeler-Deer
2023/02/22
5710
ucore-lab3
ucoreOS_lab2 实验报告
lab2 会依赖 lab1 ,我们需要把做的 lab1 的代码填到 lab2 中缺失的位置上面。练习 0 就是一个工具的利用。这里我使用的是 Linux 下的系统已预装好的 Meld Diff Viewer 工具。具体操作流程如下图所示:
Angel_Kitty
2019/08/05
1.5K0
ucoreOS_lab2 实验报告
ucore-lab4
alloc_proc函数(位于kern/process/proc.c中)负责分配并返回一个新的struct proc_struct结构,用于存储新建立的内核线程的管理信息。ucore需要对这个结构进行最基本的初始化,你需要完成这个初始化过程。
Heeler-Deer
2023/03/10
5530
ucore-lab4
ucoreOS_lab3 实验报告
lab3 会依赖 lab1 和 lab2,我们需要把做的 lab1 和 lab2 的代码填到 lab3 中缺失的位置上面。练习 0 就是一个工具的利用。这里我使用的是 Linux 下的系统已预装好的 Meld Diff Viewer 工具。和 lab2 操作流程一样,我们只需要将已经完成的 lab1 和 lab2 与待完成的 lab3 (由于 lab2 是基于 lab1 基础上完成的,所以这里只需要导入 lab2 )分别导入进来,然后点击 compare 就行了。
Angel_Kitty
2019/08/05
1.5K0
ucoreOS_lab3 实验报告
ucore-lab2
最差匹配找不小于n的最大空闲分区。可以避免出现太多小碎片,但外部碎片较多,释放慢。
Heeler-Deer
2023/03/10
6790
ucore-lab2
ucoreOS_lab4 实验报告
lab4 会依赖 lab1、lab2 和 lab3,我们需要把做的 lab1、lab2 和 lab3 的代码填到 lab4 中缺失的位置上面。练习 0 就是一个工具的利用。这里我使用的是 Linux 下的系统已预装好的 Meld Diff Viewer 工具。和 lab3 操作流程一样,我们只需要将已经完成的 lab1、lab2 和 lab3 与待完成的 lab4 (由于 lab4 是基于 lab1、lab2、lab3 基础上完成的,所以这里只需要导入 lab3 )分别导入进来,然后点击 compare 就行了。
Angel_Kitty
2019/08/05
1.4K0
ucoreOS_lab4 实验报告
ucoreOS_lab8 实验报告
lab8 会依赖 lab1~lab7 ,我们需要把做的 lab1~lab7 的代码填到 lab8 中缺失的位置上面。练习 0 就是一个工具的利用。这里我使用的是 Linux 下的系统已预装好的 Meld Diff Viewer 工具。和 lab6 操作流程一样,我们只需要将已经完成的 lab1~lab7 与待完成的 lab7 (由于 lab8 是基于 lab1~lab7 基础上完成的,所以这里只需要导入 lab7 )分别导入进来,然后点击 compare 就行了。
Angel_Kitty
2019/08/05
9520
ucoreOS_lab8 实验报告
MIT 6.828 操作系统工程 lab4BC 笔记
这里是我实现的完整代码仓库,也包含其他笔记等等:https://github.com/yunwei37/6.828-2018-labs
云微
2023/02/24
4820
ucoreOS_lab7 实验报告
lab7 会依赖 lab1~lab6 ,我们需要把做的 lab1~lab6 的代码填到 lab7 中缺失的位置上面。练习 0 就是一个工具的利用。这里我使用的是 Linux 下的系统已预装好的 Meld Diff Viewer 工具。和 lab6 操作流程一样,我们只需要将已经完成的 lab1~lab6 与待完成的 lab7 (由于 lab7 是基于 lab1~lab6 基础上完成的,所以这里只需要导入 lab6 )分别导入进来,然后点击 compare 就行了。
Angel_Kitty
2019/08/05
1.6K0
ucoreOS_lab7 实验报告
linux内核写时复制机制源代码解读
韩传华,就职于国内一家半导体公司,主要从事linux相关系统软件开发工作,负责Soc芯片BringUp及系统软件开发,乐于分享喜欢学习,喜欢专研Linux内核源代码。
Linux阅码场
2020/09/01
4.9K0
xv6(17) 进程三:代码部分
本文接着上文深入理解进程之数据结构篇来讲述有关进程的一些操作,主要就是创建,调度切换,加载程序,休眠唤醒,等待退出等等,一个一个来看
rand_cs
2023/12/07
4560
[mit6.s081] 笔记 Lab10: Mmap | 文件内存映射
实现 *nix 系统调用 mmap 的简单版:支持将文件映射到一片用户虚拟内存区域内,并且支持将对其的修改写回磁盘。
Miigon
2022/10/27
1.6K0
[mit6.s081] 笔记 Lab10: Mmap | 文件内存映射
MIT 6.S081 学习记录(1)
记录一下 MIT 6.S081 的学习过程。主要是写 Lab 的经历吧,知识相关的笔记就不写了。
Clouder0
2023/02/03
7230
linux内核进程创建fork源码解析
    平时写过多进程多线程程序,比如使用linux的系统调用fork创建子进程和glibc中的nptl包里的pthread_create创建线程,甚至在java里使用Thread类创建线程等,虽然使用问题不大,但需要知道底层原理。这次在自己写操作系统的时候,看了一遍linux内核的进程创建过程。算是有了比较深入的理解。
用户4415180
2022/06/23
8.9K0
linux内核进程创建fork源码解析
[mit6.s081] 笔记 Lab6: Copy-on-write fork | fork 懒拷贝
COW fork() creates just a pagetable for the child, with PTEs for user memory pointing to the parent’s physical pages. COW fork() marks all the user PTEs in both parent and child as not writable. When either process tries to write one of these COW pages, the CPU will force a page fault. The kernel page-fault handler detects this case, allocates a page of physical memory for the faulting process, copies the original page into the new page, and modifies the relevant PTE in the faulting process to refer to the new page, this time with the PTE marked writeable. When the page fault handler returns, the user process will be able to write its copy of the page.
Miigon
2022/10/27
8340
MIT 6.828 操作系统工程 Lab5: File system, Spawn and Shell 笔记
实际上 lab5 可能是最简单的一个 lab 了(绝大多数的代码都已经写好了,就一点点完形填空要做)
云微
2023/02/24
6790
MIT 操作系统实验 MIT JOS lab2
首先把内存分布理清楚,由/boot/main.c可知这里把kernel的img的ELF header读入到物理地址0x10000处
全栈程序员站长
2022/07/06
5660
MIT 操作系统实验 MIT JOS lab2
6.S081/6.828: 10 Lab mmap
本实验实现mmap和munmap系统调用来更好的控制进程地址空间,可以向数组那样读写文件,写的数据放在buffer cache可以被其他进程所看到。
冰寒火
2022/12/02
4450
华中科技大学OS实验解析(Lab2)
版权归华中科技大学操作系统团队所有,下面是许可证书,本文档是对https://gitee.com/hustos/pke-doc的部分修改和解释.
用户7267083
2022/12/08
1.8K1
相关推荐
ucoreOS_lab5 实验报告
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验