文章目录
- 一、GlusterFS概述
- GlusterFS的简介
- GlusterFS的特点
- GlusterFS的相关用语
- 模块化堆栈式架构
- 二、GlusterFS工作原理
-
- 三、GlusterFS的卷类型
-
- 四、部署GlusterFS卷
- 部署环境
- 部署过程
- 规划创建如下卷
- 查看安装的glusterfs版本
- 客户端配置
- 创建分布式卷
- 创建复制卷
- 创建分布式复制卷
- 破坏测试
- 访问控制
一、GlusterFS概述
GlusterFS的简介
Glusterfs是一个开源的分布式文件系统,是Scale存储的核心,能够处理千数量级的客户端.在传统的解决 方案中Glusterfs能够灵活的结合物理的,虚拟的和云资源去体现高可用和企业级的性能存储。
Glusterfs通过TCP/IP或InfiniBand RDMA网络链接将客户端的存储资块源聚集在一起,使用单一的全局命名空间来管理数据,磁盘和内存资源。
Glusterfs基于堆叠的用户空间设计,可以为不同的工作负载提供高优的性能。
GlusterFS的特点
-
扩展性和高性能
GlusterFS利用双重特性来提供几TB至数PB的高扩展存储解决方案。Scale-Out架构允许通过简单地增加资源来提高存储容量和性能,磁盘、计算和I/O资源都可以独立增加,支持10GbE和InfiniBand等高速网络互联。Gluster弹性哈希(Elastic Hash)解除了GlusterFS对元数据服务器的需求,消除了单点故障和性能瓶颈,真正实现了并行化数据访问。
-
高可用性
GlusterFS可以对文件进行自动复制,如镜像或多次复制,从而确保数据总是可以访问,甚至是在硬件故障的情况下也能正常访问。自我修复功能能够把数据恢复到正确的状态,而且修复是以增量的方式在后台执行,几乎不会产生性能负载。GlusterFS没有设计自己的私有数据文件格式,而是采用操作系统中主流标准的磁盘文件系统(如EXT3、ZFS)来存储文件,因此数据可以使用各种标准工具进行复制和访问。
-
全局统一命名空间
全局统一命名空间将磁盘和内存资源聚集成一个单一的虚拟存储池,对上层用户和应用屏蔽了底层的物理硬件。存储资源可以根据需要在虚拟存储池中进行弹性扩展,比如扩容或收缩。当存储虚拟机映像时,存储的虚拟映像文件没有数量限制,成千虚拟机均通过单一挂载点进行数据共享。虚拟机I/O可在命名空间内的所有服务器上自动进行负载均衡,消除了SAN环境中经常发生的访问热点和性能瓶颈问题。
-
弹性卷管理
数据储存在逻辑卷中,逻辑卷可以从虚拟化的物理存储池进行独立逻辑划分而得到。存储服务器可以在线进行增加和移除,不会导致应用中断。逻辑卷可以在所有配置服务器中增长和缩减,可以在不同服务器迁移进行容量均衡,或者增加和移除系统,这些操作都可在线进行。文件系统配置更改也可以实时在线进行并应用,从而可以适应工作负载条件变化或在线性能调优。
-
基于标准协议
Gluster存储服务支持NFS, CIFS, HTTP, FTP以及Gluster原生协议,完全与POSIX标准兼容。现有应用程序不需要作任何修改或使用专用API,就可以对Gluster中的数据进行访问。这在公有云环境中部署Gluster时非常有用,Gluster对云服务提供商专用API进行抽象,然后提供标准POSIX接口。
GlusterFS的相关用语
- Brick:GFS中的存储单元,通过是一个受信存储池中的服务器的一个导出目录。可以通过主机名和目录名来标识。
- Volume:一组bricks的逻辑集合(卷)
- FUSE:Filesystem Userspace是一个可加载的内核模块,其支持非特权用户创建自己的文件系统而不需要修改内核代码。通过在用户空间运行文件系统的代码通过FUSE代码与内核进行桥接。
- VFS:虚拟文件系统
- Glusterd:Gluster management daemon,要在trusted storage pool中所有的服务器上运行。
- Node:一个拥有若干brick的设备
- Client: 挂载了GFS卷的设备
- RDMA:远程直接内存访问,支持不通过双方的OS进行直接内存访问。
- RRDNS:round robin DNS是一种通过DNS轮转返回不同的设备以进行负载均衡的方法。
- Self-heal:用于后台运行检测复本卷中文件和目录的不一致性并解决这些不一致。
- Volfile:glusterfs进程的配置文件,通常位于/var/lib/glusterd/vols/volname。
模块化堆栈式架构
- 模块化、堆栈式的架构
- 通过对模块的组合,实现复杂的功能
二、GlusterFS工作原理
GlusterFS工作流程
弹性hash算法
- 通过hash算法得到一个32位的整数
- 划分为N个连续的子空间,每个空间对应一个Brick
- 弹性hash算法的优点:
- 保证数据平均分布在每一个Brick中
- 解决了对元数据服务器的依赖,进而解决了单点故障以及访问瓶颈
三、GlusterFS的卷类型
分布式卷
- 没有对文件进行分块处理
- 通过扩展文件属性保存hash值
- 支持的底层文件系统有ext4、zfs、xfs等
- 分布卷的特点:
文件分布在不同的服务器,不具备冗余性
可以灵活的扩展卷的大小
单点故障会造成数据丢失
依赖底层的数据保护 - 创建分布式卷
创建一个名为dis-vol的分布式卷,文件将根据hash分布在node1:/data/sdb node2:/data/sdb中
gluster volume create dis-vol node1:/data/sdb node2:/data/sdb force
条带卷
- 根据偏移量将文件分成N块(N个条带节点),轮询的存储在每个Brick Server节点
- 存储大文件时,性能尤为突出
- 不具备冗余性,类似Raid0
- 条带卷的特点:
数据被分割成更小块分布到块服务器中的不同条带区
分布减少了负载且更小的文件加速了存取的速度
没有数据冗余 - 创建条带卷
创建了一个名为stripe-vol的条带卷,文件将被分块轮询的存储在node1:/data/sdc node2:/data/sdc中
gluster volume create stripe-vol stripe 2 transport tcp node1:/data/sdc node2:/data/sdc
复制卷
- 同一个文件保存一份或多份副本
- 因为要保存副本,所以磁盘利用率较低
- 若多个节点上的存储空间不一致,将按照木桶效应取最低节点的容量作为该卷的总容量
- 复制卷的特点:
卷中所有的服务器均保存一个完整的副本
卷的副本数量可由客户创建的时候决定
至少有两个块服务器或更多服务器
具备冗余性 - 创建复制卷
创建名为rep-vol的复制卷,文件将同时存储两个副本,分别在node3:/data/sdb node4:/data/sdb两个Brick中
gluster volume create rep-vol replica 2 node3:/data/sdb node4:/data/sdb force
分布式条带卷
- 兼顾分布式卷和条带卷的功能
- 主要用于大文件访问处理
- 最少需要4台服务器
- 创建分布式条带卷
创建了名为dis-stripe的分布式条带卷,配置分布式的条带卷时,卷中Brick所包含的存储服务器数必须是条带数的倍数(>=2倍)
gluster volume create dis-rep replica 2 node1:/data/sde node2:/data/sde node3:/data/sde node4:/data/sde force
分布式复制卷
- 兼顾分布式卷和复制卷的功能
- 用于需要冗余的情况
- 创建分布式复制卷
创建名为dis-rep的分布式条带卷,配置分布式复制卷时,卷中Brick所包含的存储服务器数必须是条带数的倍数(>=2倍)
gluster volume create dis-rep replica 2 node1:/data/sde node2:/data/sde node3:/data/sde node4:/data/sde force
四、部署GlusterFS卷
部署环境
主机名 | 系统IP | 添加磁盘并格式化 | 每个磁盘挂载点 |
---|
node1 | 20.0.0.10 | /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 | /data/sdb /data/sdc /data/sdd /data/sde |
node2 | 20.0.0.20 | /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 | /data/sdb /data/sdc /data/sdd /data/sde |
node3 | 20.0.0.30 | /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 | /data/sdb /data/sdc /data/sdd /data/sde |
node4 | 20.0.0.40 | /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 | /data/sdb /data/sdc /data/sdd /data/sde |
client | 20.0.0.50 | | |
部署过程
为所有服务器添加4个新磁盘
所有主机:
[root@server1 ~]
[root@server1 ~]
[root@node1 ~]
[root@node1 ~]
导入GlusterFS源文件
[root@node1 ~]
[root@node1 opt]
所有node:
[root@node1 ~]
[root@node1 ~]
[root@node1 ~]
Created symlink from /etc/systemd/system/multi-user.target.wants/glusterd.service to /usr/lib/systemd/system/glusterd.service
[root@node1 ~]
[root@node1 ~]
17 Nov 11:28:10 ntpdate[13364]: step time server 120.25.115.20 offset -0.878207 sec
[root@node1 ~]
2020年 11月 17日 星期二 11:29:38 CST
每个节点添加4块磁盘,每块20G,格式化后挂载
采用脚本如下
for i in {b,c,d,e}
do
echo "n
p
w" | fdisk /dev/sd$i
mkdir -p /data/sd$i
mkfs.xfs /dev/sd${i}1
cat>>/etc/fstab<<EOF
/dev/sd${i}1 /data/sd$i xfs defaults 0 0
EOF
done
mount -a
[root@node1 ~]# vi /etc/hosts
node1:
[root@node1 ~]
peer probe: success.
[root@node1 ~]
peer probe: success.
[root@node1 ~]
peer probe: success.
[root@node1 ~]
Number of Peers: 3
Hostname: node2
Uuid: 01f72840-cd7c-48af-8db3-f6a0e8553113
State: Peer in Cluster (Connected)
Hostname: node3
Uuid: 8fa1e785-6b53-45f4-9a13-da0199cb0a59
State: Peer in Cluster (Connected)
Hostname: node4
Uuid: d4831719-53b9-4389-95e3-43fbe588f744
State: Peer in Cluster (Connected)
规划创建如下卷
卷名称 | 卷类型 | 空间大小/GB | Brick |
---|
dis-vol | 分布式卷 | 40 | node1:/data/sdb;node2:/data/sdb; |
stripe-vol | 条带卷 | 40 | node1:/data/sdc;node2:/data/sdc; |
rep-vol | 复制卷 | 20 | node3:/data/sdb;node4:/data/sdb; |
dis-stripe | 分布式条带卷 | 80 | node1:/data/sdd;node2:/data/sdd;node3:/data/sdd;node4:/data/sdd; |
dis-rep | 分布式复制卷 | 40 | node1:/data/sde;node2:/data/sde;node3:/data/sde;node4:/data/sde; |
查看安装的glusterfs版本
[root@node1 ~]
glusterfs 3.10.2
Repository revision: git:
Copyright (c) 2006-2016 Red Hat, Inc. <https:
GlusterFS comes with ABSOLUTELY NO WARRANTY.
It is licensed to you under your choice of the GNU Lesser
General Public License, version 3 or any later version (LGPLv3
or later), or the GNU General Public License, version 2 (GPLv2),
in all cases as published by the Free Software Foundation.
客户端配置
[root@client ~]
14.0.0.10 node1
14.0.0.20 node2
14.0.0.30 node3
14.0.0.40 node4
2.安装glusterfs软件
[root@client ~]
3.创建5个40M的文件
[root@client ~]
[root@client ~]
[root@client ~]
[root@client ~]
[root@client ~]
创建分布式卷
[root@node1 ~]
volume create: dis-vol: success: please start the volume to access data
[root@node1 ~]
Volume Name: dis-vol
Type: Distribute
Volume ID: 7336c53b-41da-4c1b-bafa-5be452c167b3
Status: Created
Snapshot Count: 0
Number of Bricks: 2
Transport-type: tcp
Bricks:
Brick1: node1:/data/sdb
Brick2: node2:/data/sdb
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
[root@node1 ~]
volume start: dis-vol: success
信息Status显示Started成功
- 客户端挂载分布式卷到/test/dis目录下,并将5个测试文件拷贝进去
[root@client ~]
[root@client ~]
[root@client ~]
[root@client ~]
文件系统 类型 容量 已用 可用 已用% 挂载点
……
node1:dis-vol fuse.glusterfs 10G 265M 9.8G 3% /hyc/dis
- 回到node1和node2节点中查看5个文件分布情况
[root@node1 ~]
总用量 40M
-rw-r
[root@node2 ~]
总用量 160M
-rw-r
-rw-r
-rw-r
-rw-r
创建复制卷
[root@node1 ~]
[root@node1 ~]
[root@node1 ~]
[root@client ~]
[root@client ~]
[root@client ~]
[root@client ~]
文件系统 类型 容量 已用 可用 已用% 挂载点
……
node1:rep-volu fuse.glusterfs 4.8G 21M 4.6G 1% /hyc/rep-vol
[root@node3 ~]
总用量 201M
-rw-r
-rw-r
-rw-r
-rw-r
-rw-r
[root@node4 ~]
总用量 201M
-rw-r
-rw-r
-rw-r
-rw-r
-rw-r
创建分布式复制卷
[root@node1 ~]
volume create: dis-rep: success: please start the volume to access data
[root@node1 ~]
volume start: dis-rep: success
- 客户端挂载分布式卷到/test/dis-rep目录下,并将5个测试文件拷贝进去
[root@client ~]
[root@client ~]
[root@client ~]
[root@client ~]
- 回到node1、node2、node3和node4节点中查看5个文件分布情况
[root@node1 ~]
总用量 40M
-rw-r
[root@node2 ~]
总用量 40M
-rw-r
[root@node3 ~]
总用量 160M
-rw-r
-rw-r
-rw-r
-rw-r
[root@node4 ~]
总用量 160M
-rw-r
-rw-r
-rw-r
-rw-r
破坏测试
- 将node2宕机掉模拟故障,查看客户端中挂载点中依然存在的文件
[root@node2 ~]
[root@node1 ~]
Number of Peers: 3
Hostname: node2
Uuid: 01f72840-cd7c-48af-8db3-f6a0e8553113
State: Peer in Cluster (Disconnected)
Hostname: node3
Uuid: 8fa1e785-6b53-45f4-9a13-da0199cb0a59
State: Peer in Cluster (Connected)
Hostname: node4
Uuid: d4831719-53b9-4389-95e3-43fbe588f744
State: Peer in Cluster (Connected)
[root@client ~]
总用量 200M
-rw-r
-rw-r
-rw-r
-rw-r
-rw-r
[root@client ~]
总用量 200M
-rw-r
-rw-r
-rw-r
-rw-r
-rw-r
[root@client ~]
总用量 201M
-rw-r
-rw-r
-rw-r
-rw-r
-rw-r
drwx
访问控制
[root@node1 ~]
volume set: success
[root@node1 ~]
volume set: success
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)