一、GlusterFS简介
GlusterFS(GNU ClusterFile System)是一种全对称的开源分布式文件系统,所谓全对称是指GlusterFS采用弹性哈希算法,没有中心节点,所有节点全部平等。GlusterFS配置方便,稳定性好,可轻松达到PB级容量,数千个节点。
二、GlusterFS重要概念
birck:GlusterFS的基本元素,以节点服务器目录形式展现;
volume:多个brick的逻辑集合;
metadata:元数据,用于描述文件、目录等的信息;
self-heal:用于后台运行检测副本卷中文件和目录的不一致性并解决这些不一致;
FUSE:Filesystem Userspace是一个可加载的内核模块,其支持非特权用户创建自己的文件系统而不需要修改内核代码通过在用户空间运行文件系统的代码通过FUSE代码与内核进行桥接;
Gluster Server:数据存储服务器,即组成GlusterFS存储集群的节点;
Gluster Client:使用GlusterFS存储服务的服务器,如KVM、OpenStack、LB RealServer、HA node。
三、GlusterFS部署
1、环境准备
操作系统:CentOS Linux release 7.6.1810 (Core)
内核版本:3.10.0-957.el7.x86_64
关闭防火墙、关闭selinux,hostname能互相解析
主机:192.168.242.128 node-128
主机:192.168.242.129 node-129
2、软件包安装(两台都执行)
# yum -y install centos-release-gluster
# yum -y install glusterfs glusterfs-server glusterfs-fuse
如果是客户端只需要 glusterfs glusterfs-fuse即可.
3、创建集群
分别启动glusterd服务(并添加开机自启动):
# systemctl start glusterd
# systemctl enable glusterd
# systemctl status glusterd
创建集群(任意节点上执行一下操作,向集群中添加节点):
我这是在node-128执行,将node-129加入到集群中
[root@node- ~]# gluster peer probe node-
peer probe: success.
[root@node- ~]#
如果想从集群中去除节点,可以执行如下命令,但该节点中不能存在卷中正在使用的brick。
gluster peer detach 节点名称
查看集群状态:
[root@node- ~]# gluster peer status
Number of Peers: Hostname: node-
Uuid: 092883d5-df69-42d0-b3d1-c7146469c76b
State: Peer in Cluster (Connected)
创建分布式卷,命令格式如下:
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 /opt/brick
创建2副本的复制卷
[root@node- ~]# gluster volume create app-data replica node-:/opt/brick node-:/opt/brick force
volume create: app-data: success: please start the volume to access data
#列出卷
[root@node- ~]# gluster volume list
app-data
启动这个卷:
[root@node- ~]# gluster volume start app-data
volume start: app-data: success
[root@node- ~]#
# 查看卷信息
[root@node- ~]# gluster volume info app-data Volume Name: app-data
Type: Replicate
Volume ID: cced03e1-e40a-4f67-ac98-101c5bb00ee5
Status: Started
Snapshot Count:
Number of Bricks: x =
Transport-type: tcp
Bricks:
Brick1: node-:/opt/brick
Brick2: node-:/opt/brick
Options Reconfigured:
transport.address-family: inet
storage.fips-mode-rchecksum: on
nfs.disable: on
performance.client-io-threads: off
[root@node- ~]#
#打开GlusterFs磁盘限额,此处限制大小是10G,也可以不用设置.
[root@node- ~]# gluster volume quota app-data enable
volume quota : success [root@node- ~]# gluster volume quota app-data limit-usage / 10GB
volume quota : success
[root@node- ~]#
查看这个卷的信息:
[root@node- ~]# gluster volume status
Status of volume: app-data
Gluster process TCP Port RDMA Port Online Pid
------------------------------------------------------------------------------
Brick node-:/opt/brick Y
Brick node-:/opt/brick Y
Self-heal Daemon on localhost N/A N/A Y
Quota Daemon on localhost N/A N/A Y
Self-heal Daemon on node- N/A N/A Y
Quota Daemon on node- N/A N/A Y
配置客户端使用卷
Glusterfs client端有三种客户端使用方式:Native mount,NFS,Samba
---此处使用Native mount挂载gluster volume 到node-128和node-129节点的本地目录/gfs-share下:
#mount -t glusterfs node-:app-data /gfs-share
查看挂载情况:
[root@node- ~]# df -h | grep gfs-share
node-:app-data 10G 10G % /gfs-share
设置开机自动挂载
vim /etc/fstab node-:/app-data /gfs-share glusterfs defaults
使用mount -a检测并挂载测试
[root@node- ~]#cd /gfs-share
[root@node- ~]#touch file{..}.txt #分别在node- 和node-129上验证,发现在两个节点的brick里面都存在9个测试文件: [root@node- ~]# ls -l /gfs-share/ | grep -v total | wc -l [root@node- ~]# [root@node- ~]# ls -l /gfs-share/ | grep -v total | wc -l [root@node- ~]#
至此,GFS复制卷创建完成,gfs有多种卷方式,以后使用在研究...
参考文档: