Linux集群管理中的核心-监控数据[Linux安全]
本文“Linux集群管理中的核心-监控数据[Linux安全]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
监控是集群管理的核心任务.监控数据可用于调度任务、负载均衡、向管理员报告软硬件弊端,并遍及地掌握系统利用情形.监控信息必须在不影响集群性能的情形下得到.本文将谈论利用/proc文件系统和Java来得到监控数据的办法.
Java在Linux集群中的利用
Java技术为集群管理开辟者供应了很多办理问题的办法.Java是动态、机动、可移植的,这些不平常的特点使得它成为了在异构网络及平台上构造集群管理的抱负底子.
Java具有遍及的例程库,很简单处理IP协议,如TCP、UDP,并可在multi-homed主机上举行网络程序计划,用它成立网络衔接比用C或C++更简单.通过Java本地接口(JNI),运行在Java 虚拟机(JVM)内的Java代码可以与用别的语言编写的利用及库文件彼此操作并汇编.
在构造集群监控和管理时,Java早已是一个可选的语言.但是,Java语言普通只被用于系统的前端或集群主机部份,而将用C 语言编写的保护进程安装在集群结点上.固然Java程序计划语言供应了很多长处,但是,关于高性能集群监控,Java可以有效地替换运行在每个结点上的C 语言保护进程吗?这将是本文谈论的重点.
高性能监控
监控Linux集群工具传统上以秒为丈量频率来供应有限量的数据.而高性能集群监控被定义为“以intrasecond为丈量频率,从结点有效地采集数据的本领”.当触及较大集群时,监控软件的低效率问题就变得越发严重,这是因为所运行的利用软件必须彼此调和或同享全局资源.
在一个结点上的隔绝冲突(Interference)能影响别的结点上功课的运行.比方,一个MPI作用需求与全部参与的结点同步.一种办理办法是汇集少量的数据,并以小频率传输.但是,假如是高性能监控,这种办理办法是不可承受的,因为有较重操纵率的集群应当被频繁持续地监控.本地功课调度器必须可以基于资源利用情形做快速抉择.管理员常常但愿收到告急事件的当即告诉,并但愿察看到历史趋向数据,假如集群不能被频繁持续地监控,那么这些要求是不大概实现的.因此,必须采纳一些办法,如利用更有效的算法、增添传输的并行性、提高传输协议及数据格局的效率、削减冗余等.
在跟踪运行中的资源利用情形时,紧缩Profiling利用有助于调试程序或优化程序.对一个给定的利用而言,像存储器、网络、CPU这样动态资源的利用大概快速地改变着,为了可以察看利用是怎样利用这些资源的,一种大概的办法是利用高频率的监控.
即便用户对高频率监控没有爱好,假如算法是有效的,不管监控频率是多少,它也将消费很少的资源.在异构集群中这种效率将更重要,用户的功课可以被分离到较快的及较慢的结点上,慢的结点需求全部CPU来跟上较快的结点并与之同步.一个监控程序耗费在较慢结点上的CPU时间是功课的关键途径.
监控阶段
集群监控主要损耗CPU周期与网络带宽这两个重要资源.但是,资源消费问题与这两个资源是根本差别的.CPU操纵问题对结点而言是完好本地化的问题,可通过成立有效的汇集与归并算法来办理.网络带宽是同享资源,是规模问题,可以通过最小化网络上传输的数据量来办理.
为了办理这两个问题,我们将集群监控分为三个阶段:汇集、归并、传输.汇集阶段负责从操作系统装载数据、解析数据值,并存储数据.归并阶段负责将来自多个数据源的数据合在一同,决意数据值能否改变并过滤它们.传输阶段负责紧缩并传输数据.本文集合谈论Linux集群监控的汇集阶段.
1.汇集阶段
Linux有几种办法来举行系通通计,每种办法都各有其优缺陷.
◆ 利用现有的工具
尺度及非尺度工具能履行一个或多个汇集、归并及传输阶段,如rstatd或SNMP工具,但是尺度的rstat后台程序供应的信息是有限的,速度慢并且效率低.
◆ 内核模块
几个系统监控工程操纵内核模块来存取监控数据.普通情形下,这是很有效的汇集系统数据的办法.但是这种办法存在的问题是,当主内核源内有别的改变时,必须保持代码一致性.一个内核模块大概与用户想利用的别的内核模块相冲突.此外,在利用监控系统之前,用户必须得到或申请模块.
◆ /proc虚拟文件系统
/proc 虚拟文件系统是一个较快的、高效率履行系统监控的办法.利用/proc的主要缺陷是必须保持代码解析与/proc 文件格局改变的同步.事实表明,Linux内核的改变比/proc 文件格局的改变要更频繁,所以,用/proc虚拟文件系统比用内核模块存在的问题要少.
◆ 混合系统
某些监控系统采取混合方法,用内核模块汇集数据,用/proc虚拟文件系统作为数据接口.
2.归并阶段
归并阶段的实现可以在结点上、集群管理的主机上,大概分布在二者上.考虑到效率,我们只采取在结点上的归并.缘由在于结点是监控数据的汇集器与供应者.两个或多个同时的数据恳求不会惹起两次操作系统调用来汇集数据,而是将第一次恳求得到的数据缓存,并可以供应应第二次恳求调用.这种办法削减了操作系统的负担,提高了监控系统的呼应性.归并阶段也可以用于将多个数据源的数据以彼此独立的汇集速率结合,因为并非全部的数据都以一样的速度改变,大概需求以一样的速率汇集.
利用在结点层上归并的另一个缘由是,削减了包含传输在内的信息量.很多/proc文件既包含动态数据也包含静态数据.删除近来一次传输后没有改变的值,一个结点发送的数据量可以大大地削减.归并不但除去了不常常改变的动态值的传输,也办理了从不改变的静态值的传输.
3.传输阶段
监控数据几近老是按一个层次构造组织起来.传输阶段的任务就是将层次数据举行有效的编码,形成一种能高效传输的数据格局.Java拥有的文件格局是存储层次数据的有效办法,并且用供应的Java APIs很简单完成.S-Expressions已经被认为是传输这种数据的另一个有效的办法.
关于传输监控数据广泛谈论的问题是,数据应当按二进制编码还是按文本格局编码.二进制数据更简单紧缩,因此也能更有效地传输.但是,当采取/proc文件系统时,监控数据普通以人们易读的格局存储.在传输之前,将数据转换为二进制格局将需求更多的处理资源与时间.以文本格局保存汇集的数据,结点资源能被用于更多非监控性的相关工作.
采取文本格局的数据将供应以下额外的好处:
◆ 平台独立性
当监控异构集群时,机械之间数据字节指令的配置不是永久相同的.文本格局的利用在代码方面办理了这个问题,并且体系构造独立不会影响更多的处理需求.
◆ 易读的格局
文本数据能以人们易读的格局举行组织.假如需求的话,这种特点能简单地举路程序调试或答应用户傍观数据流.
◆ 有效紧缩
数值数据的文本表示由来自10个字节集合的字符构成,而不是二进制下的256个字节集.它们产生的数字及情势的相对频率答应有效地利用基于紧缩算法的字典及熵(平均信息量).
/proc虚拟文件系统
/proc虚拟文件系统(也叫procfs)是Unix操作系统所利用的虚拟文件系统的Linux实现,包含Sun Solaris、LinuxBSD.在/proc开始时,它以一个尺度文件系统呈现,并包含与正在运行的进程IDs一样名字的文件.但是,在/proc中的文件不占用磁盘空间,它们存在于工作存储器(内存)中./proc最初的目的是便于进程信息的存取,但是目前,在Linux中,它可被内核的每一部份利用来报告某些事情.
在/proc文件系统供应的成百上千的值当中,我们将集合考虑集群监控所需的最小集,它们包含:
◆ /proc/loadavg:包含系统负载平均值;
◆ /proc/meminfo:包含存储管理统计量;
◆ /proc/net/dev:包含网卡器量;
◆ /proc/stat:包含内核统计量;
◆ /proc/uptime:包含总的系统正常工作时间及闲暇时间.
每个文件供应的值的数目是差别的.这些文件的完好有效值列表以下.
◆ /proc/loadavg供应以下数据:
- 1秒钟平均负载;
- 5秒钟平均负载;
- 15秒钟平均负载;
- 总功课数;
- 正在运行的功课总数.
◆ /proc/meminfo供应的存储器信息包含:
- 活动存储器;
- 不活动存储器;
- 缓冲存储器;
- 高速缓冲存储器;
- 总的安闲存储器;
- 总的高位存储器;
- 安闲高位存储器;
- 总的低位存储器;
- 安闲低位存储器;
- 同享存储器;
- 交换存储器;
- 交换高速缓冲存储器;
- 交换安闲存储器;
- 总存储器.
◆ /proc/net/dev中包含每个网卡的以下数据:
- 接纳到的字节;
- 接纳到的紧缩字节;
- 收到的误码数;
- 收到的漏失误码;
- 收到的FIFO误码;
- 收到的帧误码;
- 收到的多播误码;
- 收到的总包数;
- 已传输的字节;
- 已传输的紧缩字节;
- 传输误码总数;
- 传输载波误码;
- 传输冲突误码;
- 传输漏失误码;
- 传输FIFO误码;
- 传输的总包数.
◆ /proc/stat供应:
- 指导时间;
- 上下文切换数目;
- 中止总量;
- 进页面总数;
- 出页面总数;
- 进程总数;
- 换入总数;
- 换出总数;
- 合计CPU闲暇时间;
- 合计CPU nice时间;
- 合计CPU系统时间;
- 合计CPU用户时间.
- 同时供应对每个CPU的:
- 单个CPU闲暇时间;
- 单个CPU nice时间;
- 单个CPU系统时间;
- 单个CPU用户时间.
以及对每个磁盘驱动器的以下数据:
- 单个磁盘块读;
- 单个磁盘块写;
- 单个磁盘I/O总数;
- 单个磁盘I/O读;
- 单个磁盘I/O写.
◆ /proc/uptime中包含:
- 系统总工作时间;
- 系统总闲暇时间.
值得注意的是,每次某个/proc被读时,一个句柄函数都被内核或特有模块调用,来产生数据.数据在运行中产生,不管是读一个字符还是一个大的字块,整个文件都将被重建.这对效率是至关重要的一点,因为利用/proc的任何系统监控器将吞下整个文件,而不是一点一点地处理它.
Java供应了丰富的文件I/O类集,包含基于类的流、基于类的块设备,以及J2SDK 1.4供应的新的I/O库.实行表明,普通而言,对基本的块读写文件操作,用RandomAccessFile类举行I/O是最佳的.比方,块读文件操作以下:
mFile = new RandomAccessFile( "/proc/meminfo", "r" );
//以读方法翻开文件
mFile.read( mBuffer ); //读文件块
结论
本文谈论了若何将Java语言有效地用于Linux集群结点上的高性能监控.在程序计划中,要注意以下方面:
◆ 采取/proc文件系统;
◆ 以块情势读/proc文件,而不是以行或字符情势;
◆ 在读文件期间保持文件翻开;
◆ 消除不必要的数据转换;
◆ 在结点上归并数据;
◆ 以紧缩情势传输数据;
◆ 注意与性能问题相关的语言或库.
对高性能监控而言,内核模块不是必要条件,这点很重要,因为它在Linux版本和分类之间供应了很大程度的可移植性,在监控器实现语言上有很多的挑选.但是,/proc文件系统的性能却很依靠内核代码的效率,因此,适本地理解有关的机制将对以任何语言编写的监控器性能有非常大的影响.
以上是“Linux集群管理中的核心-监控数据[Linux安全]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |