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. Java基础-StringBuffer类与StringBuilder类简介

    Java基础-StringBuffer类与StringBuilder类简介 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.StringBuffer类 在学习过String类之后 ...

  2. svn 节点处冲突 解决

    问题描述: [root@localhost ] $ svn up 正在升级 ‘.’: 已跳过 ‘bg0605’ – 节点处于冲突状态 版本 175. 冲突概要: 跳过的路径:1 解决方法: 当前目录下 ...

  3. CF869 E 二维BIT

    1代表建一个屏障,2代表去掉一个屏障,3询问是否两点相通. 仿造一维询问是否在同一区间的问题扩展到二维,树状数组维护区间标记即可,标记值可以直接2500进制不会爆LL. /** @Date : 201 ...

  4. [Node.js] querystring类

    和参数相关的帮助类,原生自带,直接 require('querystring') 即可使用. 此类一共包括4个方法: querystring.stringify(obj, [sep], [eq]) q ...

  5. 【经验分享】URL链接地址最长是多少?

    近期在做一个Hot Fix,其中有个界面在IE6下超链接无法打开,经查是链接地址太长,2161个字节,已经超出ie6,7的长度限制,现把发现此问题的过程分享给大家. ===过程===== 1.万恶的i ...

  6. (CoreText框架)NSAttributedString 2

    CHENYILONG Blog (CoreText框架)NSAttributedString 2 Fullscreen © chenyilong. Powered by Postach.io Blog

  7. 选择Memcached还是Redis?

    两者相似之处 Memcached与Redis都属于内存内.键值数据存储方案.它们都从属于数据管理解决方案中的NoSQL家族,而且都基于同样的键值数据模型.双方都选择将全部数据保存在内存当中,这自然也就 ...

  8. 【leetcode 简单】 第九十题 字符串中的第一个唯一字符

    给定一个字符串,找到它的第一个不重复的字符,并返回它的索引.如果不存在,则返回 -1. 案例: s = "leetcode" 返回 0. s = "loveleetcod ...

  9. shell脚本-监控及邮件提醒

    首先写一个邮件提醒python文件 #!/usr/bin/python # -*- coding: UTF-8 -*- import sys import smtplib import email.m ...

  10. opencv 摄像头

    VideoCapture cap(); if(!cap.isOpened()) ; Mat frame, edges; namedWindow(); for(;;) { cap >> fr ...