分类:
2009-07-23 18:04:54
RSCT 资源管理及监控 |
余 长勇 (), 软件工程师, IBM 中国软件开发中心 2008 年 8 月 06 日 随着大规模集群系统的广泛应用,系统的监控变得日趋复杂,对于系统各种指标数值的监控的显得愈发重要。IBM RSCT 中的 ERRM(Event response resource Manager) 组件为这一需求提供了一套有效的解决方案。对于常见的系统指标数值,例如文件系统使用状况,CPU 工作状况,内存使用状况以及网卡各种指标值等都提供了很好的支持。同时,用户也可以很方便地定制各种系统资源监控。本文将详细阐述 RSCT ERRM 在集群系统监控中的应用。 RSCT(Reliable Scalable Cluster Technology)是一系列软件组件的集合,为 IBM 许多集群软件提供可用性,可扩展性及易用性等方面的底层支持。RSCT 包含以下几个组件,本文主要讨论 RMC 子系统和核心资源管理器 ERRM
图 1 显示了 RSCT 中资源的架构, RMC 子系统是整个 RSCT 的核心,它为其它组件提供了一套通用的接口,这样 RSCT 的上层客户软件无需关心各个底层的资源管理器的运行细节,只要通过 RMC 提供的接口 (RMC API) 与 RSCT 进行通信。同时,底层的资源管理器及服务只需实现 RMC 指定的接口 (RMF API) 来提供相应的功能。本文中的 ERRM 就是 RSCT 核心资源管理器的一种,它主要用于系统监控。
RSCT 中最基础的概念就是资源 (resource)。所谓资源,在 RSCT 中可以是任意的物理或者逻辑上的实体,例如集群中的一个主机节点,主机上的一个网卡或主机操作系统的根文件系统等等,资源有许多不同的属性,所有拥有相同属性而又有不同属性值的资源组成了资源类 (resource class),资源类负责发现资源,创建资源,删除资源等等。一个资源类隶属于一个资源管理器(resource manager),而资源管理器可以提供任意数量的资源类。RSCT 几乎所有的功能都和资源以及资源类相关。 在 RSCT 的各个包被正确安装以后可以通过 RMC 的命令行接口来显示系统中的关于资源和资源类的各种信息。 2.1.1. 显示资源类 / 资源定义 通过 RMC 的命令行接口 lsrsrcdef(该命令位于目录 /usr/sbin/rsct/bin 中)可以显示关于资源和资源类的定义信息,在不带任何参数的情况下,该命令会输出系统中所有存在的资源类。 示例 1 演示了如何使用 lssrcdef 命令来查看系统中所有的 RSCT 资源类(注:该示例是笔者测试环境中的输出,实际情况可能与此会有不同):
可以将资源类作为参数传递给命令 lsrsrcdef 并加上 -c 选项显示资源类本身的定义,示例 2 是将 IBM.FileSystem 资源类作为参数传递给命令 lsrsrcdef 的输出,可见 IBM.FileSystem 属于资源管理器 IBM.FSRM:
资源类本身也有一些属性可以通过 lsrsrcdef -c -A p|d resource_class 来进一步显示,其中 -A 选项表示希望显示的属性是永久属性(-A p), 还是动态属性(-A d), 这类属性值可能随时发生变化。如果要显示资源相关信息,只要去掉 lsrsrcdef 命令中的 -c 选项并加上 -A d|p 选项,其中 -A d 表示显示动态属性,-A p 显示永久属性。示例 3 显示 IBM.FileSystem 资源的动态属性定义:
可以看出 IBM.FileSystem 资源有三个动态 (-A d 选项 ) 属性,同样的方法可以显示出资源的永久属性。 2.1.2. 显示资源类 / 资源属性值 RMC 同样提供了用于显示资源类和资源属性值的方法 rmc 接口 lsrsrc。例如,希望得到系统中所有的 IBM.FileSystem 资源及其属性值。可以通过 lsrsrc -A d|p|b -s “selection_string” IBM.FileSystem 来得到。其中 -A 选项值的 d 代表动态属性,p 表示永久属性,b 表示两者,-s 选项用于过滤希望显示的 IBM.FileSystem 资源信息。示例 4 显示了 Name 属性不等于 (‘/’) 的 IBM.FileSystem 资源的永久属性值:
2.1.3. 创建资源 一般情况下并不需要手动去创建资源,因为在各个资源管理器初始化的时候都会自动调用资源类的发现程序去检查系统当前属于该资源类的资源并存储。例如对于 IBM.FileSystem 资源类,它属于资源管理器 IBM.FSRM,当 IBM.FSRM 初始化的时候,就会驱动 IBM.FileSystem 发现程序去检查系统当前存在的文件系统资源并存储起来。但有时候还是得手动创建一些资源,例如 ERRM 的 IBM.Condition 资源。创建资源的 rmc 接口为 mkrsrc。将 -e 选项和资源类名作为 mkrsrc 的参数时,会显示创建该资源类必须指定的属性以及可选属性的例子。示例 5 的输出显示了如何创建 IBM.FileSystem 资源:
2.1.4. 修改资源类 / 资源永久属性值 对于已经创建或者自动发现的资源,可以通过 rmc 接口 chrsrc 来修改资源的永久属性值,注意并不是所有的永久属性值都可以修改的,资源只读属性是无法通过 chrsrc 来修改的。可将属性和资源类作为参数通过 2.1.1 中 lsrsrcdef 接口检查资源属性是否可以手动改变,动态属性值一般不通过 rmc 修改,而是随着系统变化,属性值自动由各个资源管理器根据一定的频率收集设置。 可以通过 -s 选项来对满足特定条件的某个或者某些资源的属性值进行修改。示例 6 是修改 Name 属性等于”FSCondition”的 IBM.Condition 资源的 EventExpression 属性值:
除了 -s 选项,可以通过指定在整个 cluster 中是唯一的资源句柄(resource handler)属性值,来限定某个资源修改属性值,资源句柄可以通过 lsrsrc 得到,具体请参见参考文献 2。 修改资源类的属性值,同样使用 chrsrc 接口,但比资源多一个 -c 选项表示资源类。 2.1.5. 删除资源 对于系统中的各种资源,可以通过 rmc 接口 rmrsrc 删除。如 chrsrc 接口一样,rmrsrc 支持 -s 选项和基于资源句柄的形式。示例 7 表示删除系统中所有 IBM.Condition 资源:
RSCT 域表示集群节点配置目的。集群中的节点可以配置为 high availability( 高可用性 ) 或者 manageability( 可管理性 ),这样可以将节点所处的域或者环境分为两种: 1)Peer Domain 2) Mangement Domain(管理域); Peer Domain 表示该节点位于这样一个集群系统中,集群系统中的节点的地位都是等同的,一个节点知道集群中其余所有节点的信息,这为高可用性应用提供了条件,因为从外界来看,整个集群是一个整体,任何一个节点宕机都可能有剩余节点来继续提供相应的服务;Management Domain,这种集群里,一个管理服务器(Management Server)管理若干个被管理节点(Managed Node),这种 Domain 中,被管理节点之间互相不知道对方的信息。只有管理服务器知道所有的被管理节点的信息,这种集群主要是为了简化系统管理,所有的管理工作都可以在管理服务器上完成。 通常的集群往往是 Peer Domain 和 Mangement Domain 的组合。如图 2 所示:Node1,Node2,Node3 是管理服务器的被管理节点同时位于 PeerDomain1,Node n-1,Node n 类似。 2.2.1. 建立 Peer Domain 建立 Peer Domain 一般可以遵照以下步骤: 1)列出需要加入到该 PeerDomain 的所有节点,确保节点之间都是互通的(各个节点 /etc/hosts 里面都有所有集群节点的 Host 名与 IP 信息)而且已经正确安装 RSCT 软件包。如有 NodeA,NodeB,NodeC,NodeD 需要加入 Peer Domain。 2)确定 1)中的一个节点为 originator 节点,如 NodeA 3)在 NodeB,NodeC,NodeD 上执行 preprpnode NodeA,使得节点 NodeA 和这些节点间建立信任关系; 4)在 Originator 节点如 NodeA 上,执行 mkrpdomain 5)在任一个节点上执行 startrpdomain 6)Peer Domain 建立以后可以通过 addrpnode,rmrpnode 增加和减少集群中的节点。通过 stoprpdomain 使得整个集群 offline,通过 stoprpnode/startrpnode 停止和启动节点。 如果从资源的角度分析 Peer Domain 的建立,相当于各个节点的系统在后台创建了两种隶属于资源管理器 IBM.ConfigRM 的资源类 IBM.PeerDomain 和 IBM.PeerNode 的资源。同样可以通过 lsrsrc 命令显示这两种资源的属性值。 2.2.2. 建立 Management Domain 对于建立管理域(Management Domain),目前是通过基于 RSCT 的上层的软件 CSM 实现的。将集群中的一个节点作为管理服务器(Management server),其余节点作为该管理服务器的被管理节点。大体步骤如下:
以上步骤成功执行以后,整个管理域就建立起来了。从资源的角度分析 Management Domain 的建立,管理服务器在后台创建了隶属于资源管理器 IBM.DMSRM 的资源类 IBM.ManagedNode 的资源,每个被管理节点对应一个 IBM.ManagedNode 资源以存储被管理节点的信息;而被管理节点则创建了对应于 IBM.CSMAgentRM 的资源类 IBM.ManagementServer 的资源以存储管理服务器的各种信息。
资源管理器 IBM ERRM 提供了三个资源类 IBM.Condition,IBM.EventResponse,IBM.Assosication。系统资源监控是 ERRM 主要的功能,即如果系统在某一时刻某个条件 (condition) 满足,与这个条件关联的预先定义的动作 (response) 就会被触发。这里的条件对应于 ERRM 的 IBM.Condition 资源类,它用于定义用户关心的系统资源的状况,如某个节点的 /tmp 文件系统使用比例大于 90% 就是一个条件;而动作对应于 IBM.EventResponse 资源类,它用于定义在某个条件满足时,用户想采取的措施,如当上面的 /tmp 使用大于 90% 时使用邮件通知系统管理员就是一个动作。另外,ERRM 的还有一个资源类 IBM.Association,一个 IBM.Association 资源用于关联一个 IBM.Condition 资源和一个 IBM.EventResponse。这样只需定义多个 IBM.Association 资源用于关联不同的 IBM.Condition 资源和 IBM.EventResponse 资源就可以重复利用已经存在的 IBM.Condition 资源和 IBM.EventResponse 资源。同时,只有在 IBM.Condition 资源和 IBM.EventResponse 资源被一个活动的(Active)的 IBM.Association 资源关联的时候,这些条件和相应的动作才会触发。 根据需要,可以创建监控不同域范围的 IBM.Condition 资源,然后关联相应的 IBM.EventResponse 资源来达到资源监控的目的。其一般步骤如下:
上面 1),2)两步在上面的章节中已经介绍过。下面阐述如何具体的 IBM.Condition,IBM.EventResponse 以及 IBM.Association 资源。 根据 IBM.Condition 资源监控范围的不同,可以将系统监控分为对独立系统资源的监控,对 Peer Domain 范围内系统资源的监控和对 Management Domain 系统范围资源的监控。而这只需在创建 IBM.Condition,将不同的参数值传给命令 mkcondition 的 -m 选项。 示例 8 是通过 IBM.ERRM 提供的接口 mkcondition 创建 IBM.Condition 资源的一般形式:
下面是其中的重要选项涵义,
示例 9 是在 Peer Domain 中为了监控整个 PeerDomain 中所有节点的根文件系统的空间使用百分比创建 IBM.Condition 资源的例子:
表示如果集群中的任意一个节点的根文件系统使用超过 90%,触发相应的事件;然后转而检测是否该根文件系统使用空间小于 85%,如果小于 85% 则重新检测是否超过 90%。如此继续下去。此外还可以通过 -c 选项拷贝已经存在的 IBM.Condition 资源的定义并在此基础上进行修改。 除了可以用 IBM.ERRM 提供的接口 mkcondition 创建 IBM.Conditon 资源,同样可以使用 rmc 提供的接口 mkrsrc,其本质都是通过 rmc api 完成相应的资源创建。示例 10 是与上面的 mkcondition 命令的相对应的 mkrsrc 命令形式:
已存在的 IBM.Condition 资源可以通过 chcondition 命令修改,对应于 rmc 的接口为 chrsrc。承接上面的例子,示例 11 表示如果希望系统在文件系统空间超过 95% 的时候触发相应的事件使用 chcondition 修改 IBM.Condition 资源的例子:
示例 12 表示对应于 chcondition 命令的 chrsrc 命令形式
显示系统中所有或者某个 IBM.Condition 资源可以通过 lscondition 命令 , 示例 13 展示如何显示 PeerDomainRootFSCondition 的定义:
示例 14 表示对应于 lscondition 的 lsrsrc 命令形式 :
如果希望删除该某个 IBM.Condition 资源,可以通过 rmcondition 或者 rmrsrc,承接上面的例子,示例 15 显示如何删除一个条件:
示例 16 表示对应于 rmcondition 的 rmrsrc 命令形式:
只有 IBM.Condition 条件还不足够完成所有的功能,在条件满足的时候,必需能够触发相应的动作,才能达到资源监控的功能,而 IBM.EventResponse 资源的作用正在于此。 示例 17 是 IBM.ERRM 组件提供的 mkresponse 接口创建 IBM.EventResponse 资源的其一般形式:
下面创建的 IBM.EventResponse 资源表示在工作日工作时间时执行动作 NotifyAdmin,其目的是发送短消息给系统管理员有相关信息: mkresponse -n NotifyAdminVia -d 2-6 -t 0900-1600 -s “/bin/sendSMS” NotifyAdminResponse 其中 sendSMS 是用户自己自定义的脚本用于发送短消息。 如果希望修改已经定义的 IBM.EventResponse 资源,可以通过 chresponse 完成。示例 18 表示对于上面的 IBM.EventResponse 资源,如需增加一个动作序列,除了发送短消息给系统管理员,还希望通过在 console 上输出一些信息通知已登录的用户 , 并改为一周全天候执行所有动作。
显示系统中所有或者某个 IBM. EventResponse 资源可以通过 lsresponse 命令。示例 19 表示显示 NotifyAdminResponse 资源定义:
示例 20 表示使用 rmresponse 删除 IBM.EventResponse 资源:
对应于 mkresponse,lsresponse,chresponse 和 rmresponse 的 rmc 接口分别为 mkrsrc, lsrsrc, chrsrc 和 rmrsrc, 这里不再赘述。 有了 3.1 中创建的 IBM.Conditon 资源和 3.2 中创建的 IBM.EventResponse 资源,我们就可以创建 IBM.Association 资源来关联两者。可以通过 mkcondresp 或者 startcondresp 来创建 IBM.Association 资源,前者只是创建 IBM.Association 资源但并不使其处于 Active 状态,后者不但可以使已经存在的 IBM.Association 资源变成 Active 状态,同时如果将一个 IBM.Condition 资源和一个 IBM.EventResponse 做为参数传给,还会自动创建一个 IBM.Association 资源并使之处于 Active 状态。示例 21 表示 mkcondresp 的一般形式:
其中 condition 为按 3.1 节中的步骤创建的 IBM.Condition 资源,response 为按 3.2 节中的步骤 创建的 IBM.EventResponse 资源。示例 22 表示 startcondresp 的一般形式 :
参数同上。 可以通过 lscondresp 不带参数列出当前系统中的所有的 IBM.Association 资源及其状态时 Active 还是 Not Active;将 IBM.Condition 资源或者 IBM.Condition 资源与 IBM.EventResponse 资源的组合作为参数传给 lscondresp 命令,列出对应于某个 IBM.Condition 资源的 IBM.Association 资源的当前状态。示例 23 表示 lscondresp 的一般形式:
如果希望停止监控某个处于被监控状态的 IBM.Condition 资源,可以使用 stopcondresp 命令。
RSCT 中最基本的概念就是资源类和资源,它为各种集群系统的各种软硬件实体提供了抽象,从而可以得到这些实体的各种属性值。而 IBM.ERRM 为集群系统的系统监控提供了很好的解决方案,通过在设置不同的 Domain 监控范围,提供对集群系统中各种资源当前状况的监控。 默认的 RSCT 的安装已经提供很多可以直接使用的系统监控资源。此外,定制和扩展用户特定的系统资源监控也不复杂,用户可以阅读参考资料中的关于 IBM.Sensor 的相关章节。 学习
获得产品和技术
|