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

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

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

    三 主流分布式文件系统对比
    HDFS fASEdfs tfs这些适合上传下载操,创建获取更新删除等场景
    如果是writeseek等随机读写,用GlusterFSmooseFS(小于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,如果一台服务器挂了,另外一台服务器会把虚拟地址接手过来

  • 相关阅读:
    卸载驱动时,没有/lib/modules目录
    strcmp与strncmp的区别
    12864 显示多种图形
    环形缓冲区的应用ringbuffer
    环形缓冲区
    pthread_cond_wait 详解
    [置顶] 自己写一个简单通用的Makefile
    指针空间的申请与释放
    双向链表操作
    FreeType 管理字形
  • 原文地址:https://www.cnblogs.com/liangjiongyao/p/10318115.html
Copyright © 2020-2023  润新知