HPMC/ServiceGuard背景知识和原理
发表于:2007-07-04来源:作者:点击数:
标签:
1. HP MC/ServiceGuard背景知识 HP MC/ServiceGuard 服务器 应用软件可以帮助你使用800系列的HP9000服务器建立一个高 可靠性 的集群服务器系统。一个高可靠的系统是指即使计算机系统出现硬件和软件的故障,运行在该系统上的服务仍然可以继续使用,在一个环
1. HP MC/ServiceGuard背景
知识 HP MC/ServiceGuard
服务器应用软件可以帮助你使用800系列的HP9000服务器建立一个高
可靠性的集群服务器系统。一个高可靠的系统是指即使计算机系统出现硬件和软件的故障,运行在该系统上的服务仍然可以继续使用,在一个环节(可能是一个系统处理单元、硬盘、LAN,软件系统等等)出了问题的时候,系统中的臃余部件可以接管错误部位的运行任务。 MC/ServiceGuard和其他高可靠部件一起实现并且协调这种发生错误时候的转换。
一个MC/ServiceGuard集群系统就是利用网络把一些800系列的HP9000服务器(称为节点)连接起来并且在系统中有足够的臃余硬件和软件来保证任何一个单独的错误并不显著的影响整个系统所提供的服务。
javascript:window.open(this.src);" style="CURSOR: pointer" onload="return imgzoom(this,550)">
图1-1是一个典型的集群系统的配置图,图中pkg A和pkg B分别是两个服务服务器,通过臃余网络连接。
2. 理解HP MC/ServiceGuard运行的硬件环境
1) 集群系统组件的臃余:为了保证系统的高可靠性,典型的集群系统组件通常情况下都应该有所臃余,比方说多个系统处理单元(SPU),两个或者两个以上的独立磁盘阵列;这样的方案能够避免单一的系统错误。通常情况下,系统的臃余度越高,在发生错误的时候能够保证你的程序、数据和支撑服务能够
安全能力越高。除了硬件的臃余外,还必须要有一套支撑软件来实现在系统出错的时候控制服务(程序、数据)从一个SPU到另外一个SPU的转移。MC/ServiceGuard通过以下几个方面提供这种保证:
A. 在LAN出问题的时候MC/ServiceGuard能够切换到备用的LAN上去或者把相关的应用转移到备用的节点上;
B. 如果一个SPU出了问题,MC/ServiceGuard能够保证在最短的时间内将应用从出问题的SPU上转移到没有出问题的SPU上去;
C. 当应用程序出问题的时候,MC/ServiceGuard保证能够在该节点上从新启动应用程序或者转移到其他节点上去启动程序。
当然,MC/ServiceGuard也能够在你需要维护或者升级一个SPU的时候让你方便的将这个SPU上的应用程序转移到其他的SPU上去运行。目前为止,MC/ServiceGuard集群系统支持的最大节点数为8,可以在共享总线上同时4个节点上连接SCSI的硬盘或者磁盘阵列,如果是光钎总线的或,磁盘阵列可以同时连接8个节点。
2) 网络组件的臃余:在网络连接中IP地址对应着网络接口(网卡等),分配有IP的接口叫做主接口,没有分配IP地址的接口叫做备用接口。当MC/ServiceGuard侦测到主接口发生错误的时候,它会将IP地址和绑定在这个IP地址上的服务全部转移到备用接口上去。
图2-1说明了网络臃余,对于每个Pkg,Pkg A和Pkg B来讲,都有一个主接口网卡(Primary LAN Card)和一个备用接口网卡(Standby LAN Cards),并且有SUBNET A和SUBNET B两个网络连接。
3) 储存磁盘的臃余:在集群系统中每个节点都有自己的跟磁盘,并且每个节点都与多个在集群中的磁盘物理连接,从而使得不止一个节点可以访问与其应用程序相关的数据。这种访问能力由逻辑卷管理器(LVM)来管理。在同一时间内一个磁盘卷组并不能被超过一个的节点所控制,但是当应用程序转移的时候,这个磁盘卷组就可以被备用节点访问。
MC/ServiceGuard支持Single-ended和Fast/Wide类型的SCSI硬盘,同时支持HP FiberLink和FibreChannel。(注意:并不是所有的SCSI硬盘都支持,可以查阅HP 9000服务器的配置手册)
为了保护重要数据,需要使用以下两种方法中的一种来保护:一是使用镜相磁盘,一是使用了RAID或者PV Links的磁盘阵列。图2-6是使用磁盘阵列的集群系统。
3. 理解HP MC/ServiceGuard软件的工作原理和组件
图3-1是MC/ServiceGuard软件的组件图和其所处的层次结构。最底层是操作系统本身(HP-UX Kernel with LVM),然后是组成MC/ServiceGuard的三层组件:Network Manager、Cluster Manager和Package Manager。
1) Cluster Manager的工作原理:
Cluster Manager是用来初始化集群系统、监控集群系统的“健康”情况,辨别节点产生的错误,管理和配置新节点加入到集群系统中和一个节点从集群系统中离开。Cluster Manager在每个节点上以监听进程(daemon process)的形式运行,在集群系统的启动和重新配置过程中,一个节点被选择用来做为集群控制点(Cluster coordinator)。虽然所有的节点都执行同样的集群管理功能,但是集群控制点是节点交互通讯的中心点。
集群系统的配置参数包括集群的名字和节点、用于立即转移的网络参数、集群锁(注意实际上是磁盘卷组)磁盘信息、时钟脉冲参数。集群系统参数可以使用SAM输入或者编辑ASCII格式的配置文件模板。你输入的参数用来编译生成一个分发到各个节点的二进制文件,各个节点这个二进制集群配置文件必须是一样的。
通常在第一次建立集群系统的时候和在对整个集群系统进行维护后需要手动启动整个集群系统。在启动集群系统之前,所有的节点必须都有同样的一个集群配置文件。系统管理员可以从SAM引导系统或者在一台工作站上使用cmruncl命令,这个命令必须是在集群系统开始工作前使用,也就是说没有任何一个节点在运行cmcld监听进程。
在启动过程中,cluster manager检查在启动命令里面定义的所有节点是否是合法的节点,是否已经启动并且运行,然后开始形成集群状态,能够相互通信。以上过程都正常启动后,一个集群系统就形成了。
在集群系统中有一个比较重要的概念叫heartbeat message(直接翻译过来叫心跳信息,笔者认为不好表达,所以直接引用)。每一个处在集群系统中的服务器通过一个监控LAN或者RS232的串口向集群控制点定时发送一个heartbeat message,如果集群控制点在规定的时间内没有收到这个heartbeat message的话,就会重新构架整个集群系统。
当集群系统里面的所有节点都产生错误的时候,系统会自动重启,这种情况一般是因为电源断电使得所有的SPU全部down机造成的。设置自动重启的办法是在配置文件/etc/rc.config.d/cmcluster把标志AUTOSTART_CMCLD置为1。
集群锁(Cluster Lock)在集群系统中也是一个很重要的概念。集群锁其实是磁盘卷组中的被所有节点共享的磁盘空间,所在的磁盘卷组和物理卷名字在集群配置文件中指定。当一个正在运行的集群系统发生错误,MC/ServiceGuard试图重新构架新的集群系统,把原来的系统拆分为两个相等的子集群系统的时候,集群锁被使用。获得集群锁的那个子集群系统形成一个新的集群系统,从而避免两个子系统同时运行,当两个子系统节点数目不一样的时候,数目大于50%的那个子系统会获得机群锁。如果你使用的是两个节点的集群系统的话,你必须配置集群锁;当两个节点之间的通讯中断的时候,集群锁所在的那个节点就会代替整个集群系统运行,另外一个节点就会停机。如果没有集群锁的话,任何一个节点出现错误停机都将造成另外一个节点停机使得整个集群系统停机。
2) Package Manager的工作原理:
集群系统中每一台机器上都运行一个程序包管理器(Package Manager)的实例,在集群控制点服务器上运行的就叫程序包管理点(Pachage Coordinator)。程序包管理点的作用是确定在什么时间、什么地方运行、停止和删除程序包。程序包管理器的作用是根据用户控制脚本指令运行、停止程序和服务,根据所监控的资源作出反映。
一旦一个集群系统被建立,在每个节点上的package manager就启动了该节点上的程序组,package manager通过启动包控制脚本(加start参数)来启动一个程序包,这个脚本完成以下一些工作:使用逻辑卷管理器命令激活该程序所需要的磁盘卷组,从活动卷组加载文件系统到本地节点,使用cmrunserv命令启动在包里面配置好的每一个程序,这个命令同时启动了对服务的监控。
运行包启动脚本加stop参数的时候可以停止一个程序包的运行。比方说,系统管理员在SAM下的程序包管理菜单中选择“停止程序包”,那么这个程序包将被停止;同样,停止一个节点的命令会引发package manager停止在该节点的所有程序包,也就是执行加了stop参数的程序包控制脚本。这个脚本使用cmhaitserv命令来停止每一项程序服务,卸载程序包加载的文件系统。
3)Network Manager的工作原理
network manager的主要目的是监控和恢复网络设备(网卡等)的错误,保证用户服务的高可靠性。实际上就是对主网络接口为每个服务分配IP地址,同时监控网络设备的健康状况,在必要的时候转移服务的运行。
每个节点对于处于工作状态的的网络接口都应该分配一个IP地址,这个静态的IP地址在文件/etc/rc.conf.d/netconf中配置。一个静态的IP地址不可以转移到另外一个节点去,但是可以在需要的时候转移给备用的网络接口。静态的IP地址与程序包并不关联,它被用来在网络中传送heartbeat message。
除了静态的IP地址以为,你可以跟每一个程序包分配一个或者多个唯一的IP地址。这种IP地址叫住可重分配的IP地址(也叫动态IP地址),因为这种IP地址可以动态从一个节点转移到另外一个节点。在一个集群系统中,你最多可以为30个程序包分配200个这种可重分配的IP地址。静态和动态的IP地址在LAN出问题的时候都会被转移到备用LAN设备上去,如果程序包控制被转移到备用节点,动态的IP地址还可以被备用节点使用,从而使得程序仍然可以访问这些包而并不需要知道它在哪个节点上。图3-5和3-6说明这种转移。
在上图中,Client 1通过动态IP地址127.15.12.147访问package 1,在下图中;由于节点1出错,package 1被转移到节点2上运行,IP地址也被动态地改变到节点2上去了。
当一个动态IP地址被转移到一个新的节点的时候,集群系统还需要做一件很重要的是就是向整个网络发送一个ARP广播,通知各个节点这个动态IP地址所对应的新的连接层的地址。每个点收到这个ARP广播后更新自己的ARP资料从而反应网络的变化。
原文转自:http://www.ltesting.net