序言
分布式文件系统用来存储各种非结构化数据,例如海量的图片,海量的视频,海量的xml等数据。在这种分布式存储中,是不支持随机的读写的,要么直接覆盖,要么删除然后再修改。
越来越多的存储都用到了分布式文件系统,各种hdfs,gfs等都会用到,那么对于分布式文件系统如何来进行监控呢?
分布式文件系统
分布式文件系统一般都会有元数据节点,用来存储相关的元数据,例如集群有多少台物理机,每个物理机上面的空间有多少,这种节点一般称之为master节点。
在分布式文件系统的集群中,一般为了高可用,那么就必然会有多个master节点,一般的master节点的个数为3个,可以是热备的形式,也可以是像etcd那种选举出来的中心节点。
一般master节点只是用来管理和调度文件存储,而不进行数据文件的存储。从而master一般不需要单独的物理机来安装应用,主要用几个vm进行安装即可,然后对外提供服务。
数据存储节点一般使用物理机,个数无限制,可以不断的进行横向扩容,不然无法提供巨大的磁盘空间,物理机器一般单独划分出一个分区,inode的数量会划分的比较多,从而不会让海量的小文件让磁盘空间不足。
数据存储节点一般叫做chunkserver。对外真正提供存储服务的时候,一般是用户来创建一个bucket,然后存储文件。在提供服务的时候,一般是用户发送一个http请求,然后就可以将数据进行保存,删除或者其他的操作。
在数据存储的时候,一般就是要考虑到replication,也就是副本,在一般的分布式存储中,一个文件上传,其实是存储了三份文件,存储在不同的机器位置上,从而当一台机器宕机的时候,不会导致数据丢失。
在进行搭建分布式系统的集群的时候,首先要进行规划,也就是预判文件系统存储空间的大小,大概能使用多久,如果数据存储超过了一定值,那么就要进行扩容,那么如果要进行清理数据,该用什么策略呢?
数据的安全性,一个方面是从存储本身考虑,也就是将数据进行多份存储,一个方面则是将数据删除的时候,删除分为两个步骤,一个步骤是软删除,也就是将数据标记为删除状态,外界不可访问,此时将文件可以移动到一个特殊的bucket之中,过了一天之后,如果没有收到数据丢失的信息,那么就可以将数据放在预删除的bucket之中,那么就是硬删除了,再过了一天,再次确认没有丢失数据,那么就直接从物理磁盘删除了。
分布式文件系统的监控指标
1、 系统容量
一个文件存储系统,总是比较关注系统容量的,那么在关注这个指标的时候,主要分为几个:一个是系统的总容量,也就是能存储多少数据,一个系统的剩余容量,还能存储多少数据。
在统计系统容量的时候,总是会困惑,怎么我才存储了3个T的数据,为什么用了4个T的数据?这是为什么呢 ???
文件存储,主要分为两个方面默认副本数量为3个,那么用户上传了3个T的数据,那么就会占用9个T的数据;另外一个方面,主要是受限于文件系统本身的限制,文件也有元数据,这就是inode的由来,inode需要空间,还有一个就是当挂载磁盘的时候,文件系统会预留一部分空间用来防止磁盘空间爆满,或者用来存储一些kernel crash的信息。。。。平常感觉不到inode空间的大小,但是用了分布式存储,用了大量的小文件。。。你会发现inode占用的空间也真的很多很多。。。
下图为ext4的inode空间空间数据和系统保留空间数据:
如果还有空间的迷惑,那就只能看是否是在那个磁盘目录下保存了其他的文件。当然,有的时候还要考虑,当小文件1KB上传之后,可能切分的时候,一个chunk就是56M,那么这个也会占用56M的空间,主要看如何存储文件的存储策略。
2、 用户数据增长趋势
用户一般会使用bucket,那么就需要关注bucket的总的大小,bucket可用空间的大小,每天的数据变化量需要用图标展示,有历史的趋势图,这样用户才好更好的估算使用的空间大小。
3、 SLA
SLA主要是当用户发起http请求的时候,对应的分布式文件系统的http响应码,各种响应码进行统计,从而计算出每半个小时一个值,从而统计出一个SLA的曲线图,从而能大概知道在哪个时候系统可能存在问题,便于问题的排查。
这个也可以统计http服务器的流量信息,从而来评估服务器的压力。
4、 分布式系统本身服务的
这个主要是看master节点的服务,chunkserver上的服务,磁盘是否正常,每个物理机上磁盘空间的剩余量。
总结
1、 在使用分布式系统的时候,要进行空间的规划,否则三天扩容一次这是一种崩溃的事情,空间规划,主要看数据增长速度,从而规划空间大小和清理磁盘的使用策略。
2、 在分布式系统的时候,对于磁盘空间的疑问,可以从副本的数量和inode空间和挂载保留的大小进行排查,毕竟这个空间都是花钱买的。