Linux高可用性方案之Heartbeat的CRM配置

heartbeat默认模式是没法监控资源的,也就是说其中某个资源要是crash掉了,也不会发生任何动作,它只有当它认为对方机器dead后才会发生动作,也就是机器crashed,网络断掉了之类。这显然没法达到我们的目标。为了达到我们的目标就要采用crm(cluster resource management)模式了。

本文需要实现的目标,让ha自动监控资源的运行状态。 启动服务ip为192.168.0.222,自动运行脚本echo.sh
echo.sh脚本内容如下
#!/bin/bash
echo "ii" >> /var/lib/heartbeat/crm/1.txt
exit 0

配置crm
首先,先按默认模式安装、配置Heartbeat读者可参见
http://czmmiao.iteye.com/blog/1174010
默认模式配置成功后在ha.cf里面增加
crm on
将haresources资源文件转换成 cib.xml文件,2.1.3自带有转换脚本
#/usr/lib/heartbeat/haresources2cib.py haresources
输出文件在/var/lib /heartbeat/crm/cib.xml
如果hacluster和haclient用户和用户组是在安装heartbeat之后创建的话,则需要执行下面命令修改权限
修改heartbeat目录权限,可以用以下命令:

#find / -type d -name "heartbeat" -exec chown -R hacluster {} ;
#find / -type d -name "heartbeat" -exec chgrp -R haclient {} ;

在2.0的版本中ipfail与crm 模式有冲突,所以在ha.cf中不可打开ipfail。
cib.xml文件的修改
Heartbeat的cib.xml文件资源有两种配置风格分别是ocf和lsb在修改前先介绍一下ocf和lsb格式的区别:
LSB格式的角本必须支持status功能,必须能接收start,stop,status,三个参数。
lsb格式的启动角本在 /usr/lib/lsb/resource.d/heartbeat目录下。
例如LSB风格的脚本,运行./mysql status时候,
返回值包含OK或则running则表示资源正常
返回值包含stopped或者No则表示资源不正常。
OCF格式,则必须支持start,stop,monitor三个参数.其中status和monitor参数是用来监控资源的。
ocf格式的启动脚本在/usr/lib/ocf/resource.d/heartbeat(也许你的机器上目录不是这个,可以搜索ocf来查找)
假如是OCF风格的脚本,运行./mysql monitor时候,
返回0表示资源是正常的,
返回7表示资源出现问题.
在Heartbeat2.1.3中默认的资源配置风格为ocf,如果需要将资源的配置风格聪ocf修改为lsb有两种修改方法
1.修改cib.xml,将资源的ocf改成lsb。
将脚本文件拷贝至 /usr/lib/lsb/resource.d/heartbeat(如果该目录不存在,则手工创建,并将权限赋给hacluster:haclient)
2.修改/usr /lib/ocf/resource.d/heartbeat下面的脚本,使之能正常工作。或者将/etc/init.d/下的脚本拷过来,修改使它支持monitor操作
配置完成后启动heartbeat服务

#/etc/init.d/heartbeat start
创建群集资源
可以创建以下类型的资源
原始资源:原始资源是最基本的资源类型。
资源组:资源组包含一系列需要放置在一起、按顺序启动和以反序停止的资源。
克隆资源:克隆资源是可以在多个主机上处于活动状态的资源。如果各个资源代理支持,则任何资源均可克隆。

主资源:主资源是一种特殊的克隆资源,主资源可以具有多种模式。主资源必须只能包含一个组或一个常规资源。
资源选项
您可以为添加的每个资源定义选项。群集使用这些选项来决定资源的行为方式,它们会告知 CRM 如何对待特定的资源。可使用 crm_resource –meta 命令或 GUI 来设置资源选项

原始资源选项
priority 如果不允许所有的资源都处于活动状态,群集会停止优先级较低的资源以便保持较高优先级资源处于活动状态。

target-role 群集应试图将此资源保持在何种状态,允许的值:Stopped 和 Started。
is-managed 是否允许群集启动和停止资源,允许的值:true和 false。
resource-stickiness 资源留在所处位置的自愿程度如何,默认为default- resource-stickiness 的值。
migration-threshold 节点上的此资源应发生多少故障后才能确定该节点没有资格主管此资源,默认值:none。
multiple-active 如果发现资源在多个节点上活动,群集该如何操作,允许的值:block(将资源标记为未受管)、stop_only 和 stop_start。
failure-timeout 在恢复为如同未发生故障一样正常工作(并允许资源返回它发生故障的节点)之前,需要等待几秒钟,默认值:never。
资源操作
默认情况下,群集将不会确保您的资源一直正常。要指示群集如此操作,需要向资源的定义中添加一个监视操作。可为所有类或资源代理添加监视操作。

ID :您的操作名称。必须是唯一的。
name :要执行的操作。常见值:monitor、start 和 stop。
interval :执行操作的频率。单位:秒。
timeout : 需要等待多久才能声明操作失败。
requires :需要满足什么条件才能发生此操作。允许的值:nothing、quorum 和 fencing。默认值取决于是否启用屏障和资源的类是否为 stonith。对于 STONITH 资源,默认值为 nothing。
on-fail :此操作失败时执行的操作。允许的值:

ignore:假装资源没有失败。
block:不对资源执行任何进一步操作。
stop:停止资源并且不在其他位置启动该资源。
restart:停止资源并(可能在不同的节点上)重启动。
fence:关闭资源失败的节点 (STONITH)。
standby:将所有资源从资源失败的节点上移走。
enabled 如果值为 false,将操作视为不存在。允许的值:true、false。

原始资源包含的参数
元属性:元属性是可以为资源添加的选项。它们告诉 CRM 如何处理特定资源。
实例属性:实例属性是特定资源类的参数,用于确定资源类的行为方式及其控制的服务实例。
操作:可以为资源添加监视操作。监视操作指示群集确保资源状况依然正常。所有资源代理类都可以添加监视操作。您还可以设置特定参数,如为 start 或stop 操作设置 timeout值。
定义原始资源:primitive   唯一ID   资源代理类型:资源代理的提供程序:资源代理名称  实例属性   操作  元属性

migration-threshold用来定义资源的故障次数,假设已经为资源配制了一个首选在节点上运行的位置约束。如果那里失败了,系统会检查 migration-threshold 并与故障计数进行比较。如果故障计数 >= migration-threshold,会将资源迁移到下一个自选节点。
默认情况下,一旦达到阈值,就只有在管理员手动重置资源的故障计数后(在修复故障原因后),才允许在该节点上运行有故障的资源。
但是,可以通过设置资源的 failure-timeout 选项使故障计数失效。如果设置migration-threshold=2 和 failure-timeout=60s ,将会导致资源在两次故障后迁移到新的节点,并且可能允许在一分钟后移回(取决于黏性和约束分数)。
迁移阈值概念有两个例外,在资源启动失败或停止失败时出现:启动故障会使故障计数设置为 INFINITY,因此总是导致立即迁移。停止故障会导致屏障(stonith-enabled 设置为 true 时,这是默认设置)。如果不定义 STONITH资源(或 stonith-enabled 设置为 false),则该资源根本不会迁移。
重置资源的故障计数:对指定节点上的指定资源执行 crm_resource -C 和 crm_failcount -D 命令。
如果在创建时将资源的初始状态设置为 stopped(target-role 元属性的值为 stopped),则资源在创建后不会自动启动。要想启动资源使用命令:crm resource start 资源ID
配置资源监视(可以在定义资源时用op monitor命令定义)
虽然 High Availability Extension 可以检测节点故障,但也能够检测节点上的各个资源何时发生故障。如果希望确保资源运行,则必须为该资源配置资源监视。资源监视包括指定超时和/或启动延迟值以及间隔。间隔告诉 CRM 检查资源状态的频率。

相关推荐