问题导读:
1、服务器集群系统设计的要点有哪些?
2、怎样分析,其应用后的效果 ?
前言:
随着信息技术的飞速发展,金融、财税等企事业单位的信息化建设程度不断加深。业务子系统的扩展和集中,引发对大量主机、数据库、应用系统进行综合管理的需求:一方面,必须确保系统的正常运行,对于大量工作人员的日常业务操作,首先要进行必要的预警工作,及早发现问题及消除隐患,其次一旦发生严重问题,必须在第一时间报警并提供相关信息,使系统管理人员能以最快速度定位问题并进行相应处理;另一方面,需要积累日常运行维护经验及数据,为各种系统资源的综合利用和规划提供决策支持。基于Web的服务器集群综合监控系统能够满足上述需求,通过该系统可以解决实时监控、有效管理、资源合理利用等问题,有助于系统管理员做好日常管理和运行维护工作。
1、系统架构设计
1.1基础信息采集层
系统主要架构如图1所示。信息采集是整个系统的基础,通过主动和被动方式将信息采集至监控数据库,针对不同的监控需求,采集时间周期可分为分钟级、小时级、天级。
在主机信息采集层面,定时采集主机的CPU、内存、文件系统等资源的使用情况。通过主动检测程序,对主机进行Ping和端口检查。在数据库信息采集层面,通过检测程序,定时检测数据库的连通性、采集表空间、连接数、备份时间、各项命中率等标准指标以及用户自己定义的检测指标。
1.2逻辑分析判断层
在底层采集大量信息的基础之上,逻辑分析层负责对各项信息进行分析处理。该层根据阈值信息表,判断主机的CPU、内存、文件系统、Ping、端口状态,以及数据库的连通性、表空间、各项指标状态,状态主要分为:正常、警告、错误。在实际使用中,会出现以下情况:例如在阈值信息表中,一般认为文件系统占用率过高会发出警告,但有的主机管理员经确认后认为此文件系统并不会对系统产生任何不良影响,为避免无用的警告信息干扰管理员,可使用屏蔽项目配置表对这些信息进行屏蔽。当对某一主机进行重启等维护时,也可在屏蔽项目配置表对其进行屏蔽,避免产生过多的报警信息。
1.3结果展现层
经过逻辑分析层的处理,各项指标的信息以及状态已经存放于数据库中,展现层将这些结果通过页面展示给用户,主要功能有:
(1)信息展示。提供各项指标的数据、状态以及历史信息和状态的查询。
(2)报警提醒。以不同颜色文字显示提示警告、错误等信息,例如警告信息以粉红色显示;错误信息以大红色显示。弹出单独的报警页面至前台,同时发出警告声音,以便管理员及时处理。
(3)月报功能。自动生成各主机和数据库的月报信息。
4)决策支持。通过适当的图形、表格、数值分析、统计分析等功能,为用户提供决策支持。借助图形化的CPU,内存的日线、周线、月线,管理员可以分析服务器性能压力,合理规划配置资源。在数据库层面,系统会根据近几个月的表空间统计数据,推算出各表空问每月增长量以及剩余空问的可使用时间,使管理员能及时掌握表空间的使用情况并且进行相应处理,同时为存储规划提供依据。
2、系统实现的关键技术
2.1基础信息采集层的实现
系统采用C龋言实现各层功能,基础信息采集层主要创建5个类支持主机信息采集过程:磁盘信息类、网络IP地址类、网络信息类、进程信息类和系统信息类。磁盘信息类用于获取磁盘名、总大小和可用空间;网络IP地址类用于获得主机物理地址和IP地址;网络信息类用于获取网卡名称、类型、描述、最大速率、索引、接收字节、发送字节、连通状态、MAC地址等;进程信息类用于获取进程号、进程名、占用处理器时间、分配的物理内存量以及进程主要模块的完整路径;系统信息类负责初始化CPU计数器,获取CPU和内存信息以及按要求获取分区信息、进程列表、IP地址、网络信息、应用程序标题。
系统通过WMI(Windows Management Instrumentation,Windows管理规范)技术获取本地或远程主机的相关信息。微软在.NET平台中充分支持WMI技术,基于.NET Framework托管平台的WMI.NET技术封装了原始WMI细节,并提供统一的WMI对象属性读取、方法调用途径。开发时首先引入System.Management命名空间,此命名空间提供的类为访问各种管理对象提供面向对象的编程接口,使用该命名空间可以查询系统资源信息。本系统主要使用ManagementObject、ManagementClass、ManagementObjectSearcher、ManagementObjectCollection类对象,以下为利用上述对象完成的系统信息类初始化代码。
//初始化CPU计数器
PerformanceCounter pcCpuLoad=new PerformaneeCounter(“Processor”,”%Processor Time”,”_Total”);
peCpuLoad.MaehineName=“.”;
pcCpuLoad.NextValue();
//获取CPU个数
m_ProcessorCount=Environment.ProcessorCount;
//获取物理内存
ManagementClass mc=new ManagementClass(“Win32_ComputerSystem”);
ManagementObjeetCollection moc=mc.Getlnstances();
foreach(ManagementObject mo in moc){
if(mo[“TotalPhysicalMemory”]!=null)
{m_PhysicalMemory=long.Parse(mo[I.TotalPhysiealMemory”].ToString());} 复制代码
主机信息采集过程通过设置计时器定时触发执行,基于采集数据构造SQL插入语句,该语句存放在批处理文件中,通过FTP上传至数据库并设置为自动运行。上传SQL语句的功能代码使用ProcessStartlnfo和Process类实现,ProcessStartlnfo类包含用于启动进程的信息,Process类负责启动本地系统进程。
<font color="#000000" face="宋体" size="3">//声明一个程序信息
System.Diagnostics.ProeessStardnfo Info=new System.Diagnostics.ProcessStarInfo();
//设置外部程序名
Info.FileName=spath+”toftp.bat”;
Info.WindowStyle=System.Diagnostics.ProcessWindowStyle.Hidden;
//声明一个程序类
System.Diagnostics.Process Proc;
//启动外部程序
Proc=System.Diagnostics.Process.Star(Info);</font> 复制代码
2.2分析判断层的实现
采集数据汇总到监控数据库后,由分析判断层完成分析判断工作。该层对各项信息的处理过程主要分为3个步骤:获取基本数据、执行分析判断、更新状态信息。以主机端口状态的分析为例,以下代码完成基于端口基本配置表数据进行端口状态的分析判断,并将分析结果保存至端口状态记录表的过程,其中Public和DataAccess为自定义类,分别提供获取主机动态信息和执行数据库查询、更新的公用方法。
//获取端口基本配置表中指定主机的端口数据
PingReply reply=Public.ToPing(sIP);
string serid=Public.GetSerlD();
dtPort=DataAccess.GetDataTable(String.Format(“select *from cortfig_port where ip=‘{0}’and isvalid=‘Y”‘,sIP));
foreach(DataRow drPort in dtPort.Rows)
{
int port=Int32.Parse(drPort[“port”].ToString());
if(reply.Status==IPStatus.Success&&Public.Scan(sIP,port))
{status=“0”;}
else
{status=“1”;}
//使用主机IP地址、主机名、系统当前时间、端口状态
//等信息构建向端口状态表新增一条记录的SQL语句
sql=String.Format(@”insert into log_port(id,ip,name,logtime,port,status,serid)values(seq—id.nextval,’{0}’,’{1}’,to_date(‘{2}’,’YYYY—mm—dd H24:mi’),{3},’{4}’,’{5}’)”,siP,sName,DateTime.Now.ToString(“yyyy—MM—dd H:mm”),port,status,serid);
//执行新增语句
DataAccess.ExecuteNonQuery(sql);
} 复制代码
2.3结果展示层的实现
结果展示层使用.NET创建Web应用程序,以网页形式呈现功能界面。系统管理员可以查看各集群总体状态以及监控服务器主机性能和数据库状态,图2为集群服务器状态查看页面。
集群服务器状态监控页面
本系统结合ASP.NET与JavaScript技术实现信息展示功能。在应用服务器端,采用IIS作为发布平台,用于ASP.NET页面的解释和Web目录的发布。
由于页面需每隔3分钟从后台数据库获取集群状态信息,因此使用3个ASP.NET Ajax控件:ScriptManager、UpdatePanel、Timer实现页面的定时无刷新显示。
状态信息的显示形式既有DataList复杂数据控件,也有Label简单控件。对于显示各服务器状态的DataList控件,通过设置其DataSource属性和DataBind()方法绑定系统数据库的状态数据。对于显示集群综合状态的Label控件,直接将数据绑定至控件的Text属性,其代码主要如下所示:
<font color="#000000" face="宋体" size="3"> //调用自定义类的查询方法获取指定集群状态信息
DataRow r=INF_GROUP.SelectDetail(this.Request[“groupid”].ToString());
//将数据绑定到页面控件上
this.txbGROUPNAME.Text=r[“GROUPNAME”].ToString();
this.txbDESCRIBE.Text=r[“DESCRIBE”].ToString();
this.txbGROUPLOGTIME.Text=““LOGTIME”].ToString();
this.txbGROUPZT_DM.Text=r[“ZT_MC”].ToString();
this.txbGROUPBZ.Text=r[“BZ”].ToString();
//根据集群状态设置文字颜色
this.txbGROUPZT_DM.ForeColor=Framework.Web.StyleCommon.StatusColor[Int32.Parse(r[“ZT_DM”].ToString())];
this.txbGROUPBZ.ForeColor=Framework.Web.StyleCom_moll.StatusColor[Int32.Parse(r[“ZT_DM”].ToString())];
//设置查询历史记录超链接
this.groupid=r[“groupid”].ToString();
this.HyperLinkGROUP.NavigateUrl=String.Format f”javascript:navigate(‘../LOG_GROUP/P_LOG_GROUPDataGrid.aspx?groupid={0}’,’查看历史记录’)”,this.Request[“groupid”].ToString());</font> 复制代码
3、系统应用效果分析
3.1监控效果
系统监控结果显示,当服务器状态发生波动时,管理员能在第一时间得到报警提示,报警信息主要分为以下6类:
(1)CPU占用过高引起的报警。该类信息为最常见的报警信息,当CPU占用率超过阈值时,自动弹出报警页面,大多数情况下该问题由数据库查询占用大量CPU资源引起,管理员可根据报警信息及时做进一步分析。
(2)文件系统占用过高引起的报警。此类报警信息节省管理员逐集群逐主机逐目录的巡查时间?管理员及时处理问题,防止数据库归档、数据库实例目录、应用系统目录等空间不足而导致系统挂起。
(3)数据库表空间占用过高引起的报警。目前很多系统使用了裸设备 ,表空间不会自动扩展,管理员需结合空间使用的预测功能,适时对表空间进行扩容。
(4)主机无法连接引起的报警。发生概率较小但影响非常严重,原因可能为主机故障或网络故障。监控系统定时对所有主机进行Ping巡查,为防止网络一时不稳定引起的误报,系统会在第一次Ping失败时发起第二次检查,以保证结果的有效性。
(5)应用系统故障引起的报警。监控系统通过对特定端口的检测确定应用系统的状态,当某一应用实例发生故障时,相关端口检测失败进而引发报警。
(6)RAC数据库故障引起的报警。有的系统进行主机双机热备,数据库采用RAC模式。当一台主机发生故障时,其地址和服务自动漂移至另一主机,对外仍可正常提供服务,用户无法感知主机已发生故障,普通的Ping检测也能正常通过,但通过对数据库的连通性检查可发现异常。主机发生漂移时,虽然失效主机的数据库服务名仍可正常访问,但对其SID的访问已经失效,从而引发报警。
3.2简化日常管理
以往查询主机和数据库信息需要很多复杂的操作,现在普通管理人员通过一个页面就可以方便快捷地看到关键点信息。由于采用B/S结构,任何管理用户只需在任意一台连接内网的计算机上打开浏览器即可进行监控,数据均在监控系统的数据库中,增加浏览客户端不会对受监控目标主机增加任何负担。
由于大部分日常监控工作均可自动完成,系统管理员的工作量大幅减少。对于日常运维过程中出现的问题,系统通过监控页面自动弹出报警页面,从而实现一个管理员同时管理几个集群几十台服务器。与此同时可以将管理员处理问题的历史经验加入知识库中,为相关问题的解决提供借鉴。
3.3提供决策支持
主机CPU、内存运行隋况的详细记录为各分区资源合理调配提供定量分析依据。通过本系统,在保证服务器稳定运行的前提下,可以实现资源的最大化利用。
例如管理员可以通过图3、图4的2条CPU曲线进行如下分析:全月性能平稳,主要压力集中于工作时间,为正常业务压力,CPU负荷基本不超过75%。此主机配置为12CPU,目前性能良好,短期不需要增加配置。实施统筹资源配置时,可参考月线和日线进行规划,在其他分区资源紧缺情况下,甚至可以考虑从此分区划拨资源。
根据已有分区的CPU、内存历史曲线,分析其历史峰值及空闲资源,为主机分区扩容所需的分区规划和资源调配提供定量依据。当新上一个系统时,根据图形化的运行状态,从主机层面推断系统是否步入稳定运行期。通过数据库空间的预测功能,对各表空间的分配进行合理规划,并为长期存储规划提供依据。
4、结束语
本系统满足大型企事业对于大规模服务器数据的采集分析、预警及决策支持的需求。实际应用结果表明,系统管理员可以监控多个集群的大量数据库、主机、服务器的信息,灵活配置各种指标,查看综合信息,实现人力、物力和时间的节省,极大提高管理效率。