GlusterFS简介
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兼容。
总体架构
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
使用本地文件系统,因此存取效率并没有提高,相反会应为中间又加上了一层网络传输,效率反而降低了.另外本地存储设备的容量有限制,因此支持超大型文件会有一定的难度。
Replicated Volumes 复制卷(类似Raid 1)
类似于Raid1,文件同步的复制到多个brick上,具有容错能力,写性能下降,读性能提升(待测),Replicated模式,也称作AFR(Auto File Replicated),同一个文件在多个镜像存储节点上保存多份,每个节点上都具有相应的目录结构和文件。replica volume是容器存储中较为推崇的一种。
Distributed Replicated Volumes分布式复制卷
Brick server是镜像数的倍数,先组合分布式在组合成复制卷,也是最少需要4台服务器,这个多少组成分布和多少个副本数是自己创建的时候定义的。
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通。
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
创建集群:
我这里在node-100上执行,把node-101添加到集群中:
gluster peer probe node-101
这里如果报错:peer probe: failed: Probe returned with Transport endpoint is not connected
检查防火墙有没有关;能不能ping通hostname
如果想从集群中去除节点,可以执行如下命令,但该节点中不能存在卷中正在使用的brick。
gluster peer detach 节点名称
查看集群状态:
gluster peer status
创建复制卷,命令格式如下:
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
列出卷:
gluster volume list
启动这个卷:
gluster volume start app-data
查看卷信息:
gluster volume info app-data
打开GlusterFs磁盘限额,此处限制大小是10G,也可以不用设置:
gluster volume quota app-data enable
gluster volume quota app-data limit-usage / 10GB
查看这个卷的状态:
gluster volume status
Gluster Client端搭建
Glusterfs client
端有三种客户端使用方式:Native mount
,NFS
,Samba
此处使用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
设置开机自动挂载:
vi /etc/fstab
#增加如下内容
node-100:/app-data /gfs-share glusterfs defaults 0 0
测试
Gluster Client端执行:
cd /gfs-share
touch file{1..9}.txt
创建了9个文件:
去服务端查看:
ll /opt/brick/
有几点说明
- 服务端也可以将本地目录挂载到gluster的存储卷上。
- 不能直接对birck修改,client端不会生效
- 任意client端修改,其他client端和brick会自动修改