GlusterFS 分布式存储 及 GlusterFS在Ubuntu 18.04/16.04上的源码部署

一、GlusterFS 概述;

概述:GlusterFS(Google File System)是一个开源的分布式文件系统,Gluster 借助 TCP/IP 网 络将存储资源分散存储在网络的不同节点,在通过汇聚为客户端提供统一的资源访问,在存 储方面具有很强大的横向扩展能力,通过扩展不同的节点可以支持 PB 级别的存储容量; Bit、Byte、KB、MB、GB、TB、PB、EB、ZB、YB、DB、NB

 

 

 

特点:

扩展性与高性能:通过 Scale-out 架构可以增加存储节点的方式来提高容量和性能(磁盘、 计算、I/O 资源都可以独立增加),Gluster 弹性哈希(Elastic Hash)解决了 Gluster 服务对元 数据服务器的依赖,Gluster 采用弹性哈希算法来确定数据在 chunk 节点中的分布情况,无 须元数据服务器,实现了存储的横向扩展,改善了元数据服务器节点的压力以及单点故障;

 

高可用性:GlusterFS 通过配置不同类型的卷,可以对数据进行自动复制(类似于 RAID1), 即使某节点故障,也不影响数据的访问;

通用性:GlusterFS 没有设置独立的私有数据文件系统,而是采用以往的 ext4、ext3 等,数 据可以通过传统的磁盘访问方式被客户端所访问;

弹性卷管理:GlusterFS 通过将数据存储在逻辑卷上,逻辑卷从逻辑存储池进行独立逻辑划 分,逻辑存储池可以在线进行增加和删除,不会导致业务中断,逻辑卷的数量可以根据实际 需求进行自行增加和缩减;

 

二、GlusterFS 存储架构;

 

 

 

专业术语:

Brick(存储块):存储池中节点对外提供存储服务的目录; Volume(逻辑卷):一个逻辑卷时一组 Brick 的集合,卷是数据存储的逻辑设备,类似 LVM 中的逻辑卷,大部分 GlusterFS 管理操作都是在逻辑卷上进行的; FUSE(用户空间文件系统):是一个内核模块,用户自行创建挂载的的文件系统; VFS(接口):内核空间对用户空间提供的访问磁盘的接口; Glusterd(后台管理进程):在存储集群中的每个节点上都要运行;

 

三、GlusterFS 工作原理; 数据访问程:

 

 

1. 首先是在客户端,用户通过 glusterfs 的 mount point 来读写数据, 对于用户来说, 集群 系统的存在对用户是完全透明的, 用户感觉不到是操作本地系统还是远端的集群系统。

2.  用户的这个操作被递交给 本地 linux 系统的 VFS 来处理。

3. VFS 将数据递交给 FUSE 内核文件系统:在启动 glusterfs 客户端以前, 需要想系统注册 一个实际的文件系统 FUSE,如上图所示,该文件系统与 ext3 在同一个层次上面,ext3 是对 实际的磁盘进行处理,而 fuse 文件系统则是将数据通过/dev/fuse 这个设备文件递交给了 glusterfs client 端。所以我们可以将 fuse 文件系统理解为一个代理。

4. 数据被 fuse 递交给 Glusterfs client 后,client 对数据进行一些指定的处理(所谓的指定, 是按照 client  配置文件据来进行的一系列处理, 我们在启动 glusterfs  client   时 需 要 指 定 这 个 文 件 , 其 默 认 位 置 :/etc/glusterfs/client.vol)。

5. 在 glusterfs client 的处理末端,通过网络将数据递交给 Glusterfs Server,并且将数据写入 到服务器所控制的存储设备上。

 

四、GlusterFS 卷的类型; 分布式卷、条带卷、复制卷、分布式条带卷、分布式复制卷、条带复制卷、分布式条带复 制卷;

1.  分布式卷

分布式卷是 GlusterFS 的默认卷,在创建卷时,默认选项是创建分布式卷。在该模式下,并 没有对文件进行分块处理,文件直接存储在某个 Server 节点上。由于使用本地文件系统, 所以存取效率并没有提高,反而会因为网络通信的原因而有所降低,另外支持超大型文件也 会有一定的难度,因为分布式卷不会对文件进行分块处理,一个文件要么在 Server1 上,要 么在 Serve2 上,不能分块同时存放在 Sever1 和 Server2 上;

 

 

特点:

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

创建方法:

[root@gfs ~]# gluster volume create dis-volume server1:/dir1 server2:/dir2 

Creation of dis -volume has been successful Please start the volume to access data

 

2.条带卷

Stripe 模式相当于 RAIDO,在该模式下,根据偏移量将文件分成 N 块,轮询地存储在每个 Brick Server 节点。节点把每个数据块都作为普通文件存入本地文件系统中,通过扩展属性记录总 块数(Stripe-count) 和每块的序号(Stripe-index),在配置时指定的条带数必须等于卷中 Brick  所包含的存储服务器数,在存储大文件时,性能尤为突出,但是不具备冗余性;

 

 

特点:

 

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

创建方法:

[root@gfs ~]# gluster volume create stripe-volume stripe 2 transport tcp server1:/dir1 server2:/dir2

create of Stripe -volume has been successful please start the volume to access data

 

3.复制卷

也称为 AFR(AutGilePepliatio)相当于 RAD1,即同一文件保存一份或多份副本。每个节点上 保存相同的内容和目录结构。复制模式因为要保存副本,所以磁盘利用率较低,复制卷时, 复制数必须等于卷中 Brick 所包含的存储服务器数,复制卷具备冗余性,即使一个节点损坏, 也不影响数据的正常使用;

 

特点:

卷中所有的服务器均保存一个完整的副本; 卷的副本数量可由客户创建的时候决定; 最少保证两个块服务器或更多服务器; 具备冗余效果;

创建方法:

[root@gfs ~]# gluster volume create rep-volume replica 2 transport tcp server1:/dir1 server2:/dir2

create of rep -volume has been successful please start the volume to access data

 

4.分布式条带卷 分布式条带卷兼顾分布式卷和条带卷的功能,可以理解成为大型的条带卷,主要用于大文件 访问处理,创建一个分布式条带,卷最少需要 4 台服务器;

 

 

创建方法:

[root@gfs ~]# gluster volume create dis-stripe stripe 2 transport tcp server1:/dir1 server2:/dir2 server3:/dir3 server4:/dir4

create of dis-stripe has been successful please start the volume to access data

上述命令创建了一个名为 dis-stripe 的分布式条带卷,配置分布式条带卷时,卷中 Brick 所包

含的存储服务器必须是条带数的倍数(大于等于 2 倍),如上述命令,Brick 的数量为 4,条 带数为 2;

 

5.分布式复制卷 分布式复制卷兼顾分布式卷和复制卷的功能,可以理解成为大型的复制卷,主要用于冗余的 场景下,创建一个分布式复制卷,最少需要 4 块 brick;

 

 

创建方法:

[root@gfs ~]# gluster volume create dis-rep replica 2 transport tcp server1:/dir1 server2:/dir2 server3:/dir3 server4:/dir4

create of dis-rep has been successful please start the volume to access data

 

6.条带复制卷

条带复制卷兼顾了条带卷和复制卷两者的优点,相当于 RADI 10,用于存储效率高,备份冗 余的场景下,创建条带复制卷,最少需要四个 brick;

 

创建方法:

[root@gfs ~]# gluster volume create test-volume stripe 2 replica 2 transport tcp server1:/dir1 server2:/dir2 server3:/dir3 server4:/dir4

create of test-volume has been successful please start the volume to access data

 

7.分布式条带复制卷 分布式条带复制卷将分布条带数据在复制卷集群。为了获得最佳效果,可以选择使用分布在 高并发的条带复制卷环境下并行访问非常大的文件和性能是至关重要的,至少需要8台服务器才能完成;

 

 

 

五、案例:搭建 Gluster 分布式文件系统; 案例环境:

 

系统类型

IP 地址

主机名

所需软件

Centos 7.4 1708 64bit

192.168.100.101

data1.linuxfan.cn

glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma

Centos 7.4 1708 64bit

192.168.100.102

data2.linuxfan.cn

glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma

Centos 7.4 1708 64bit

192.168.100.103

data3.linuxfan.cn

glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma

Centos 7.4 1708 64bit

192.168.100.104

client.linuxfan.cn

glusterfs glusterfs-fuse

 

案例步骤:

Ø 配置主机之间的解析(在此所有主机配置相同,在此只列举 data1 节点的配置);

Ø 在所有 data 节点上安装 GlusterFS(在此所有主机配置相同,在此只列举 data1 节点的 配置);

Ø 在 data1 节点上进行创建集群,其他节点会同步配置;

Ø 在多个 data 节点创建数据存储的位置;

 

Ø 在 data1 节点创建数据存储的卷(复制卷),其他节点会同步配置;

Ø 在 client 客户端节点上安装 gluster 客户端工具并测试挂载;

Ø client 客户端节点测试存放文件;

Ø 扩展:Gluster 的管理命令;

 

 

Ø 配置主机之间的解析(在此所有主机配置相同,在此只列举 data1 节点的配置);

[root@data1 ~]# cat <<END >>/etc/hosts 192.168.100.101 data1.linuxfan.cn

        1. data2.linuxfan.cn
        2. data3.linuxfan.cn
        3. client.linuxafn.cn END

[root@data1 ~]# ping data1.linuxfan.cn -c 2 ##ping 命令进行测试

PING data1.linuxfan.cn (192.168.100.101) 56(84) bytes of data.

64 bytes from data1.linuxfan.cn (192.168.100.101): icmp_seq=1 ttl=64 time=0.062 ms 64 bytes from data1.linuxfan.cn (192.168.100.101): icmp_seq=2 ttl=64 time=0.040 ms

 

Ø 在所有 data 节点上安装 GlusterFS(在此所有主机配置相同,在此只列举 data1 节点的 配置);

[root@data1 ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

[root@data1 ~]# yum -y install centos-release-gluster ## 安装 gluster  包的 

yum 源

[root@data1 ~]# yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma

[root@data1 ~]# systemctl start glusterd

[root@data1 ~]# systemctl enable glusterd

Created symlink from /etc/systemd/system/multi-user.target.wants/glusterd.service to

/usr/lib/systemd/system/glusterd.service. [root@data1 ~]# netstat -utpln |grep glu

tcp 0 0   0.0.0.0:24007 0.0.0.0:* LISTEN

1313/glusterd

[root@data1 ~]# netstat -utpln |grep rpc

 

tcp

0

 

0

0.0.0.0:111

 

 

0.0.0.0:*

LISTEN

1311/rpcbind

 

 

 

 

 

 

 

 

udp

 

0

 

 

0

0.0.0.0:111

 

0.0.0.0:*

1311/rpcbind

 

 

 

 

 

 

 

 

udp

 

0

 

 

0

0.0.0.0:634

 

0.0.0.0:*

1311/rpcbind

 

 

 

 

 

 

 

 

 

Ø  data1 节点上进行创建集群,其他节点会同步;

[root@data1 ~]# gluster peer probe  data1.linuxfan.cn ##添加本机节点 peer probe: success. Probe on localhost not needed

[root@data1 ~]# gluster peer probe data2.linuxfan.cn ##添加 data2 节点

 

peer probe: success.

[root@data1 ~]# gluster peer probe data3.linuxfan.cn ##添加 data3 节点 peer probe: success.

[root@data1 ~]# gluster peer status ##查看 gluster 集

群状态

Number of Peers: 2

 

Hostname: data2.linuxfan.cn

Uuid:  a452f7f4-7604-4d44-8b6a-f5178a41e308

State: Peer in Cluster (Connected)

 

Hostname: data3.linuxfan.cn

Uuid:  b08f1b68-3f2c-4076-8121-1ab17d1517e1

State: Peer in Cluster (Connected)

 

Ø 在多个 data 节点创建数据存储的位置;

[root@data1 ~]# mkdir /data [root@data1 ~]# gluster volume info No volumes present

 

Ø data1 节点创建数据存储的卷(复制卷),其他节点会同步配置;

[root@data1 ~]# gluster volume create rep-volume replica 3 transport tcp data1.linuxfan.cn:/data data2.linuxfan.cn:/data  data3.linuxfan.cn:/data force ##创建复制卷,名称如 上

volume create: rep-volume: success: please start the volume to access data [root@data1 ~]# gluster volume info

Volume Name: rep-volume Type: Replicate

Volume ID: ac59612b-e6ce-46ce-85a7-74262fb722b2 Status: Created

Snapshot Count: 0

Number of Bricks: 1 x 3 = 3 Transport-type: tcp

Bricks:

Brick1: data1.linuxfan.cn:/data Brick2: data2.linuxfan.cn:/data Brick3: data3.linuxfan.cn:/data Options Reconfigured: transport.address-family: inet nfs.disable: on performance.client-io-threads: off

[root@data1 ~]# gluster volume start rep-volume ##启动该卷

volume start: rep-volume: success

 

Ø  client 客户端节点上安装 gluster 客户端工具并测试挂载;

 

[root@client ~]# yum install centos-release-gluster -y

[root@client ~]# yum --enablerepo=centos-gluster*-test install glusterfs-server -y

[root@client ~]# systemctl start glusterd

[root@client ~]# mount -t glusterfs data1.linuxfan.cn:rep-volume /mnt/ 

[root@client ~]# ls /mnt/

[root@client ~]# df -hT |tail -1

data1.linuxfan.cn:rep-volume  fuse.glusterfs 19G 2.0G 17G 11% /mnt

 

Ø client 客户端节点测试存放文件;

[root@client ~]# touch /mnt/{1..10}.file

[root@client ~]# dd if=/dev/zero of=/mnt/1.txt bs=1G count=1 

[root@client ~]# ls /mnt/

10.file 1.file 1.txt 2.file 3.file 4.file 5.file 6.file 7.file 8.file 9.file 

[root@client ~]# du -sh /mnt/1.txt

1.0G /mnt/1.txt

 

 

 

扩展节点:gluster volume add-brick volume1 {data1,data2,data3}:/DS_2/   force

Ø 扩展:Gluster 的管理命令;

 

Gluster Gluster Gluster

peer status

peer probe name peer detach name

##查看所有的节点信息

##添加节点

##删除节点

Gluster Gluster

volume create xxx volume info

##创建卷

##查看卷信息

 

 

硬件要求:
建议所有机器做Raid5,而非直连盘
减少单块硬盘故障的维护成本
减少集群的维护成本,因为gluster会为每个挂载点启动一个服务进程
减少成本,如果是Raid1,加上至少2副本,则使用率仅为25%
单盘启动一个进程,会偶发单机个别进程停掉的问题
所有的机器不要放在一个交换机下
服务安装,所有节点均执行下述命令
yum -y install centos-release-gluster41
安装/etc/yum.repos.d/CentOS-Gluster-41.repo
yum -y install glusterfs-server
修改/etc/glusterfs/glusterd.vol进行选择性设置
option listen-port 24007
option base-port 49000
option max-port 49000
systemctl enable glusterd
systemctl start glusterd
systemctl status glusterd
/usr/lib/systemd/system/glusterd.service
/usr/lib/systemd/system/glusterfsd.service
/usr/lib/systemd/system/glusterfssharedstorage.service
mkdir -p /data0/nfs
mkdir -p /nfs
版本检查: gluster –version
配置文件检查:md5sum /etc/glusterfs/glusterd.vol
扩容机器,在任意一个部署了glusterfs的节点上,执行下面的命令
gluster peer probe 10.237.44.178
gluster peer probe 10.237.44.144
gluster peer probe 10.237.44.47
gluster peer status
注意:扩容的机器,需要在已有集群的节点上执行添加操作,而不能再新扩容的机器上
peer probe: failed: 10.160.108.4 is either already part of another cluster or having volumes configured
下线机器

gluster volume replace-brick nfs 10.237.47.82:/data0/nfs 10.237.44.114:/data0/nfs commit force
gluster peer detach 10.237.47.82
gluster peer status
创建一个卷

gluster volume create nfs replica 3 {10.237.44.178,10.237.44.144,10.237.44.47}:/data0/nfs
创建的卷类型是复制卷,还有其他类型,可以参考官网文档
副本数为2,可能会存在脑裂的问题
nfs这个文件夹不需要自己创建,当不存在的时候,系统会自动创建出来
报错:在根分区创建的nfs,因此系统会提示该风险,建议不要在系统分区上存放数据
volume create: testglustervol: failed: The brick 10.237.44.178:/data0/nfs/brick1 is being created in the root partition. It is recommended that you don’t use the system’s root partition for storage backend. Or use ‘force’ at the end of the command if you want to override this behavior.
报错:gluster建议使用子目录而非挂载点
volume create: nfs: failed: The brick 10.0.0.16:/data is a mount point. Please create a sub-directory under the mount point and use that as the brick directory. Or use ‘force’ at the end of the command if you want to override this behavior.
修改集群配置文件/etc/glusterfs/glusterd.vol

 

操作卷

启动卷:gluster volume start nfs
gluster对每个磁盘会启动一个进程,如果单机上有五块磁盘,那么就会启动五个进程
检查卷:gluster volume info volume1111
停止卷:gluster volume stop volume1111
删除卷:gluster volume delete volume1111
挂载卷

mount -t glusterfs vip:/nfs /nfs(此为推荐方式)
挂载点IP基于LB方式,确保服务的高可用性
mount -t glusterfs localhost:/nfs /nfs
端口默认为24007
mount -t glusterfs ip:/nfs /nfs
报错:mount gluster报错:unknown filesystem type ‘glusterfs’ ,直接安装glusterfs-fuse上去即可解决报错
需要这些软件:glusterfs-client-xlator,glusterfs-libs,glusterfs-fuse,glusterfs
扩容卷

gluster vol add-brick nfs {10.237.44.178,10.237.44.144,10.237.44.47}:/data1/nfs
报错:扩容需要按照3的倍数进行扩容
gluster vol add-brick nfs 10.237.44.178:/data1/nfs
volume add-brick: failed: Incorrect number of bricks supplied 1 with count 3
性能采集

开启性能采集:gluster volume profile volume1111 start
查看性能信息:gluster volume profile volume1111info
关闭性能采集:gluster volume profile volume1111 stop
垃圾回收功能

开启垃圾回收站功能:gluster volume set volume1111 features.trash on
开启后,在根目录下,会创建一个.trashcan目录
设置某些目录不进行垃圾回收:gluster volume set volume1111 features.trash-eliminate-path monitor
是使用相对路径 /nfs/monitor 就使用monitor即可
调整垃圾回收站的文件大小限制:gluster volume set volume1111 features.trash-max-filesize 1GB
默认大于5MB就不进行回收,官网介绍是最大1GB,超过也不生效,但实际上只要设置10GB,也能回收2GB的文件
自定义垃圾回收目录:gluster volume set volume1111 features.trash-dir trash
配额管理

开启配额:gluster volume quota volume1111 enable
关闭配额:gluster volume quota volume1111  disable
针对特定目录进行配额限制:gluster volume quota volume1111 limit-usage /quota 10GB
情形说明:
如果已经达到配额后,继续写入文件,会报错
 failed to open ‘./test’: Disk quota exceeded
如果是一个文件从0开始写入,直接超过了配额,那么该文件不会被限制
查询当前卷的配额列表:gluster volume quota volume1111 list
删除当前目录的配额:gluster volume quota volume1111 remove /test-dir
数据平衡

开始平衡:gluster volume rebalance volume1111 start
平衡状态:gluster volume rebalance volume1111 status
停止平衡:gluster volume rebalance volume1111 stop
文件修复

启动文件修复:gluster volume heal volume1111 full
文件修复状态:gluster volume heal volume1111 info
故障排查

查看Brick状态,有无不在线的节点:gluster volume status volume1111

gluster peer status
gluster volume info
gluster volume profile volume1111 info
gluster volume status all detail
参数说明(参数列表详见官网链接)

https://docs.gluster.org/en/latest/Administrator%20Guide/Managing%20Volumes/

gluster volume set help(参数完整列表)
gluster volume set volume1111 performance.write-behind-window-size 1024MB
gluster volume set volume1111 performance.cache-size 16GB
gluster volume set volume1111performance.io-thread-count 32(IO线程数量提升到32,默认是16)
gluster volume set volume1111 performance.parallel-readdir on(启用并行readdir,提升使目录列表的性能)
gluster volume set volume1111 storage.reserve  10 (磁盘预留空间调整为10%)
gluster volume set volume1111 group metadata-cache(启用元数据缓存以提高目录操作的性能)

# 删除卷 
gluster volume stop gfs 
gluster volume delete gfs 
# 将机器移出集群 
gluster peer detach agent22.kisops.org 
# 卷扩容(由于副本数设置为2,至少要添加2(4、6、8..)台机器) 
gluster peer probe agent23.kisops.org # 加节点 
gluster peer probe agent24.kisops.org # 加节点 
gluster volume add-brick gfs agent23.kisops.org:/data/glusterfs agent24.kisops.org:/data/glusterfs # 合并卷 
# 收缩卷(收缩卷前gluster需要先移动数据到其他位置) 
gluster volume remove-brick gfs agent23.kisops.org:/data/glusterfs agent24.kisops.org:/data/glusterfs start # 开始迁移 
gluster volume remove-brick gfs agent23.kisops.org:/data/glusterfs agent24.kisops.org:/data/glusterfs status # 查看迁移状态 
gluster volume remove-brick gfs agent23.kisops.org:/data/glusterfs agent24.kisops.org:/data/glusterfs commit # 迁移完成后提交 
# 迁移卷 
gluster peer probe agent25.kisops.org # 将agent31.kisops.org的数据迁移到agent25.kisops.org,先将agent25.kisops.org加入集群 
gluster volume replace-brick gfs agent31.kisops.org:/data/glusterfs agent25.kisops.org:/data/glusterfs start # 开始迁移 
gluster volume replace-brick gfs agent31.kisops.org:/data/glusterfs agent25.kisops.org:/data/glusterfs status # 查看迁移状态 
gluster volume replace-brick gfs agent31.kisops.org:/data/glusterfs agent25.kisops.org:/data/glusterfs commit # 数据迁移完毕后提交 
gluster volume replace-brick gfs agent31.kisops.org:/data/glusterfs agent22.kisops.org:/data/glusterfs commit -force # 如果机器agent31.kisops.org出现故障已经不能运行,执行强制提交 
gluster volume heal gfs full # 同步整个卷

GlusterFS在Ubuntu 18.04/16.04上的源码部署

依赖文件

在终端中输入下面代码安装依赖。

sudo apt-get install make automake autoconf libtool flex bison pkg-config libssl-dev libxml2-dev python-dev libaio-dev libibverbs-dev librdmacm-dev libreadline-dev liblvm2-dev libglib2.0-dev liburcu-dev libcmocka-dev libsqlite3-dev libacl1-dev uuid-dev attr
  •  

编译安装

按步骤编译安装,其中安装位置是默认的。另外,make 可以使用make -j4 加速编译(4线程并行编译)。

./autogen.sh
./configure
make
sudo make install
  •  

补充链接

在文件 /etc/ld.so.conf 中增加下面第一行, 并使之生效。

/usr/local/lib
ldconfig
  •  

查看GlusterFS版本并启动

glusterfs -V
glusterd
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值