• Linux:搭建GlusterFS文件系统


    GlusterFS简介

    官网地址:https://www.gluster.org

    GlusterFS 是近年兴起的一个高性能开源分布式文件系统,其目标是全局命名空间、分布式前端的高性能文件系统,目前已被 RedHat 看中,GlusterFS 具有高扩展、高可性、高性能、可横向扩展等特点,并且 GlusterFS 没有元数据服务器的设计,使其没有单点故障问题。

    重要概念

    下面是关于GlusterFS的一些重要概念:

    • birck:最基本的存储单元,表示为trusted storage pool中输出的目录,供客户端挂载用。
    • volume:一个卷。在逻辑上由N个bricks组成。
    • metadata:元数据,用于描述文件、目录等的信息;
    • self-heal:用于后台运行检测副本卷中文件和目录的不一致性并解决这些不一致;
    • FUSE:Unix-like OS上的可动态加载的模块,允许用户不用修改内核即可创建自己的文件系统。
    • Gluster Server:数据存储服务器,即组成GlusterFS存储集群的节点;
    • Gluster Client:使用GlusterFS存储服务的服务器,如KVM、OpenStack、LB RealServer、HA node。
    • POSIX: 一个标准,GlusterFS兼容。

    总体架构

    image-20211009145256828

    GlusterFS 的卷类型

    为了满足不同应用对高性能、高可用的需求,GlusterFS 支持多种卷,详细信息可见官方文档:https://docs.gluster.org/en/latest/Administrator-Guide/Setting-Up-Volumes/#creating-dispersed-volumes。

    下面简单介绍几种。

    distribute volume分布式卷(类似raid 0但是数据不分片)默认

    基于Hash算法将文件分布到所有的brick server上,只是单纯的扩大了磁盘空间,不具备冗余能力,数据丢了就丢了,由于distribute volume使用本地文件系统,因此存取效率并没有提高,相反会应为中间又加上了一层网络传输,效率反而降低了.另外本地存储设备的容量有限制,因此支持超大型文件会有一定的难度。

    image-20211009150630917

    Replicated Volumes 复制卷(类似Raid 1)

    类似于Raid1,文件同步的复制到多个brick上,具有容错能力,写性能下降,读性能提升(待测),Replicated模式,也称作AFR(Auto File Replicated),同一个文件在多个镜像存储节点上保存多份,每个节点上都具有相应的目录结构和文件。replica volume是容器存储中较为推崇的一种。

    image-20211009150823616

    Distributed Replicated Volumes分布式复制卷

    Brick server是镜像数的倍数,先组合分布式在组合成复制卷,也是最少需要4台服务器,这个多少组成分布和多少个副本数是自己创建的时候定义的。

    image-20211009151131308

    GlusterFS客户端常用命令

    命令 功能
    gluster peer probe 添加节点
    gluster peer detach 移除节点
    gluster volume create 创建卷
    gluster volume start $VOLUME_NAME 启动卷
    gluster volume stop $VOLUME_NAME 停止卷
    gluster volume delete $VOlUME_NAME 删除卷
    gluster volume quota enable 开启卷配额
    gluster volume quota disable 关闭卷配额
    gluster volume quota limitusage 设定卷配额

    搭建

    本文使用复制卷作为存储卷。如需要其他存储卷类型,请参考官方文档!!

    环境准备

    我这里准备三台Centos7服务器。

    ip hostname 作用
    192.168.1.100 node-100 Server
    192.168.1.101 node-101 Server
    192.168.1.102 node-102 Client

    关闭防火墙(三台服务器都要执行):

    systemctl stop firewalld
    systemctl disable firewalld
    

    设置主机名:

    hostnamectl set-hostname node-100  #192.168.1.100主机执行
    hostnamectl set-hostname node-101  #192.168.1.101主机执行
    hostnamectl set-hostname node-102  #192.168.1.102主机执行
    

    配置/etc/hosts:

    vi /etc/hosts
    
    #文件末尾添加如下内容
    192.168.1.100 node-100
    192.168.1.101 node-101
    192.168.1.102 node-102
    

    保存退出后,确保三台服务器互相ping hostname,都能ping通。

    image-20211009151841935

    Gluster Server端搭建

    node-100和node-101服务器执行:

    #软件安装
    yum -y install centos-release-gluster
    yum -y install glusterfs glusterfs-server glusterfs-fuse
    

    server端启动gluster服务:

    systemctl start glusterd
    systemctl enable glusterd
    systemctl enable glusterd
    

    image-20211009152127046

    创建集群:

    我这里在node-100上执行,把node-101添加到集群中:

    gluster peer probe node-101
    

    这里如果报错:peer probe: failed: Probe returned with Transport endpoint is not connected

    检查防火墙有没有关;能不能ping通hostname

    image-20211009152344183

    如果想从集群中去除节点,可以执行如下命令,但该节点中不能存在卷中正在使用的brick。

    gluster peer detach 节点名称
    

    查看集群状态:

    gluster peer status
    

    image-20211009152435822

    创建复制卷,命令格式如下:

    gluster volume create volume_name replica 2 node1:/data/br1 node2:/data/br1
    
    • volumn_name:卷名
    • node1:节点名
    • replica:文件保存的份数
    • /data/br1:可以理解为节点上的目录,这个目录最好是一个单独的分区(分区类型最好为逻辑卷的方式,这样易于操作系统级别的存储空间扩展),默认不能使用root分区进行创建卷,如需要root分区创建卷添加force参数

    作为示例,我这里使用/opt/brick目录做为单独分区的挂载目录。

    #两台服务器执行
    mkdir -p /opt/brick
    

    创建2副本的复制卷:

    gluster volume create app-data replica 2 node-100:/opt/brick node-101:/opt/brick force
    

    image-20211009152931931

    列出卷:

    gluster volume list
    

    image-20211009153003478

    启动这个卷:

    gluster volume start app-data
    

    image-20211009153036549

    查看卷信息:

    gluster volume info app-data
    

    image-20211009153109389

    打开GlusterFs磁盘限额,此处限制大小是10G,也可以不用设置

    gluster volume quota app-data enable
    gluster volume quota app-data limit-usage / 10GB
    

    查看这个卷的状态:

    gluster volume status
    

    image-20211009153235001

    Gluster Client端搭建

    Glusterfs client端有三种客户端使用方式:Native mountNFSSamba

    此处使用Native mount挂载gluster volume到node-100和node-101节点的本地目录/gfs-share下:

    node-102服务器执行:

    yum install glusterfs glusterfs-fuse attr -y
    mkdir -p /gfs-share
    mount -t glusterfs node-100:app-data /gfs-share
    

    查看挂载情况:

    df -h
    

    image-20211009153613030

    设置开机自动挂载:

    vi /etc/fstab
    
    #增加如下内容
    node-100:/app-data  /gfs-share glusterfs  defaults 0 0
    

    测试

    Gluster Client端执行:

    cd /gfs-share
    touch file{1..9}.txt
    

    创建了9个文件:

    image-20211009153855145

    去服务端查看:

    ll /opt/brick/
    

    image-20211009153942244

    有几点说明

    • 服务端也可以将本地目录挂载到gluster的存储卷上。
    • 不能直接对birck修改,client端不会生效
    • 任意client端修改,其他client端和brick会自动修改
  • 相关阅读:
    spring源码解析-ApplicationContext解析
    分布式系统的CAP理论
    Java常用设计模式详解1--单例模式
    mysql全方位知识大盘点
    重磅!微软发布 Visual Studio Online:Web 版 VS Code + 云开发环境
    知否知否,VS Code 不止开源
    webpack静态资源拷贝插件
    webpack 清理旧打包资源插件
    webpack 配置分离css插件
    webpack打包指定HTML的文件并引入指定的chunks
  • 原文地址:https://www.cnblogs.com/wwjj4811/p/15386067.html
Copyright © 2020-2023  润新知