2)Bricks
• Brick是一个节点和一个导出目录的集合,e.g. node1:/brick1
• Brick是底层的RAID或磁盘经XFS或ext4文件系统格式化而来,所以继承了文件系统的限制
• 每个节点上的brick数是不限的
• 理想的状况是,一个集群的所有Brick大小都一样

3)Volumes
• Volume是brick的逻辑组合
• 创建时命名来识别
• Volume是一个可挂载的目录
• 每个节点上的brick数是不变的,e.g.mount –t glusterfs www.std.com:test /mnt/gls
• 一个节点上的不同brick可以属于不同的卷
• 支持如下种类:

a) 分布式卷

b) 条带卷

c) 复制卷

d) 分布式复制卷

e) 条带复制卷

f) 分布式条带复制卷

3.1)分布式卷
• 文件分布存在不同的brick里
• 目录在每个brick里都可见
• 单个brick失效会带来数据丢失
• 无需额外元数据服务器

3.2)复制卷
• 同步复制所有的目录和文件
• 节点故障时保持数据高可用
• 事务性操作,保持一致性
• 有changelog
• 副本数任意定

3.3)分布式复制卷
• 最常见的一种模式
• 读操作可以做到负载均衡

3.4)条带卷
• 文件切分成一个个的chunk,存放于不同的brick上
• 只建议在非常大的文件时使用(比硬盘大小还大)
• Brick故障会导致数据丢失,建议和复制卷同时使用
• Chunks are files with holes – this helps in maintaining offset consistency.

GlusterFS无元数据设计
好处是极大的提高了扩展性,同时也提高了系统的性能和可靠性;另一显著的特点是如果给定确定的文件名,查找文件位置会非常快。但是如果要列出文件或者目录,性能会大幅下降,因为列出文件或者目录时,需要查询所在节点并对各节点中的信息进行聚合。此时有元数据服务的分布式文件系统的查询效率反而会提高许多

当客户端访问GlusterFS存储时,首先程序通过访问挂载点的形式读写数据,对于用户和程序而言,集群文件系统是透明的,用户和程序根本感觉不到文件系统是本地还是在远程服务器上。读写操作将会被交给VFS(Virtual File System)来处理,VFS会将请求交给FUSE内核模块,而FUSE又会通过设备/dev/fuse将数据交给GlusterFS Client。最后经过GlusterFS Client的计算,并最终经过网络将请求或数据发送到GlusterFS Server上。

现网配置文件路径

https://blog.csdn.net/sondx/article/details/24322565
http://wesleydeng.iteye.com/blog/1734875#_Toc325012577

glusterFS是基于客户端的只读缓存,其粗粒度的一致性,是基于失效时间过期的缓存更新操作
glusterFS关于缓存的配置信息则保存在客户端的卷中
glusterFS缓存两部分:元数据和数据

什么是元数据?描述文件属性但又不是文件直接的部分,例如创建时间\修改时间\文件大小\文件存放的位置

对元数据的缓存
文件创建时会缓存元数据Inode的信息,当对该文件进行操作,可从元数据的缓存中直接获取文件的Inode,找不到再向下层查询所需的元数据信息

对数据的缓存
一般来说,文件系统的缓存指数据的缓存
glusterFS将一个文件以128k大小分成若干个区域,每个区域等同与缓存页的大小(最后一个可能例外),对文件的读取操作变成了对各区域的先后读取.
对于每个要读取的缓存区域则可能分成三种情况:
请求区域在缓存中,并且缓存是最新的,直接从缓存页面读取数据
请求区域不在缓存中,发送缺页中断,从远端磁盘缓存页面读取数据,并在缓存页面中更新数据
缺页中断已经产生,等待响应

glusterFS缓存的种类和特点
元数据缓存 数据缓存
生效的操作 所有操作 读操作
保存时间 创建文件时 读取文件时
保存方式 将元数据与转换 将文件分成若干区域保存
为唯一值与之对应 每个区域保存在一个页面中

客户端上是有卷的配置信息文件的,运行这glusterfs进程(可以不运行,如果不想用gluster的原生协议)

server端:glusterfsd进程负责处理来自其他组建的数据服务请求

一 gluster是什么?
hdfs的适合流式数据的存储,不兼容posix
gluster适合随机读,集群式NAS存储系统
目标代替lustre和商业产品GPFS

二 gluster基本原理
Infiniband延时非常低,一般是微秒级的,一般用于高性能云计算
全局统一命名空间:通过分布式文件系统将物理分散的存储资源虚拟化成统一的存储池
扩展属性是要用get命令看的,ls只能看到inode的属性

弹性Hash算法
每个brick会被分配一段hash范围
输入文件名(不包括路径),Davies-Meyer算法计算32位hash值
根据hash值在集群中选择子卷,进行文件定位
client对所选择的子卷进行访问

生产环境一定要用复制卷
hash值的计算实在client端进行的,hash只是定位brick(磁盘),并不定位文件

哈希+复制卷:node做hash,brick做复制
小文件(几k)不要用条带卷,条带卷最少分片是128k

glusterFS访问接口
RMMA:远程访问raid,就是上面说的Infiniband

VFS只有框架,实际干活还是地下的文件系统(ext4\xfs等等)
fuse与每个节点都有直接通道,两者直接交换
NFS访问的话,我没台服务器上都有nfs服务,就比fuse(千兆网络即可)多一个环节,因为数据不一定在你挂载的IP上,还需要通过该节点帮你去找,这种一般要求万兆网络.

数据自修复self-heal
触发自修复情形:第一次进入这个目录;每次访问文件;brick离开又回来之后
巡检也有可能触发修复(看你的巡检命令 )
它的自修复是同步修复

新增节点之后,不要急着rebalance,因为数据均衡会产生很大的流量,影响业务性能,选择业务比较空闲的时机再做rebalance

三 主流分布式文件系统对比
HDFS fASEdfs tfs这些适合上传下载操,创建获取更新删除等场景
如果是write\seek等随机读写,用GlusterFS\mooseFS(小于100个节点)\Lustre比较好

glusterfs的应用场景
半结构化数据:用habse mongodb mraidb去存,这种数据适合以列数和行数存储
glusterfs适合非结构化存储,镜像,文件
内容云:比如,网盘
gluster可以替代Hadoop来存储数据

gluster分布式文件系统测试
冒烟测试
数据一致性:写进去的和读出来的是一致的

大文件都是顺序读写,小文件以随机读写为主
元数据操作又称目录操作又(ops,operation per second),大文件可不需要太关注该性能指标
IOPS:随机小文件I/O读写能力
带宽:大文件连续读写能力
iowait达到30%-40%往往表明你的io负载很重了

Linux客户端测试工具
DD
Iozone:针对大文件
Postmark:针对ops
FIO:针对磁盘,IOPS

四 gluster安装与配置
gluster volume help

增删brick之后要做rebalance,但是要把握时间点
umount挂载点-->stop卷-->删除卷

五、
卷参数设置
IP访问限制,除了设置allow以外还要设置reject
系统默认会起一个nfs进程(自带)ps -ef | grep nfs,把它关闭gluster volume set testvol nfs.disable on
gluster volume info查看nfs已关闭

gluster volume info 卷名 #单独看一个卷的信息

六、性能测试

网络性能
server1端:iperf -s 启动
client(server2)端: iperf -c server1 启动
iperf -c server1 -P 4 多个进程,提高压力

卷性能测试
卷状态
gluster volume status #卷相关的进程的状态,Y/N

卷信息
gluster volume info

集群状态和卷挂载

读写测试dd
of=/dev/null 为读
测带宽

带宽测试
iozone help 支持集群测试(配得比较复杂)
常用 iozone -r 1m -s 128m -t 4 -i 0 -i 1
-r :每次读写的块的大小
-s:测试的文件大小
-t:线程数
-i:0是顺序写 1是顺序读,2是随机读写 3 4 5 6
测带宽

IOPS
运行 fio fio.conf #numjobs是进程数 size是文件大小
一个普通的SATA盘,7200转的,大概80左右的IOPS,如果是比较好的SAS或者光纤盘,可能在150左右的IOPS,ssd就可以达到几万几十万几百万。vmware里面的虚拟磁盘都是虚高的
fio可以测带宽,也可以测IOPS

运行 postmark postmark.conf #number写的文件个数,size是每个文件的大小,location是挂载点
subdirectories挂载点下有多少个目录 run运行的时间s 配置文件这种方式运行要加show字段
结果会在当前目录生成一个文件
postmark主要测试元数据操作的速度,即OPS,比如创建文件删除文件

系统监控
atop 2: 两秒中更新一次
iostat

配置信息
/var/lib/gluster

日志
mnt.log挂载日志
nfs.log nfs日志
glustershd.log 自修复日志
cli.log 命令行工具的日志
glusterd.log glusterd进程的日志
brick/brick-***.log brick的日志

rpc-transport报错,可以不管,如果没有使用rdma(infiband)

典型故障处理
把删掉的文件恢复
再另外一台服务器上cat/ls那个文件,或者find命令

另一个brick中坏掉
获取扩展属性(brick没损坏的服务器上执行) getfattr -d -m . -e hex b1/

2U/4U存储服务器和JBOD适合构建brick

协议:原生协议最好,但是不是每个系统版本都能装
infiband设置巨帧性能会提高

使用ctdb,如果一台服务器挂了,另外一台服务器会把虚拟地址接手过来

gluster学习(一)的更多相关文章

  1. gluster学习(二)

    GlusterFS卷管理 一.卷基本选项设置 1. 调整高速缓存大小 gluster volume set test-volume performance.cache-size 256MB 2. 详细 ...

  2. 学习笔记:CentOS7学习之二十五:shell中色彩处理和awk使用技巧

    目录 学习笔记:CentOS7学习之二十五:shell中色彩处理和awk使用技巧 25.1 Shell中的色彩处理 25.2 awk基本应用 25.2.1 概念 25.2.2实例演示 25.3 awk ...

  3. 学习openstack(二)

    OpenStack企业私有云实践 1.     实验架构 OpenStack我们把它当作是一个全新的"Linux"系统来学习,有的时候我们也把OpenStack称之为一个新的Lin ...

  4. 学习Kvm(二)

    一.走进云计算 云计算:云计算是一种按使用量付费的模式,这种模式提供可用的.便捷的.按需的网络访问, 进入可配置的计算资源共享池(资源包括网络,服务器,存储,应用软件,服务),这些资源能够被快速提供, ...

  5. 从直播编程到直播教育:LiveEdu.tv开启多元化的在线学习直播时代

    2015年9月,一个叫Livecoding.tv的网站在互联网上引起了编程界的注意.缘于Pingwest品玩的一位编辑在上网时无意中发现了这个网站,并写了一篇文章<一个比直播睡觉更奇怪的网站:直 ...

  6. Angular2学习笔记(1)

    Angular2学习笔记(1) 1. 写在前面 之前基于Electron写过一个Markdown编辑器.就其功能而言,主要功能已经实现,一些小的不影响使用的功能由于时间关系还没有完成:但就代码而言,之 ...

  7. ABP入门系列(1)——学习Abp框架之实操演练

    作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...

  8. 消息队列——RabbitMQ学习笔记

    消息队列--RabbitMQ学习笔记 1. 写在前面 昨天简单学习了一个消息队列项目--RabbitMQ,今天趁热打铁,将学到的东西记录下来. 学习的资料主要是官网给出的6个基本的消息发送/接收模型, ...

  9. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

随机推荐

  1. redhat6下安装centos的yum源

    因为redhat中的yum是收费的,未注册时不允许使用的,下面是挂载光盘后的情况,未挂载是没有yum命令.但是下面即便挂载了也是需要验证的 [root@localhost /]# yum instal ...

  2. vue 配置环境遇到的问题总结

    之前Vue的官网上对于vue-cli脚手架搭建环境是这样的几步: npm install --global vue-cli vue init webpack my-project cd my-proj ...

  3. SQL分页数据重复问题

    对于关系数据库来说,直接写SQL拉数据在列表中显示是很常用的做法.但如此便带来一个问题:当数据量大到一定程度时,系统内存迟早会耗光.另外,网络传输也是问题.如果有1000万条数据,用户想看最后一条,这 ...

  4. Swing教程

    //用多线程刷新状态 new Thread(new Runnable(){ @Override public void run() { try { for(int i=0;i<1000;i++) ...

  5. Redis实战(二)CentOS 7上Redis两种方式持久化

    Redis的持久化之RDB RDB方式是通过快照完成的,当符合一定条件时Redis会自动将内存中的所有数据进行快照并且存储到硬盘上. 进行快照的条件在配置文件中指定,有2个参数构成:时间和改动的键的个 ...

  6. c++刷题(27/100)反转单项链表,链表的倒数第k个

    题目1:调整数组顺序使奇数位于偶数前面 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位 ...

  7. UNIX环境高级编程 第10章 信号

    SIGSTOP和SIGKILL区别是:前者是使进程暂时停止,即中止,也就是说使进程暂停,将进程挂起,比如你在终端里面执行一个脚本或者程序,执行到一半,你想暂停一下,你按下ctrl+z,就会导致终端发送 ...

  8. 10种CSS3实现的Loading效果

    原文链接:http://www.cnblogs.com/jr1993/p/4622039.html 第一种效果: 代码如下: <div class="loading"> ...

  9. 20165320 预备作业3 :Linux安装及命令入门

    一.VirtualBox与Linux的安装 我是按照老师给的链接下的最新版本的VirtualBox5.26,然后Ubuntu软件(版本是16.04,最新的是17)是自己在网上找的旧版本下好的,因为我在 ...

  10. 配置虚拟机时间使其与国内时间同步,linux时间 ntp

    设置系统时间 [root@node2 ~]# date -s "10/30/18 09:30:00"Tue Oct 30 09:30:00 PDT 2018[root@node2 ...