Heartbeat2

Heartbeat 3与 2.x的最大差别在于,3 按模块把的原来2.x 拆分为多个子项目,并且提供了一个cluster-glue的组件,专用于Local ResourceManager 的管理。即heartbeat + cluster-glue + resouce-agent 三部分:

引用
(1)hearbeat本身是整个集群的基础(cluster messaging layer),负责维护集群各节点的信息以及它们之前通信;
(2)cluster-glue相当于一个中间层,可以将heartbeat和crm(pacemaker)联系起来,主要包含2个部分,LRM和STONITH;
(3)resource-agent,就是各种的资源的ocf脚本,这些脚本将被LRM调用从而实现各种资源启动、停止、监控等等。

通过这三部分已可构成一套完整的HA集群系统。但是,这还不够,因为没有管理工具。
而原GUI 工具Cluster Resource Manager (简称CRM)也被拆分由另一独立项目Pacemaker 负责。Pacemaker 提供了多种用户接口:

引用
(1)crm shell 基于字符的管理方式;
(2)一个使用Ajax Web配置方式的web konsole 窗口;
(3)hb_gui ,即heartbeat gui 图形配置工具,这也是原来2.x的默认GUI 配置工具;
(4)DRBD-MC,一个基于Java的配置管理工具。
-------------------------

直接点击下面的链接获取对应的rpm,或源码src.rpm:
http://www.clusterlabs.org/rpm/epel-5/
http://www.clusterlabs.org/rpm/epel-5/src/

-------------------------

./ConfigureMe configure

---------------------------

ha.cf :主要配置文档
haresources :资源文档,包括heartbeat服务启动时使用的资源。  
authkeys :安全验证

--------------------

需要修改hosts,ha.cf里面node定义只能是机器名

--------------------

Master先启动后,再启动slave,否则直接执行failover了。

--------------------


corosync是基于OpenAIS构建的集群引擎,可替代heartbeat进行心跳检测。----

-------------------------
使用单波时,下面的ha.cf需要做修改:

ucast eth1 192.168.10.2     # 注意此处HA2改为:ucast eth1 192.168.10.1 

-----------------------------------

./bootstrap --prefix=$PREFIX
--with-initdir=/tmp/cluster-build/etc/init.d
--sysconfdir=/tmp/cluster-build/etc --localstatedir=/tmp/cluster-build/var

... which bombs out with:
checking heartbeat/glue_config.h usability... no
checking heartbeat/glue_config.h presence... no
checking for heartbeat/glue_config.h... no
configure: error: Core development headers were not found
See `config.log' for more details.
需要:
 
export CFLAGS="$CFLAGS -I$PREFIX/include -L$PREFIX/lib"
http://www.gossamer-threads.com/lists/linuxha/dev/57512
-----------------------------------------

I am trying to compile Pacemaker again. I am following instructions
http://www.clusterlabs.org/wiki/Install#From_Source
With this:
./configure --prefix=/ --with-lcrso-dir=/usr/libexec/lcrso/
--disable-fatal-warnings or with this
./configure --prefix=/usr --with-lcrso-dir=/usr/libexec/lcrso/
--disable-fatal-warnings

I am getting the next error:
configure: error: Core development headers were not found

I have attached the configure log.

回答:

You need to have installed the cluster-glue package and its development
headers.
http://www.gossamer-threads.com/lists/linuxha/dev/59105
-------------------------------------


root [at] fc11-:# sh -x /etc/init.d/heartbeat start
+ '[' -f /etc/sysconfig/heartbeat ']'
+ HA_DIR=/etc/ha.d
+ export HA_DIR
+ CONFIG=/etc/ha.d/ha.cf
+ . /etc/ha.d/shellfuncs
/etc/init.d/heartbeat: line 51: /etc/ha.d/shellfuncs: No such file or directory
回答:
that file should be part of cluster-glue... was that package not installed?
http://www.gossamer-threads.com/lists/linuxha/dev/59399

真正的解决方法是装了cluster-glue之后,把shellfuncs给cp过去。。

-----------------------------------------

/etc/ha.d/haresource.d脚本示例:
#!/bin/bash
logger $0 called with $1
case "$1" in
start)
# Start commands go here
;;
stop)
# Stop commands go here
;;
status)
# Status commands go here
;;
esac
这里的logger命令用于给syslog守护进程发送消息,然后syslog基于/etc/syslog.conf文件中的配置将接收到消息写入到适当的日志文件中。
注意:这个脚本中的case语句不做任何事情,这里只是为你将来自己开发资源脚本时提供一个样本,以便可以处理start,stop,status参数。

--------------------------------------
    如果使用RPM安装包的话需要包括如下软件包: ipfail,Stonith,Ldirectord。

    ipfail的功能直接包含在heartbeat里面,是一个能够在探知服务IP失效了便立即将服务IP抓取来用的功能。

    Stonith是为了要在任何server停止时,确保剩下的server不会被正在运作的server所影响,
    可以选择性强制停止一些    server的解决方案。可能会使用在例如共享数据的情况之下。

    Ldirector是一个负载平衡的服务器。

---------------------------------------

    node primary.mydomain.com
    该选项是必须配置的。集群中机器的主机名,与“uname -n”的输出相同。

--------------------------
配置Authkeys
    需要配置的第三个文件authkeys决定了您的认证密钥。共有三种认证方式:crc,md5,和sha1。您可能会问:“我应该用哪个方法呢?”简而言之: 如果您的Heartbeat运行于安全网络之上,如本例中的交叉线,可以使用crc,从资源的角度来看,这是代价最低的方法。如果网络并不安全,但您也希望降低CPU使用,则使用md5。最后,如果您想得到最好的认证,而不考虑CPU使用情况,则使用sha1,它在三者之中最难破解。
    文件格式如下:
    auth <number>
    <number> <authmethod> [<authkey>]
    因此,对于sha1,示例的/etc/ha.d/authkeys可能是
    auth 1
    1 sha1 key-for-sha1-any-text-you-want
    对于md5,只要将上面内容中的sha1换成md5就可以了。 对于crc,可作如下配置:
    auth 2
    2 crc
    不论您在关键字auth后面指定的是什么索引值,在后面必须要作为键值再次出现。如果您指定“auth 4”,则在后面一定要有一行的内容为“4 <signaturetype>”。
    确保该文件的访问权限是安全的,如600。

-------------------------------
特别注意的是由于共享ip,需要设置:echo 1 >/proc/sys/net/ipv4/ip_nonlocal_bind

-------------------------------
    在启动主服务器的Heartbeat,使用命令:
    #/etc/init.d/heartbeat start
    或者
    #service heartbeat start
    可以使用命令查看日志文件:
    #tail -f /var/log/messages
------------------------------
可以使用tcpdump命令查看心跳广播是否到达两个服务器节点。
    #tcpdump -i all -n -p udp port 694
-------------------------------
配置ipfail
   ipfail插件的用途是检测网络故障,并作出合理的反应,如果需要的话使集群资源failover。为了实现这样的功能ipfail使用ping节点或者ping节点组,这些节点在集群中作为“哑”节点出现。如果HA节点间可以相互通信ipfail便可以可靠地检测到其中一个网络连接失效的情况,并作出补救。
    配置ipfail的步骤如下:
    a.选择好的候选ping节点
   这步很重要。你的选择越好,则得到的HA集群便越强壮。选择固定的交换机路由器等是一个好主意。不要选择HA集群中的任一个成员,也不要选择其他人的工作站。选择能反映您HA节点的连接状况的ping节点也很重要。如果您要监视两个接口的连接情况,明智的做法是为每个接口选择一个只对该接口可用的 ping节点。
    b.设置auto_failback为on或者off
    只有当Heartbeat被配置为非legacy时ipfail才会起作用。在ha.cf文件中,如下将auto_failback设置为on或者off:
    auto_failback on
    或者
    auto_failback off
    c.配置ha.cf使之启动ipfail。
    向ha.cf中增加如下一行(假设您在编译时的PREFIX为/usr):
    respawn hacluster /usr/lib/heartbeat/ipfail
    d.向ha.cf中加入ping节点:
    ping pnode1 pnode2 pnodeN
    将pnode1,pnode2,…pnodeN等替换为您ping节点的IP地址。
    确保向集群中各个成员的ha.cf中加入以上相同的配置指令。
     e. 修改Heartbeat配置文件
     如果修改了配置文件etc/ha.d/ authkeys或者 /etc/ha.d/ha.cf后要使用下面的命令重新加载服务。
    #/etc/init.d/heartbeat reload 或者 #service heartbeat reload
------------------------------
在启动前先查看IP地址。注:不能使用ifconfig查看
[root@real1 ~]# ip addr show

-------------------------------
drbd resource agent 的问题
如前文提到的,heartbeat 2.1.3 可使用多种drbd监控的RA,考虑到兼容性、扩展性等方面,我们将使用的是ocf/heartbeat格式的drbd RA。其文件存放在/usr/lib/ocf/resource.d/heartbeat/drbd,但该RA是基于DRBD 7.3的,不兼容8以上版本。原因是,DRBD 8以上版本的drbdadm中,丢弃了state参数,而用role代替:
引用
# drbdadm state oradata
'drbdadm state' is deprecated, use 'drbdadm role' instead.
Primary/Secondary

 

而drbd RA中正是依赖该命令的返回结果进行判断的,所以导致不兼容。该问题可参考以下两个链接:
[Ubuntu-ha] [Bug 369124] Re: heartbeat incompatible with drbd8-utils in jaunty
drbd heartbeat v2
解决方法,把/usr/lib/ocf/resource.d/heartbeat/drbd中下面部分的内容:
引用
drbd_get_status() {
        DRBD_STATE=$(do_drbdadm state $RESOURCE)

 

修改为:
引用
drbd_get_status() {
        DRBD_STATE=$(do_drbdadm role $RESOURCE)

 

※ 除了ocf/heartbeat 格式的drbd RA外,drbd rpm包本身也提供了heartbeat格式的drbddisk、drbdupper两个RA、linbit的drbd RA。
其中,heartbeat格式的drbddisk、drbdupper存放在/etc/ha.d/resource.d/目录下,若需使用请自行选择。(需修改其中的DEFAULTFILE 变量,drbddisk 用于加载drbd.ko模块,drbdupper用于设置primary设备。)
根据DRBD 8 的建议,从8.2开始,应使用其自带的drbd RA,路径为:/usr/lib/ocf/resource.d/linbit/drbd,在创建资源时,可选择linbit/drbd即可。
------------------------------------------

#采用网卡bond0的udp单播来通知心跳,ip应为对方IP,建议采用单播。当一个网段有多台这样cluster话,则一定要采用单播,否则每组cluster都会看到对方的节点,从而报错。

ucast bond0 172.18.57.154

-------------------------------------------
haresources配置文件介绍:
主从节点上的/etc/ra.d/raresource文件必须完全相同。文件每行通常包含以下组成部分:
1、服务器名字:指正常情况下资源运行的那个节点(即主节点),后跟一个空格或tab;这里指定的名字必须跟某个节点上的命令"uname -n"的返回值相同;
2、IP别名(即额外的IP地址,可选):在启动资源之前添加至系统的附加IP地址,后跟空格或tab;IP地址后面通常会跟一个子网掩码和广播地址,彼此间用“/”隔开;
3、资源脚本:即用来启动或停止资源的脚本,位于/etc/init.d/或/etc/ha.d/resourcd.d目录中;如果需要传递参数给资源脚本,脚本和参数之间需要用两个冒号分隔,多个参数时彼此间也需要用两个冒号分隔;如果有多个资源脚本,彼此间也需要使用空格隔开;
-----------------------------------------

pacemaker是heartbeat项目将原有的crm组件独立出来形成的项目(当然,除了Heartbeat外,还支持OpenAIS),它在Heartbeat3集群中的角色就是CRM(其实如今CRMd也只是pacemaker的一个部分)。只有heartbeat不能完成任何工作,packemaker负责整个集群资源的定义、调度,是集群的核心内容。
简单而言,整个集群的运行情况是这样的:heartbeat确保节点之间通信;packemaker确定集群拥有那些资源,根据服务器的性能状态、资源的约束关系确定资源在哪一个节点上运行;LRM(lrm程序包含在 cluster-glue中)按照CRM的要求启动相应的资源,并将资源的状态返回给pacemaker;pacemaker根据LRM的返回决定下一步的动作。
----------------------------------------
关闭STONITH支持
默认的情况下pacemaker中启用了stonith,但是我们实际部署集群时可能一般都不会用到stonith资源。当启用了stonith而集群中又没有stonith资源时,集群中的资源都是无法启动的。在启动资源时会报错:
引用
Jul 15 02:01:19 drbd1 mgmtd: [25127]: ERROR: unpack_resources: Resource start-up disabled since no STONITH resources have been defined
Jul 15 02:01:19 drbd1 mgmtd: [25127]: ERROR: unpack_resources: Either configure some or disable STONITH with the stonith-enabled option
Jul 15 02:01:19 drbd1 mgmtd: [25127]: ERROR: unpack_resources: NOTE: Clusters with shared data need STONITH to ensure data integrity

解决办法,就是把stonith-enabled选项禁用。
下面两条命令都能关闭STONITH:

# crm_attribute -t crm_config -n stonith-enabled -v false
# crm configure property stonith-enabled="false"

--------------------------------------------
※ 注意,独立的管理命令及非交互模式下的crm,在输入命令后会马上生效;而交互默认下的crm,必须手动用commit 命令提交后,配置才能生效。
---------------------------------------------
pacemaker中有quorum的概念,即集群中必须有一半的节点处于online的状态,则集群被认为是have quorum(可以认为是达到合法节点数要求)。如果少于一半的节点在线,那么pacemaker认为集群达不到节点数要求,从而拒绝启动集群中的资源。但是这种策略对于2个节点的集群明显是不合理的,所以就会发生当2个节点的集群其中一个节点失效时所有的集群都无法启动的情况。
同样的,也关闭STONITH,执行:

# crm configure property no-quorum-policy=ignore
# crm configure property stonith-enabled="false"
---------------------------------------------

※ 说明:
引用
a、根据DRBD官网的资料,ocf:heartbeat:drbd 已经被丢弃,不建议使用,故用ocf:linbit:drbd 代替;
b、IP的设定RA,用ocf:heartbeat:IPaddr2,其用ip 命令设定虚拟IP,虚拟IP生效后,用ifconfig命令看不到,可用ip addr 查看;
c、输入上述命令时,可能会提示警告,start、stop的超时时间少于建议值等,这可根据应用启动、停止的实际环境在“操作”中加入(可参考oracle_instant 资源);
d、ms 是设置“主备资源”;
e、 colocation 是设置“协同”限制,即group_oracle和ms_drbd_oracle必须在同一台机器上运行,并且若ms_drbd_oracle不能作为 Master运行时,不会运行group_oracle,相反group_oracle的状态不会影响ms_drbd_oracle;
g、order 是设置“顺序”限制,即先激活ms_drbd_oracle资源(把drbd设备设置为primary状态),然后再启动group_oracle组资源;
f、挂载操作中,/dev/drbd/by-res/oradata是为了方便使用,由drbd创建的一个指向/dev/drbd0的链接;
h、如果您输入的命令比较长,可以用“/”调到下一行继续,但是必须注意,下一行前面的空白只能用空格,不能用Tab等字符。
-----------------------------------------

※ 注意:migrate的动作会添加一条位置限制cli-standby-group_oracle,因此,当备机发生问题时,不会自动返回到主机上。要解决该问题,需要把位置限制删掉。
执行un-migrate操作:

# crm resource unmigrate group_oracle

这里的migrate和move、unmigrate和unmove是同义命令。
-------------------------------------

-------------------------------------
pacemaker是一个集群高可用系统“决策的大脑” ,RHEL中常说的服务(service)在pacemaker的集群概念中 被归为资源(resources),比如apache、mysql等等,不仅这些还有很多的东西属于资源的范畴。所有的集群资源必须由pacemaker 进行控制。 pacemaker可以监控节点,可以设定各种规则来管理资源在节点之间的移动 (……特别是节点挂掉的时候)。
 只要能用脚本控制的,就能被集群。 这里脚本指的是符合lsb规范的…… 当然也有heartbeat的ocf ,还有pacemaker开发的(好吧用cli添加资源的时候一共就三种  ocf:   lsb:   pacemaker:)

然后clusterlab.org给出了一本很详细的step by step的手册 Cluster_from_Scratch.pdf ,从系统的安装到使用pacemaker来管理brdb都给出了完整的例子……虽然有点那么啰嗦。
------------------------------------
CRM支持两种资源类型ocf和lsb:
LSB格式的脚本必须支持status功能,必须能接收start,stop,status三个参数;
OCF格式的脚本则必须支持start,stop,monitor三个参数。
其中status和monitor参数是用来监控资源的,非常重要。
如果是LSB风格的脚本,运行./nginxd status时候,返回值包含OK或则running则表示资源正常 ,返回值包含No或者stopped则表示资源不正常。
如果是OCF风格的脚本,运行./nginxd monitor时, 返回0表示资源是正常的,返回7表示资源出现问题。

ocf格式的启动脚本在/usr/lib/ocf/resource.d/heartbeat下面。
lsb的脚步一般在/etc/init.d/下面。
如:IPaddr使用的是ocf格式的控制脚本,路径为:/usr/lib/ocf/resource.d/heartbeat/IPaddr

----------------------------------------
将haresources资源文件转换成cib.xml文件
执行下面命令:
mv /etc/ha.d/haresources /etc/ha.d/haresources.bak
/usr/lib/heartbeat/haresources2cib.py /etc/ha.d/haresources.bak
会在/var/lib/heartbeat/crm下生成cib.xml

运行heartbeat后会在/var/lib/heartbeat/crm目录下生成cib.xml.last、cib.xml.sig、 cib.xml.sig.last文件,此时再修改cib.xml需要先删除上面三个文件,rm -rf /var/lib/heartbeat/crm/cib.xml.*

----------------------------------------
在ha.cf中添加下面行
# 开启集群资源管理器,使用heartbeat 2.x模式
crm on
# respwn列出将要执行和监控的命令
# respwn使得Heartbeat以userid(在本例中为hacluster)的身份来执行该进程并监视该进程的执行情况
# 如果其死亡便重启之。
# ipfail插件的用途是检测网络故障,并作出合理的反应,如果需要的话使集群资源故障转移。
# respawn
respawn hacluster /usr/lib/heartbeat/ipfail
apiauth ipfail gid=haclient uid=hacluster
respawn hacluster /usr/lib/heartbeat/cibmon -d
apiauth cibmon   uid=hacluste

-----------------------------------------
heartbeat需要haclient用户组和hacluster用户,如果编译时没有创建用户及组需要执行本步操作。两个节点做同样的操作,并保证haclient和hacluster的ID一样。

groupadd -g 500 haclient

useradd -u 500 -g haclient hacluster

修改heartbeat目录权限:
find / -type d -name “heartbeat” -exec chown -R hacluster {} ;
find / -type d -name “heartbeat” -exec chgrp -R haclient {} ;

如果没有上述账户,启动heartbeat后将会出现下面的错误,系统会被重启:
EMERG: Rebooting system.  Reason: /usr/lib/heartbeat/cib

------------------------------------------
如果nginxd在系统启动时是自启动的,需要关闭它:
chkconfig –leve 2345 nginxd off
------------------------------------------
CRM管理

启动/停止资源
#crm_resource -r nginxd_2 -p target_role -v started
#crm_resource -r nginxd_2 -p target_role -v stopped
查看资源跑在那个节点上
crm_resource -W -r nginxd_2
将资源从当前节点转移到另个一节点
#crm_resource -M -r nginxd_2
将资源转移到指定节点
#crm_resource -M -r nginxd_2 -H HA1
允许资源回到正常的节点
#crm_resource -U -r nginxd_2
将资源从CRM中删除
#crm_resource -D -r nginxd_2 -t primitive
将资源从CRM中禁用
#crm_resource -p is_managed -r nginxd_2 -t primitive -v off
将资源从新从CRM中启用
#crm_resource -p is_managed -r nginxd_2 -t primitive -v on
重启资源
#crm_resource -C -H HA1 -r nginxd_2
检查所有节点上未在CRM中的资源
#crm_resource -P
检查指定节点上未在CRM中的资源
#crm_resource -P -H HA1
检查所有节点上未在CRM中的资源
#crm_resource -P
检查指定节点上未在CRM中的资源
#crm_resource -P -H HA1

 

你可能感兴趣的:(oracle,集群,脚本,crm,resources,Primitive)