1.简介

heartbeat和pacemaker都支持三种资源代理:传统的haresources脚本(/etc/ha.d/resource.d)、符合LSB规范的脚本(/etc/init.d)以及OCF脚本(/usr/lib/ocf/resource.d/heartbeat)。其中传统的haresources脚本是基于LSB脚本的,和LSB只有少许区别。

传统的资源代理适合于没有启用pacemaker的heartbeat,也适合于设置了class=heartbeat的Pacemaker。pacemaker中,建议优先使用OCF类的资源代理,如果没有则应该使用LSB资源代理。

无论是heartbeat还是pacemaker,对于传统的资源代理脚本和LSB脚本都只会执行start/stop/status三个操作:

1.start操作

启动资源。在已启动的资源下再次启动时,不允许返回任何错误代码(非0)。只有当前机器会启动自身的资源,且只有在status显示未运行时才会启动。

2.stop操作

停止资源。必须要保证在已停止的资源上再次停止时不会出现错误,状态码也必须为0,否则集群会不断停止资源,最后重启操作系统。但是很多不符合LSB规范的脚本都会在已停止的状态下不允许再次停止。规范的LSB脚本是无所谓多次停止的,无论是start/stop/status都具有"幂等性"。

3.status操作

判断资源是否正在运行。

status操作必须能够正确地报告资源状态,在已运行的情况下必须输出"OK"或"running"关键字,且在未运行的情况下必须不能输出"OK"和"running"关键字。对于status操作,集群不关心它的退出状态码。

这听起来很不可思议,这是因为古老的linux发行版中的init脚本给出的退出状态码不可靠,而是信任"OK"或"running"关键字。

heartbeat在很多情况下都会调用status操作,比如在start资源前会执行status,在释放资源前也会执行status(也就是说先status,再stop,因为heartbeat不知道资源是否正处于running状态)。

在重复多次stop失败后,heartbeat也会执行一次status。如果status报告该资源仍在运行,heartbeat将会重启操作系统以保证资源能彻底停止。注意,该行为只在基于haresources的集群中才会执行,在CRM/Pacemaker集群中使用的是stomith。

2.符合LSB规范的脚本

LSB资源代理一般是在/etc/init.d目录下的,它们由OS或者软件自身提供。如果要结合heartbeat或者packmaker,这些LSB脚本必须符合LSB规范。

虽然许多LSB的提供者都声称它们提供的LSB脚本是符合LSB规范的,但实际上却并非如此,常见的问题有:

  • 没有输出status的操作。
  • start/stop/status操作没有分配符合规范的退出状态码。
  • start的时候会返回错误信息。(这严重违反LSB规范)
  • stop的时候会返回错误信息。(这严重违反LSB规范)

注意,合格的LSB资源代理是无法对其传递参数的(heartbeat或pacemaker会自动处理start/stop/status/restart等操作)。

要检查一个LSB脚本是否符合LSB规范,可以使用下面的步骤来检查:

  1. 在stop的状态下检查start操作:/etc/init.d/SCRIPT start; echo $?

    • 服务是否启动成功?
    • 上面的命令打印结果是否为"0"?
  2. 在已运行的情况下检查status操作:/etc/init.d/SCRIPT status; echo $?
    • 是否接受status操作?
    • status的结果是否意味着服务已经运行?
    • 打印结果是否为"0"?
  3. 在已运行的情况下再次start:/etc/init.d/SCRIPT start; echo $?
    • 服务是否仍然运行?
    • 打印结果是否为0?
  4. 在已运行的情况下检查stop操作:/etc/init.d/SCRIPT stop; echo $?
    • 服务是否停止?
    • 打印结果是否为0?
  5. 在已停止的情况下检查status操作:/etc/init.d/SCRIPT status; echo $?
    • 是否接受status操作?
    • status的结果是否意味着服务不在运行?
    • 打印结果是否为"3"?
  6. 在已停止的情况下再次stop:/etc/init.d/SCRIPT stop; echo $?
    • 服务是否仍然停止?
    • 打印结果是否为0?

也就是说,一个符合规范的LSB脚本,接受start/stop/status,且它们的执行结果具有"幂等性",运行状态下再次运行不会有任何区别,停止状态下继续停止不会有任何区别。且在停止状态下检查status时,退出状态码为3而不是0。

3.OCF资源代理

OCF脚本写法详细手册:http://www.linux-ha.org/doc/dev-guides/ra-dev-guide.html

OCF类的资源代理是在LSB的基础上进行扩展的脚本,它在/usr/lib/ocf/resource.d/heartbeat中。如果你自己定义ocf资源脚本,可以在resoruce.d目录下创建你自己的目录,再将ocf脚本放进去。例如,你写的ocf脚本名为myocf,你想放的目录是abc,那么资源的路径是/usr/lib/ocf/resource.d/abc/myocf

OCF支持传递参数。要传递参数,需要借助OCF_RESKEY_开头的环境变量。例如,要传递IP参数,可以将其定义在OCF_RESKEY_ip环境变量上。

OCF资源代理必须具备以下几种操作:

  1. start:启动资源,且启动成功的退出状态码为0,启动失败的状态码不为7(可以为任何非0和7的值)。
  2. stop:停止资源,且停止成功的退出状态码为0,退出失败的状态码不为7。
  3. monitor:监控资源的健康状况,相当于status。如果资源正在运行,退出状态码0,如果已停止,退出状态码为7,如果错误,状态码可为任何值。
  4. meta-data:使用XML格式提供资源的信息。退出状态码为0。
  5. validate-all:验证配置参数。如果参数有效,则退出状态码为0,无效则为2,如果资源未配置则退出码为6,找不到要运行的资源代理时推出状态码为5。

此外,如果pacemaker要实现cloned和multi-state资源的功能,则还需要求:

  1. promote:资源升级,将本地资源升级为master状态,退出状态码为0。
  2. demote:资源降级,将本地资源降级为slave状态,退出状态码为0。
  3. notify:集群用它来发送通知事件,告诉资源发生了什么事。退出状态码必须为0。

Resource Agent:LSB和OCF的更多相关文章

  1. 理解 OpenStack 高可用(HA) (4): Pacemaker 和 OpenStack Resource Agent (RA)

    本系列会分析OpenStack 的高可用性(HA)概念和解决方案: (1)OpenStack 高可用方案概述 (2)Neutron L3 Agent HA - VRRP (虚拟路由冗余协议) (3)N ...

  2. 理解 OpenStack 高可用(HA)(2):Neutron L3 Agent HA 之 虚拟路由冗余协议(VRRP)

    本系列会分析OpenStack 的高可用性(HA)概念和解决方案: (1)OpenStack 高可用方案概述 (2)Neutron L3 Agent HA - VRRP (虚拟路由冗余协议) (3)N ...

  3. pacemaker+corosync/heartbeat对比及资源代理RA脚本

    一.Pacemaker概念 (1)Pacemaker(心脏起搏器),是一个高可用的群集资源管理器.它实现最大可用性资源管理的节点和资源级故障检测和恢复,通过使用首选集群基础设施(Corosync或He ...

  4. Heartbeat+DRBD+MySQL高可用方案

    1.方案简介 本方案采用Heartbeat双机热备软件来保证数据库的高稳定性和连续性,数据的一致性由DRBD这个工具来保证.默认情况下只有一台mysql在工作,当主mysql服务器出现问题后,系统将自 ...

  5. Linux 集群

    html,body { } .CodeMirror { height: auto } .CodeMirror-scroll { } .CodeMirror-lines { padding: 4px 0 ...

  6. ZABBIX冗余架构构筑(Centos6.4+pacemaker+corosync+drbd)

    基本构成: 用pacemaker+corosync控制心跳和资源迁移 用drbd同步zabbix配置文件和mysql数据库 所有软件都用yum安装至默认路径 主机的drbd领域挂载至/drbd,备机不 ...

  7. linux高可用集群(HA)原理详解(转载)

    一.什么是高可用集群 高可用集群就是当某一个节点或服务器发生故障时,另一个 节点能够自动且立即向外提供服务,即将有故障节点上的资源转移到另一个节点上去,这样另一个节点有了资源既可以向外提供服务.高可用 ...

  8. 全是干货---Linux 高可用(HA)集群基本概念详解

    http://www.linuxidc.com/Linux/2013-08/88522.htm 高可用集群的衡量标准    HA(High Available), 高可用性群集是通过系统的可靠性(re ...

  9. Heartbeat+DRBD+MySQL高可用方案【转】

    转自Heartbeat+DRBD+MySQL高可用方案 - yayun - 博客园 http://www.cnblogs.com/gomysql/p/3674030.html 1.方案简介 本方案采用 ...

随机推荐

  1. 第三次OO总结

    规格化设计的调研 随着50年代高级语言的出现,编译技术不断完善,涌现出多种流派的语言,其中就有里程碑式的Pascal语言:进入70年代,由于众多语言造成的不可移植.难于维护,Ada程序设计语言诞生了, ...

  2. Unity使用代码动态给按钮赋值各个状态下的图片

    一个小知识点,怕忘记,所以记录下.废话不多说,直接上代码: 未赋值之前: 使用下面代码赋值: using UnityEngine; using UnityEngine.UI; public class ...

  3. Python开发——8.模块

    一.模块 1.模块 (1)定义:一个.py文件就是一个模块 (2)原因:为了防止程序代码越来越长,对函数进行分组放到不同的文件夹里. (3)优点:提高代码的可维护性:模块编写完毕可以被别人引用,也可以 ...

  4. [swarthmore cs75] Compiler 3 – Cobra

    课程回顾 Swarthmore学院16年开的编译系统课,总共10次大作业.本随笔记录了相关的课堂笔记以及第5次大作业. 增加了bool数据表示和比较运算符的支持,具体语法参考下图: 第一种int和bo ...

  5. Django积木块八——三级联动

    三级联动 前端需要的效果,省之后市之后现,创建model,查询所有的省的信息,json传到前面,之后通过省的id找到对应的市,是用异步实现的. # model class Sheng(models.M ...

  6. CSS3中很容易混淆的transform,translate,transition。如何去区分,以及综合写法。

    属性 含义     transition(过渡) 用于设置元素的样式过度,和animation有着类似的效果,但细节上有很大的不同 transform(变形) 用于元素进行旋转.缩放.移动或倾斜,和设 ...

  7. 深入-FastReport TfrxReport组件使用

    [翻译] FastReport TfrxReport组件使用   一:加载和保存报表 报表默认保存在项目窗体文件中,大多数情况下,没有更多的操作要深圳市, 因此,你不需要采取特别措施来载入报告.如果你 ...

  8. 【转载】关于.NET下开源及商业图像处理(PSD)组件

    原创]关于.NET下开源及商业图像处理(PSD)组件   阅读目录 1 前言 2 .NET图像处理组件总结 3.相关资源网址        本博客所有文章分类的总目录:http://www.cnblo ...

  9. Android开发技术周报176学习记录

    Android开发技术周报176学习记录 教程 当 OkHttp 遇上 Http 2.0 http://fucknmb.com/2018/04/16/%E5%BD%93OkHttp%E9%81%87% ...

  10. Metasploit Framework(2)Exploit模块、Payload使用

    文章的格式也许不是很好看,也没有什么合理的顺序 完全是想到什么写一些什么,但各个方面都涵盖到了 能耐下心看的朋友欢迎一起学习,大牛和杠精们请绕道 Exploit模块分为主动和被动(Active.Pas ...