Solaris技术

星期五 六月 16, 2006

Fault Management简介

SUN中国软件技术中心罗浩/Benny Luo Benny.luo@Sun.com

简介



作为Sun信息系统的基石,Solaris 10目前既可支持SPARC处理器,同时可以支持AMD Opteron Intel Xeon处理器的服务器. Solaris 10上有600多个新特性,之前和大家分享过Solaris Container的一些经验,现在想和大家分享一下Solaris 10另外一个同样很棒的特性 – Fault Management.



  1. 简介

  2. Fault Management 概念和架构

  3. Fault Management 流程

  4. 管理Fault Management

  5. 资源



Fault Management 概念和架构

Fault ManagementSolaris 10全新的部件,它和Service Management Facility(SMF)共同构成了Solaris 10预测性自我修复功能. 预测性自我修复功能使 Sun 系统能够准确地预知组件故障,并在故障出现之前就将其修复,其中SMF主要针对的是客户的应用和软件,而Fault Management则主要是针对系统的硬件. Fault Management作为一个中间件把系统产生的硬件错误事件和相应的分析并且对硬件错误事件提供响应行为的软件联系起来, 这一系列的套件巩固了系统的高可用性和提高系统的自我修复能力,令到操作系统能够更加无缝稳定地对外服务。

Fault Management里包含了一套分析引擎 (Diagnostic Engine),分析引擎主要负责利Ereport报告自动诊断问题, Fault Management的另外的一个组成部分是它的代理(Fault Management Agent), 能够自动地对出现的故障作出响应,比如说如果CPU出现了问题,它能够自动地把CPU从服务中隔离出来,并且发出相应的警告信息给到系统管理员,或者提供这些信息给其他的本地或者远程的管理软件。

Fault Management 流程













这里介绍了Fault Management的具体工作流程图:

1Error Handler

Error Handler随时随地监测系统,当发现有系统有错, 尝试捕捉足够的数据来分析潜在的问题, 生成适当的详细的描述问题的Ereport事件并且发送给对应的分析引擎。


2Fault Manager

Fault Management通过Ereport事件异步地分析系统存在的问题, 分析这些系统硬件错误是否达到生成系统硬件故障事件(Fault Event)发送给FMA Agent


3FMA Agent

一旦诊断问题确定, FMA Agent自动地对故障进行隔离和自我治愈的工作. 例如,一个被诊断为有问题的硬件部分可被重新配置或屏蔽直到它被重新修复。


管理Fault Management


好,下面我们来看看Fault Management具体的管理:

1fmd – 这是Fault Management的最重要的daemon, 负责侦测错误, 分析问题,初始化自我修复功能

2fmadm – 用来查询和更改Fault Management配置的命令。

3fmstat – 用来报告fmd和它的模块的静态信息的命令。

4Fmdump – 用来显示系统错误和系统故障信息的命令。


掌握好这几方面相关的信息和命令,你就可以操作自如地使用Fault Management啦。

首先我们来看看fmd:

Fault Management daemon 包括了下面几个部件:

  1. Diagnosis engines – 分析引擎,系统允许有多个分析引擎,订阅系统硬件错误报告和分析系统硬件错误报告并判断是否生成系统硬件故障事件发送给Agent

  2. Agent – 收到系统硬件故障事件后自动智能地修复故障。

  3. Schemes – 负责转换信息从一种协议变换为另一种协议。

这些fmd的部件都作为模块的插件安装在Fault Management Daemon上:



这些模块摆放在以下的目录里面:

  • /usr/platform/`uname -i`/lib/fm/fmd/plugins

  • /usr/platform/`uname -m`/lib/fm/fmd/plugins

  • /usr/lib/fm/fmd/plugins

系统按顺序搜索Fault Management模块,如果一个目录不存在,自动地前进到下一目录搜寻,直到找到为止。

分析引擎(Diagnosis engines)把Ereport事件传进来的数据和最终的结果按类别储存到案例 (Case)中,大家可以理解成把相关某个特定硬件问题的信息放进一个虚拟的文件夹,比如同个CPU的相关错误信息都放在同一个Case, 每一个Case都有一个唯一的Universal Unique Identifier (UUID) 作为标识. 分析引擎在同一个案例中分析错误信息是否足够达到构成生成硬件故障事件的条件,如果已经达到,就生成系统Fault故障事件传送给FMA

我们再来看看fmadm命令,fmadm是用来查询和更改Fault Management配置的命令,包括了以下一系列的子命令:

  • config – 显示Fault Management的配置

下面是fmadm config 输出的一个例子:




上面的输出显示了系统目前已经加载的各种模块, 包括有分析引擎和Agent

  • faulty – 显示故障所在的资源

fmadm faulty 命令使用FMRIUUID显示了所有故障硬件的资源,UUID已经说过,FMRI全名叫fault managed resource identifier,用URI字符串表示,它唯一地定义了系统中每一个受Fault Management控制的硬件。


如果系统健全,那么使用fmadm faulty命令会呈以下输出:




如果系统某部分硬件有故障,将会显示出具体的State, Resource / UUID,比如:


# fmadm faulty 
STATE RESOURCE / UUID
-------- ----------------------------------------------------
faulted mem:///component=Slot%20B%3A%20J3000
dbdc7f15-848c-cbdc-b47f-deb9d9fff5c9
-------- ----------------------------------------------------

我们可以看到,在命令行的输出中,'faulted'所代表是硬件状态,'mem:///component=Slot%20B%3A%20J3000' FMRI表示,所代表的是系统其中一个硬件资源,'dbdc7f15-848c-cbdc-b47f-deb9d9fff5c9'UUID表示,所代表的是一个案例。

state一列中显示的是faulted的状态,在FMA中,使用数据库保存事件中各种硬件的状态,状态分别包括:

  • ok - 系统硬件资源良好

  • unknown – 系统硬件资源出现问题但不明原因。

  • degraded - 系统资源性能下降

  • faulted – 系统硬件资源出现问题并且已经从系统中屏蔽。

    这些硬件资源状态可以让你更好地知道系统的健全性。

  • repair fmri – 手动修复硬件, 只有当系统不能自动修复控件,才需要使用该命令。

比如上面的例子, 如果系统不能自动修复,就可使用fmadm repair进行手动修复:

# fmadm repair mem:///component=Slot%20B%3A%20J3000 
fmadm: recorded repair to mem:///component=Slot%20B%3A%20J3000

另外还有一些其他的子命令,在次简单描述一下:

  • flush fmri – 刷新特定的fmricache.

  • load path - Loads 特定的插件模块

  • unload module - Unloads t特定的插件模块

    ......

看完fmadm, 让我们来了解一下fmstat的命令:

fmstat用来报告Fault Management daemon和它的模块的静态信息的命令, 使用非常简单,直接在系统console上打命令即可:



具体的每行含义大家可参照'man fmstat'.

当然,如果你只想看指定的模块信息的情况,只需要加上相应的option即可,比如:



同样option也可参照'man fmstat'.

最后我们来看看fmdump:

它是用来显示系统错误和系统故障信息的命令。




所有系统故障的日志都放在/var/fm/fmd目录下,并且只能通过fmdump命令来查看,如果系统由使用到目前运行都没有问题,那么日志将会是空的,就如上面显示一样。

一但系统出现故障,它将会故障事件写到日志里面,我们可以用:

fmdump -e 选项来显示日志内容:

# fmdump -e 
TIME CLASS
Jul 26 12:49:27.6137 ereport.cpu.ultraSPARC-IIIplus.ce
fmdump -V 选项显示事件中更为详细的信息:
# fmdump -Ve
那么一但这个correctable memory错误发生足够多次,就会触发分析引擎生成故障事件。

故障事件日志显示了故障的时间,UUID和信息的唯一标识符。

# fmdump
TIME UUID SUNW-MSG-ID
Jul 26 12:52:10.6786 dbdc7f15-848c-cbdc-b47f-deb9d9fff5c9 SUN4U-8000-1A

我们可以使用http://www.sun.com/msg来查找信息辩识符的代表意思:







fmdump还有其他option可以列举其他的信息,比如说'-t'可以看特定时间或之后产生的事件,具体参照'man fmdump'.


资源:

www.opensolaris.org/os/community/fm/

http://www.opensolaris.org/jive/forum.jspa?forumID=49

书籍:Solaris 10红宝书

Comments:

Post a Comment:
Comments are closed for this entry.

Calendar

Feeds

Search

Links

Navigation

Referrers