GlusterFS概述

GFS是一个可扩展的分布式文件系统,用于大型的、分布式的、对大量数据进行访问的应用。它运行于廉价的普通硬件上,并提供容错功能。它可以给大量的用户提供总体性能较高的服务。
开源的分布式文件系统;
由存储服务器、客户端以及 NFS/Samba 存储网关组成;

GlusterFS 特点:

扩展性和高性能;
高可用性;
全局统一命名空间;
弹性卷管理;
基于标准协议

模块化堆栈架构

模块化,堆栈式的结构
通过对模块的组合,实现复杂的功能

KVM+GFS分布式文件系统高可用群集

GlusterFS工作原理(流程)

KVM+GFS分布式文件系统高可用群集

弹性 HASH 算法:

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

弹性 HASH 算法的优点:

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

GlusterFS 的卷类型:

(1)分布式卷:

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

特点:

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

(2)条带卷:

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

特点:

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

(3)复制卷:

同一个文件保存一份或多分副本;
复制模式因为要保存副本,所以磁盘利用率较低;
多个节点上的存储空间不一致,那么将安装木桶效应取最低节点的容量作为该卷的总容量

特点:

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

(4)分布式条带卷:

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

(5)分布式复制卷:

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

原理:

KVM+GFS分布式文件系统高可用群集

实验环境

node1 192.168.13.128
node2 192.168.13.129
node3 192.168.13.130
node4 192.168.13.131
kvm    192.168.13.133

node节点服务器添加一块硬盘

KVM+GFS分布式文件系统高可用群集

kvm虚拟机上开启虚拟化功能

KVM+GFS分布式文件系统高可用群集

1,分别在node节点服务器和kvm服务器上配置本地hosts文件,安装必要的gluster软件

[root@localhost ~]# hostnamectl set-hostname node1
[root@localhost ~]# su
[root@localhost ~]# hostnamectl set-hostname kvm
[root@node1 ~]# vim /etc/hosts   ##修改本地解析文件
192.168.13.128 node1
192.168.13.129 node2
192.168.13.130 node3
192.168.13.131 node4
192.168.13.133 kvm
##所有服务器上关闭防火墙
[root@node1 ~]# systemctl stop firewalld.service   ##关闭防火墙
[root@node1 ~]# setenforce 0
##分别复制配置文件到所有服务器上
[root@node1 ~]# scp /etc/hosts root@192.168.13.129:/etc/hosts  
[root@node1 ~]# scp /etc/hosts root@192.168.13.130:/etc/hosts 
[root@node1 ~]# scp /etc/hosts root@192.168.13.131:/etc/hosts 
[root@node1 ~]# scp /etc/hosts root@192.168.13.133:/etc/hosts 
##在所有node节点服务器上挂载,修改yum配置文件
[root@node1 ~]# mkdir /gfs
[root@node1 ~]# mount.cifs //192.168.100.3/LNMP-C7 /gfs/  ##挂载
[root@node1 ~]# cd /etc/yum.repo.d/
[root@node1 yum.repos.d]# mkdir bak    ##创建备份目录
[root@node1 yum.repos.d]# mv CentOS-* bak/
[root@node1 yum.repos.d]# vim abc.repo  ##所有node节点都需要配置yum源
[abc]
name=abc
baseurl=file:///gfs/gfsrepo   ##挂载目录下的gfsrepo路径
gpgcheck=0
enabled=1
[root@node1 yum.repos.d]# yum clean all && yum makecache ##建立元数据缓存
[root@node1 yum.repos.d]# yum install -y glusterfs glusterfs-server gluster-fuse glusterfs-rdma
##安装必要的软件
[root@node1 yum.repos.d]# systemctl start glusterd   ##开启gluster服务
[root@node1 yum.repos.d]# systemctl enable glusterd  ##开机自启动
[root@node1 yum.repos.d]# ntpdate ntp1.aliyun.com   ##同步时间

2,利用磁盘分区脚本进行分区挂载(所有node节点服务器)

[root@node1 yum.repos.d]# cd /opt/ 
[root@node1 opt]# vim disk.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
[root@node1 opt]# chmod +x fdisk.sh   ##添加执行权限
[root@node1 opt]# ./fdisk.sh   ##执行脚本
[root@node1 opt]# df -hT  ##查看挂载信息

3,创建分布式复制卷

##添加存储信任池,只要在一台主机上添加其他三台节点即可
[root@node1 opt]# gluster peer probe node2 
[root@node1 opt]# gluster peer probe node3
[root@node1 opt]# gluster peer probe node4
[root@node1 opt]# gluster volume create models replica 2 node1:/data/sdb1 node2:/data/sdb1 node3:/data/sdb1 node4:/data/sdb1 force
##创建分布式复制卷
gluster volume create dis-vol node1:/data/sdb1 node2:/data/sdb1 force
//创建分布式卷
gluster volume create stripe-vol stripe 2 node1:/data/sdc1 node2:/data/sdc1 force
//创建条带卷
gluster volume create rep-vol replica 2 node3:/data/sdb1 node4:/data/sdb1 force
//创建复制卷
gluster volume create dis-stripe stripe 2 node1:/data/sdd1 node2:/data/sdd1 node3:/data/sdd1 node4:/data/sdd1 force
//创建分布式条带卷
[root@node1 opt]# gluster volume start models ##启动分布式复制卷

4,在kvm服务器上挂载创建好的分布式复制卷

[root@kvm ~]# mkdir /abc
[root@kvm ~]# mount.cifs //192.168.100.3/iOS /abc/
[root@kvm ~]# cp /abc/CentOS-7-x86_64-DVD-1708.iso /opt/ &  
##将centos7镜像复制到/opt/进行后台运行
[root@kvm ~]# cd /etc/yum.repo.d/
[root@kvm yum.repos.d]# mkdir bak    ##创建备份目录
[root@kvm yum.repos.d]# mv CentOS-* bak/
[root@kvm yum.repos.d]# scp -r root@192.168.13.128:/gfs/gfsrepo /  
##复制gfs源到根目录下
[root@kvm yum.repos.d]# vim abc.repo  ##所有node节点都需要配置yum源
[abc]
name=abc
baseurl=file:///gfsrepo   ##源文件的路径
gpgcheck=0
enabled=1
[root@kvm yum.repos.d]# umount /abc/  ##centos镜像复制完成后解挂载
[root@kvm yum.repos.d]# yum install -y glusterfs glusterfs-fuse  ##安装必要的软件
[root@kvm yum.repos.d]# mv bak/* ./   ##释放原有的yum源
[root@kvm yum.repos.d]# rm -rf bak/
[root@kvm yum.repos.d]# yum list    ##yum列表更新
[root@kvm yum.repos.d]# mkdir /kvmdata   ##创建挂载点
[root@kvm yum.repos.d]# mount.glusterfs node1:models /kvmdata 
##将分布式复制卷挂载到挂载点中
[root@kvm yum.repos.d]# df -hT  ##可以看出原来一共是160G现在是80G

5,在kvm服务器上部署虚拟化平台

[root@kvm ~]# yum groupinstall "GNOME Desktop" -y   ##桌面环境
yum install qemu-kvm -y   ##kvm内核
yum install qemu-kvm-tools -y ##调试工具
yum install virt-install -y  ##命令行工具
yum install qemu-img -y   ##组件,创建磁盘,启动虚拟机
yum install bridge-utils -y ##网络支持工具
yum install libvirt -y ##虚拟机管理工具
yum install virt-manager -y ##图形化管理虚拟机
[root@kvm ~]# egrep '(vmx|svm)' /proc/cpuinfo   ##看cpu是否支持
[root@kvm ~]# lsmod | grep kvm   ##检查kvm是否安装
[root@kvm ~]# systemctl start libvirtd   ##开启服务
[root@kvm ~]# systemctl status libvirtd
[root@kvm ~]# systemctl enable libvirtd  ##开启自启
[root@kvm ~]# cd /etc/sysconfig/network-scripts/
[root@kvm network-scripts]# vim ifcfg-ens33 
##末行添加
BRIDGE=br0
[root@kvm network-scripts]# cp -p ifcfg-ens33 ifcfg-br0  ##复制配置文件为桥接
[root@kvm network-scripts]# vim ifcfg-br0
TYPE=Bridge    ##桥接模式
BOOTPROTO=static  ##静态
NAME=br0     ##名字为br0
DEVICE=br0
IPADDR=192.168.13.133   ##ip地址
NETMASKE=255.255.255.0   ##子网掩码
GATEWAY=192.168.13.1   ##网关
[root@kvm network-scripts]# service network restart   ##重启网卡
[root@kvm network-scripts]# cd /kvmdata/  ##切换到GFS挂载点
[root@kvm kvmdata]# mkdir kgc_disk kgc_iso  ##创建文件系统目录及镜像目录
[root@kvm kvmdata]# cp /opt/CentOS-7-x86_64-DVD-1708.iso kgc_iso/ &
##将镜像文件复制到镜像目录中

6,用kvm的图形化界面进行操作

[root@kvm ~]# virt-manager 

KVM+GFS分布式文件系统高可用群集
KVM+GFS分布式文件系统高可用群集
KVM+GFS分布式文件系统高可用群集
KVM+GFS分布式文件系统高可用群集
KVM+GFS分布式文件系统高可用群集
KVM+GFS分布式文件系统高可用群集
KVM+GFS分布式文件系统高可用群集
KVM+GFS分布式文件系统高可用群集

7,查看node节点服务器磁盘上的信息

[root@node1 ~]# cd /data/sdb1/  ##分布在各个node节点服务器上
[root@node1 sdb1]# ls
kgc_disk  kgc_iso

谢谢阅读!