« 上一篇下一篇 »

监控系统设计

MySQL主机达到一定规模时,基本上很难通过人工到各个主机上面来定时检查各自的状态,不论是运行状态还是性能状态。甚至不能像只有少数MySQL主机的时候那样简单地通过发送邮件的方式将相关信息发出。毕竟,量大了之后,检查邮件的时间成本也是很大的。这时候就需要进行统一的监控信息采集、分析、存储、处理来帮助我们过滤可以忽略的正常信息,并画出相关信息的趋势图,以帮助判断系统的运行状况和发展趋势。

    系统监控在很多人眼中是一个没有多少技术含量的事情,其实并非如此。且不说一个大型网站的所有设备的监控,就是仅仅搭建一个比较完善的几十台MySQL集群系统的监控,很可能就会让很多人束手无策,或者功能不够完善。

    其实一个完善的大型集群系统的监控系统,和少数几台主机的监控是有很大差别的。少数几台主机的监控在大多数时候可以通过几个简单的脚本、发发邮件,或者高一点,发发手机报警短信,基本就搞定了。监控点少,发出的信息量也少。很多状态信息甚至都可以通过维护人员登录到主机上面来定时检查即可。但如果有上百台主机,仍然仅仅依靠在每台主机上面部署几个简单的脚本的方式来进行监控,后期的管理维护成本就会非常高了。

    当MySQL主机达到一定规模时,基本上很难通过人工到各个主机上面来定时检查各自的状态,不论是运行状态还是性能状态。甚至不能像只有少数MySQL主机的时候那样简单地通过发送邮件的方式将相关信息发出。毕竟,量大了之后,检查邮件的时间成本也是很大的。这时候就需要进行统一的监控信息采集、分析、存储、处理来帮助我们过滤可以忽略的正常信息,并画出相关信息的趋势图,以帮助判断系统的运行状况和发展趋势。

    1、信息采集

    信息采集可以是一个统一的模块以主动的方式从各个MySQL主机上获取信息然后存放到监控信息存储中心,也可以是分布在各个MySQL主机上的模块以被动的方式反向将相关数据传向监控信息存储中心。

    一般来说,较小规模的监控点可以采用轮询的方式主动采集数据,但是当监控点达到一定规模时,轮询的主动采集方式就可能遇到一定的性能瓶颈和信息延时问题,特别是当需要采集数据比较多的时候尤为突出。如果采用从各个MySQL节点进行被动推送的方案,则可能要开发能支持网络通信的监控程序,使采集的信息能够顺利到达信息分析模块,以即时得到分析,成本会稍微高一些。

    不论是采用主动还是被动的方式来进行数据采集,都需要在监控主机上部署采集相关信息的程序或脚本,包括主机信息和数据库信息。

    2、信息分析
   
    当前端采集模块的监控程序获取到MySQL主机当前的各种状态信息时,分析模块就要实时地堆数据进行分析,判断系统工作正常与否,如果异常,就必须通过相关机制立即发出报警通知,并将信息发送到存储模块进行持久化。如果正常,则不需要进行任何处理就可以将数据传递到存储模块持久化。对信息分析模块来讲,最重要的事情就是处理及时、准确,当监控点到达一定的数量时,性能可能会成为瓶颈。

    3、信息存储

    存储监控程序采集的信息页是一件非常重要的事情,因为不论是查看当前状态,还是绘制趋势图,都需要用到这些信息。此外还有一个非常重要的原因就是通过对积累下来的这些监控信息的分析挖掘,为系统的容量规划和性能模型设计提供依据。

    4、信息处理
   
    最后根据采集到的各种状态、性能信息,通过应用相应规则进行分析挖掘运算,绘制出各种状态的趋势图以供维护人员查看。此外,通过各种趋势的分析,发掘出业务发展与数据负载之间的关系,以及与主机硬件的关系。这些关系数据,对于系统发展规划的制定将是非常有意义的。

« 上一篇下一篇 »