GlusterFS分布式文件系统使用简介

术语简介

GlusterFS是一个开源的分布式文件系统。更多特性介绍附录的参考文档。

Brick:GFS中的存储单元,通过是一个受信存储池中的服务器的一个导出目录。可以通过主机名和目录名来标识,如'SERVER:EXPORT'

Client: 挂载了GFS卷的设备

Extended Attributes:xattr是一个文件系统的特性,其支持用户或程序关联文件/目录和元数据。

FUSE:Filesystem Userspace是一个可加载的内核模块,其支持非特权用户创建自己的文件系统而不需要修改内核代码。通过在用户空间运行文件系统的代码通过FUSE代码与内核进行桥接。

Geo-Replication

GFID:GFS卷中的每个文件或目录都有一个唯一的128位的数据相关联,其用于模拟inode

Namespace:每个Gluster卷都导出单个ns作为POSIX的挂载点

Node:一个拥有若干brick的设备

RDMA:远程直接内存访问,支持不通过双方的OS进行直接内存访问。

RRDNS:round robin DNS是一种通过DNS轮转返回不同的设备以进行负载均衡的方法

Self-heal:用于后台运行检测复本卷中文件和目录的不一致性并解决这些不一致。

Split-brain:脑裂

Translator:

Volfile:glusterfs进程的配置文件,通常位于/var/lib/glusterd/vols/volname

Volume:一组bricks的逻辑集合

Gluster安装

#安装依赖工具 yum install xfsprogs wget yum install fuse fuse-libs #格式化磁盘并创建GFS分区 fdisk /dev/sdb mkfs.xfs -i size=512 /dev/sdb1 mount /dev/sdb1 /mnt/sdb1 #安装gluster wget http://download.gluster.org/pub/gluster/glusterfs/LATEST/CentOS/gluster-epel.repo -O /etc/yum.repo.d/glusterfs.repo yum install glusterfs{,-server,-fuse,-geo-replication} #启动glusterfs /etc/init.d/glusterd start /etc/init.d/glusterd stop #如果需要在系统启动时开启glusterd chkconfig glusterd on

cluster管理

在创建volume之前需要先将一组存储设备组成一个存储池,通过存储设备提供的bricks来组成卷。

在设备上启动glusterd之后,可通过设备的主机名或IP地址,将设备加到存储池中。

$gluster peer probe host|ip $gluster peer status #查看除本机外的其他设备状态 $gluster peer detach host|ip #如果希望将某设备从存储池中删除

gluster对于每个节点都会生成一个UUID来标识,因此如果节点的IP或主机名发生了变化,只需要重新执行peer probe即可。不过如果一个主机名曾经用过,想再改回去,则gluster会提示已经保存过。此时只能把节点detach掉,然后重新probe。

Volume管理

数据的传输协议支持tcp和infiniband rdma协议。

卷的类型

distributed volume

分布卷可以将某个文件随机的存储在卷内的一个brick内,通常用于扩展存储能力,不支持数据的冗余。除非底层的brick使用RAID等外部的冗余措施。

$gluster volume create mamm-volume node1:/media node2:/media node3:/media ...

replicated volume

复本卷在创建时可指定复本的数量,复本在存储时会在卷的不同brick上,因此有几个复本就必须提供至少多个brick。

$gluster volume create mamm-volume repl 2 node1:/media node2:/media

注意:在创建复本卷时,brick数量与复本个数必须相等;否则将会报错。

另外如果同一个节点提供了多个brick,也可以在同一个结点上创建复本卷,但这并不安全,因为一台设备挂掉,其上面的所有brick就无法访问了。

striped volume

分片卷将单个文件分成小块(块大小支持配置,默认为128K),然后将小块存储在不同的brick上,以提升文件的访问性能。

$gluster volume create mamm-volume stripe 2 node1:/media node2:/media

stripe后的参数指明切片的分布位置个数

注意:brick的个数必须等于分布位置的个数

distribute replication volume

此类型卷是基本复本卷的扩展,可以指定若干brick组成一个复本卷,另外若干brick组成另个复本卷。单个文件在复本卷内数据保持复制,不同文件在不同复本卷之间进行分布。

$gluster volume create dr-volume repl 2 node1:/exp1 node2:/exp2 node3:/exp3 node4:/exp4

注意:

复本卷的组成依赖于指定brick的顺序

brick必须为复本数K的N倍,brick列表将以K个为一组,形成N个复本卷

distribute striped volume

类似于分布式复本卷,

若创建的卷的节点提供的bricks个数为stripe个数N倍时,将创建此类型的卷。

$gluster volume create ds-volume stripe 2 node1:/exp1 node1:/exp2 [&] node2:/exp3 node2:/exp4

注意:

切片卷的组成依赖于指定brick的顺序

brick必须为复本数K的N倍,brick列表将以K个为一组,形成N个切片卷

striped replicated volume

数据将进行切片,切片在复本卷内进行复制,在不同卷间进行分布。

$gluster volume create test-volume stripe 2 replica 2 server1:/exp1 server2:/exp2 server3:/exp3 server4:/exp4

exp1和exp2组成复本卷,exp3和exp4组成复本卷,两个复本卷组成分片卷。

注意:brick数量必须和stripe个数N和repl参数M的积N*M相等。即对于brick列表,将以M为一组,形成N个切片卷。数据切片分布在N个切片卷上,在每个切片卷内部,切片数据复本M份。

distributed striped replicated vlume

$gluster volume create test-volume stripe 2 replica 2 server1:/exp1 server2:/exp2 server3:/exp3 server4:/exp4 server5:/exp5 server6:/exp6 server7:/exp7 server8:/exp8

注意:bricks数量为stripe个数N,和repl个数M的积N*M的整数倍

exp1 exp2 exp3 exp4组成一个分布卷,exp1和exp2组成一个stripe卷,exp3和exp4组成另一个stripe卷,1和2,3和4互为复本卷

exp4-exp8组成另一个分布卷,略。

启/停/删除卷

$gluster volume start mamm-volume $gluster volume stop mamm-volume $gluster volume delete mamm-volume

扩展收缩卷

$gluster volume add-brick mamm-volume [strip|repli <count>] brick1... $gluster volume remove-brick mamm-volume [repl <count>] brick1...

扩展或收缩卷时,也要按照卷的类型,加入或减少的brick个数必须满足相应的要求。

迁移卷

主要完成数据在卷之间的在线迁移

gluster volume replace-brick mamm-volume old-brick new-brick [start|pause|abort|status|commit] #迁移需要完成一系列的事务,假如我们准备将mamm卷中的brick3替换为brick5 #启动迁移过程 $gluster volume replace-brick mamm-volume node3:/exp3 node5:/exp5 start #暂停迁移过程 $gluster volume replace-brick mamm-volume node3:/exp3 node5:/exp5 pause #中止迁移过程 $gluster volume replace-brick mamm-volume node3:/exp3 node5:/exp5 abort #查看迁移状态 $gluster volume replace-brick mamm-volume node3:/exp3 node5:/exp5 status #迁移完成后提交完成 $gluster volume replace-brick mamm-volume node3:/exp3 node5:/exp5 commit

均衡卷

当对卷进行了扩展或收缩后,需要对卷的数据进行重新均衡。

$gluster volume rebalane mamm-volume start|stop|status

触发副本自愈

$gluster volume heal mamm-volume #只修复有问题的文件 $gluster volume heal mamm-volume full #修复所有文件 $gluster volume heal mamm-volume info#查看自愈详情 $gluster volume heal mamm-volume info healed|heal-failed|split-brain

选项配置

$gluster volume set mamm-volume key value

详细的可设置选项:

https://github.com/gluster/glusterfs/blob/master/doc/admin-guide/en-US/markdown/admin_managing_volumes.md

排错

错误

gluster使用了若干端口,如果出现probe peer或数据无法同步,考虑iptables对应用的影响。

日志

$gluster volume log rotate mamm-vol #实现日志rotate

添加卷提示已经路径已在卷中的错误

执行下面的脚本,清除历史数据及属性信息

path=$1 #参数为待添加目录绝对路径 rm -rf $path/.glu* setfattr -x trusted.glusterfs.volume-id $path setfattr -x trusted.gfid $path

添加卷连接失败

每次向卷中添加brick后,远端的glusterd进程可能会连接关闭一段时间。此时现次执行操作会提示连接失败。等一会再执行即可。

客户端设置

客户端使用GFS有多种方式,性能最高的方式是使用gluster的native接口,此外还有NFS和CIFS方式。

native方式

1 安装gluserfs-fuse安装包,

2 挂载卷:mount -t glusterfs host/ip:path mnt-point

注意,这里提供的IP和主机只用来为客户提供volfile信息,后续客户便直接和需要的服务器通信了。

3 设置自动挂载

echo "localhost:/mamm-vol /mnt/glusterfs glusterfs defaults,_netdev 0 0" >>/etc/fstab

NFS方式

Gluster提供了内置的NFS服务,支持其他实现了NFSv3的客户端直接访问。

#service nfs stop # 关闭Linux内核自带的NFS服务 #service rpcbind start # 启动rpc端口映射管理 #rpc.statd

然后客户端挂载

mount -t nfs -o vers=3 host/ip:/path mnt-port

window7客户端

程序和功能->打开或关闭windows功能,安装NFS客户端功能,即可使用mount/showmount功能。

CIFS方式

cifs可以提供给WIN及samba客户端访问,对于windows程序,可以使用//ip/path通过SMB协议来方便的使用远程资源

1 在服务器将glusterfs挂载到/mnt/gfs

2 服务器通过samba配置将/mnt/gfs导出服务,启动smb服务

3 在win客户端上挂载samber服务器导出共享mount -t cifs //ip/path /mnt-point

性能监控

性能profile

gluster volume profile mamm-vol start gluster volume profile info gluster volume profile mamm-vol stop

实时top

显示当前某个brick或NFS文件打开/读/写/打开目录/读目录的计数

gluster volume top mamm-vol {open|read|write|opendir|readdir} brick node1:/exp1 list-cnt 1

显示当前某个brick或NFS路径读文件或写文件数据的性能

gluster volume top mamm-vol read-perf|write-perf bs 256 count 10 brick node1:/exp1 list-cnt 1

内部计数导出

gluster volume statedump mamm-vol

设置导出路径

gluster volume set server.statedump-path /var/log/

查看导出数据

gluster volume info dumpfile

卷状态查看

gluster volume status [all|volname] [detail|clients|mem|fd|inode|callpoll]

参考资料

官方文档地址:https://github.com/gluster/glusterfs/tree/master/doc/admin-guide/en-US/markdown

Gluster集群文件系统研究:http://blog.csdn.net/liuaigui/article/details/6284551

Gluster管理入门:http://www.slashroot.in/gfs-gluster-file-system-complete-tutorial-guide-for-an-administrator

Gluster原理视频介绍:http://edu.51cto.com/lesson/id-35359.html

Gluster运维视频介绍:http://edu.51cto.com/course/course_id-1930-page-2.html

Infiniband介绍与配置:http://www.ibm.com/developerworks/cn/linux/l-cn-infiniband/

原文发布于微信公众号 - 马哥Linux运维(magedu-Linux)

原文发表时间:2016-08-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏黄希彤的专栏

knockd:CVM云主机的隐形斗篷

用knockd隐藏服务器的ssh等各种高危端口,让服务器在黑客眼前隐形。

1.1K50
来自专栏北京马哥教育

你所不知道的linux匿名管道知识

豌豆贴心提醒,本文阅读时间5分钟 相信很多在linux平台工作的童鞋, 都很熟悉管道符 '|', 通过它, 我们能够很灵活的将几种不同的命令协同起来完成一件任...

31750
来自专栏Java架构沉思录

Linux常用Shell脚本知多少

在运维中,尤其是linux运维,都知道脚本的重要性,脚本会让我们的 运维事半功倍,所以学会写脚本是我们每个linux运维必须学会的一门功课,这里收藏linux运...

16210
来自专栏散尽浮华

MySQL高可用架构-MHA环境部署记录

一、MHA介绍 MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshim...

74260
来自专栏源码之家

一键安装桌面及VNC

61460
来自专栏恰童鞋骚年

.NET Core微服务之基于Consul实现服务治理(续)

上一篇发布之后,很多人点赞和评论,不胜惶恐,这一篇把上一篇没有弄到的东西补一下,也算是给各位前来询问的朋友的一些回复吧。

17850
来自专栏有困难要上,没有困难创造困难也要上!

Windows平台使用Python切换用户运行程序

35490
来自专栏腾讯Bugly的专栏

H5 缓存机制浅析 移动端 Web 加载性能优化

1 H5 缓存机制介绍 H5,即 HTML5,是新一代的 HTML 标准,加入很多新的特性。离线存储(也可称为缓存机制)是其中一个非常重要的特性。H5 引入的离...

39920
来自专栏openshift持续集成

jenkins邮件插件中的内容参数设置

众所周知,Jenkins默认提供了一个邮件通知,能在构建失败、构建不稳定等状态后发送邮件。但是它本身有很多局限性,比如它的邮件通知无法提供详细的邮件内容、无法定...

98980
来自专栏前端那些事

快速搭建属于自己的mongodb数据库

前言 MongoDB 是一个基于分布式文件存储的数据库。由C++语言编写,支持Windows,Linux,OSX,Solaris等平台,默认端口为27017,是...

23680

扫码关注云+社区

领取腾讯云代金券