gluster学习(一)
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学习(一)的更多相关文章
- gluster学习(二)
GlusterFS卷管理 一.卷基本选项设置 1. 调整高速缓存大小 gluster volume set test-volume performance.cache-size 256MB 2. 详细 ...
- 学习笔记:CentOS7学习之二十五:shell中色彩处理和awk使用技巧
目录 学习笔记:CentOS7学习之二十五:shell中色彩处理和awk使用技巧 25.1 Shell中的色彩处理 25.2 awk基本应用 25.2.1 概念 25.2.2实例演示 25.3 awk ...
- 学习openstack(二)
OpenStack企业私有云实践 1. 实验架构 OpenStack我们把它当作是一个全新的"Linux"系统来学习,有的时候我们也把OpenStack称之为一个新的Lin ...
- 学习Kvm(二)
一.走进云计算 云计算:云计算是一种按使用量付费的模式,这种模式提供可用的.便捷的.按需的网络访问, 进入可配置的计算资源共享池(资源包括网络,服务器,存储,应用软件,服务),这些资源能够被快速提供, ...
- 从直播编程到直播教育:LiveEdu.tv开启多元化的在线学习直播时代
2015年9月,一个叫Livecoding.tv的网站在互联网上引起了编程界的注意.缘于Pingwest品玩的一位编辑在上网时无意中发现了这个网站,并写了一篇文章<一个比直播睡觉更奇怪的网站:直 ...
- Angular2学习笔记(1)
Angular2学习笔记(1) 1. 写在前面 之前基于Electron写过一个Markdown编辑器.就其功能而言,主要功能已经实现,一些小的不影响使用的功能由于时间关系还没有完成:但就代码而言,之 ...
- ABP入门系列(1)——学习Abp框架之实操演练
作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...
- 消息队列——RabbitMQ学习笔记
消息队列--RabbitMQ学习笔记 1. 写在前面 昨天简单学习了一个消息队列项目--RabbitMQ,今天趁热打铁,将学到的东西记录下来. 学习的资料主要是官网给出的6个基本的消息发送/接收模型, ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
随机推荐
- js判断当前浏览器是pc端还是移动端
根据用户的访问设备的不同来显示不同的页面样式,主要是判断移动设备还是电脑浏览器访问的. 下面给出js判断处理代码,以作参考. <script type="text/javascript ...
- 【leetcode 简单】 第七十一题 二叉树的所有路径
给定一个二叉树,返回所有从根节点到叶子节点的路径. 说明: 叶子节点是指没有子节点的节点. 示例: 输入: 1 / \ 2 3 \ 5 输出: ["1->2->5", ...
- numpy 矩阵操作
numpy 对矩阵对角线.上三角.下三角以及它们所在位置索引的提取 import numpy as np a = np.random.randint(0,10,[5,5]) print(a) # c ...
- windows 身份登录(vs设置)
如果您的项目是windows身份严重,前提是我们用域账户登录,不用单独做登录页功能了. 一.如果用IE访问方法: 进入:工具-Internet选项-安全-自定义级别,如下设置即可. 二.如果用Visu ...
- 简析CSRF
1.简介 CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF ...
- 使用solr批量导入mysql数据库,以及Unable to read: dataimport.properties等坑
折腾了一下午终于成功了!先放一张成功图: 成功把mysql的数据添加进去了,我这里是整合了tomcat9,整合步骤挺麻烦的,百度一大堆! 这里主要介绍批量导入数据,这里有些坑,所以记录一下: 步骤: ...
- angular select ng-change实时获取value
<select ng-model="vm.selectVal" ng-options="o.id as o.title for o in vm.optionsDat ...
- 2 - django-urls路由系统基本使用
目录 1 路由系统(urls控制) 1.1 正则字符串参数 1.2 url的分组 1.2.1 无名分组 1.2.2 有名分组 1.3 URLconf 在什么上查找 1.4 include(路由分发) ...
- 如何和统计学家分享数据How to share data with a statistician
如何和统计学家分享数据 原文地址:https://github.com/jtleek/datasharing 将原文渣翻译的版本. 这是一份指南给需要分享数据给统计学家或者数据科学家的任何人.我认为的 ...
- APUE-文件和目录(二)函数access,mask,chmod和粘着位
4.7 函数access和faccessat 当一个进程使用了设置用户ID和设置组ID作为另一个用户(或者组)运行时,这时候有效用户(组)ID和实际用户(组)ID不一样,但进程仍然希望测试实际用户(组 ...